
<owl:Class rdf:about="http://www.liyangyu.com/camera#ExpensiveDSLR_1">
<rdfs:subClassOf rdf:resource="http://www.liyangyu.com/camera#DSLR"/>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.liyangyu.com/camera#owned_by"/>
<owl:someValuesFrom rdf:resource="http://www.liyangyu.com/camera#Professional"/>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
Then we have an instance defined (p. 168) as follows.
<myCamera:ExpensiveDSLR_1 rdf:about="http://dbpedia.org/resource/Canon_EOS-1D_1">
<myCamera:owned_by rdf:resource="http://www.liyangyu.com/people#Tom"/>
</myCamera:ExpensiveDSLR_1>
The author claims then that following fact will be inferred.
<http://www.liyangyu.com/people#Tom> rdf:type <http://www.liyangyu.com/camera#Professional>
I checked this with Pellet and other reasoners but no one infers this.
The author forgets that we are working with an Open World Assumption. At any time someone else can come along with new information. So at this stage one is not certain that the only owner known is a Professional; hence no inference.
owl:someValuesFrom is used to infer subject from objects, not the other way around as the author claims.
<owl:Class rdf:about="http://www.liyangyu.com/camera#ExpensiveDSLR_2">The related instance:
<rdfs:subClassOf rdf:resource="http://www.liyangyu.com/camera#DSLR"/>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.liyangyu.com/camera#cost"/>
<owl:hasValue rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>expensive</owl:hasValue>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<myCamera:DSLR rdf:about="http://dbpedia.org/resource/Canon_EOS-1D_2">
<myCamera:owned_by rdf:resource="http://www.liyangyu.com/people#Tom"/>
<myCamera:cost rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>expensive</myCamera:cost>
</myCamera:DSLR>
The claimed inference:
<http://dbpedia.org/resource/Canon_EOS-1D_2> rdf:type <http://www.liyangyu.com/camera#ExpensiveDSLR_2>
Again checking this with Pellet et all: no inference at all.
This is because the condition in the model is as follows:
| If | then |
|---|---|
| instance of http://www.liyangyu.com/camera#ExpensiveDSLR_2 | property cost has value "expensive". |
Not the way around.
If you change the model to
<owl:Class rdf:about="http://www.liyangyu.com/camera#ExpensiveDSLR_3">
<rdfs:subClassOf rdf:resource="http://www.liyangyu.com/camera#DSLR"/>
<owl:equivalentClass>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.liyangyu.com/camera#cost"/>
<owl:hasValue rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>expensive</owl:hasValue>
</owl:Restriction>
</owl:equivalentClass>
</owl:Class>
then you get
| If | then |
|---|---|
| instance of http://www.liyangyu.com/camera#ExpensiveDSLR_3 | property cost has value "expensive". |
| AND | |
| property cost has value "expensive" | instance of http://www.liyangyu.com/camera#ExpensiveDSLR_3 |

Comments