why protege doesn't infer a data property in t

2020-05-01 08:37发布

问题:

I have a class Rates1.0 that is a sub class of the class the has a value 1.0f for the predicate ratesBy as the following:

<!-- http://semanticrecommender.com/rs#Rates1.0 -->
<owl:Class rdf:about="http://semanticrecommender.com/rs#Rates1.0">
    <rdfs:subClassOf rdf:resource="http://semanticrecommender.com/rs#Rates"/>
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="http://semanticrecommender.com/rs#ratesBy"/>
            <owl:hasValue rdf:datatype="http://www.w3.org/2001/XMLSchema#float">1.0</owl:hasValue>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>

the predicate ratesBy is both data property and functional as the following:

<!-- http://semanticrecommender.com/rs#ratesBy -->

<owl:DatatypeProperty rdf:about="http://semanticrecommender.com/rs#ratesBy">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
    <rdfs:domain rdf:resource="http://semanticrecommender.com/rs#Rates"/>
    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#float"/>
</owl:DatatypeProperty>

I define an instance of Rates1.0 call it r1, I run the reasoner in protege, but the reasoner doesn't infer that r1 has a data property ratesBy at all, why please?

I said that all Rates1.0 have a ratesBy with value 1.0f, and the ratesBy is functional

Update

This is the definition of r1 instance

 <!-- http://www.MusicSemanticOntology.com/mso#r1 -->

    <owl:NamedIndividual rdf:about="http://www.MusicSemanticOntology.com/mso#r1">
        <rdf:type rdf:resource="http://semanticrecommender.com/rs#Rates1.0"/>
        <rs:about rdf:resource="http://music.org/musicontology/mo#5th_Symphony"/>
        <rs:createdOn rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2016-01-01T00:00:00</rs:createdOn>
    </owl:NamedIndividual>

Update 2

Even if I said that Rates1.0 is a sub class of (ratesBy value 1.0f) and (ratesBy exactly 1 float) still not infered that r1 should have ratesBy

Hint: i know the using equvlent instead of sub class will solve but i need to know why sub class doesn't work in this scenario