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