OWL。如何表达兄妹有共同点parent?
OWL. How to express that siblings has common parent?
我用海龟符号写了一个简单的文件,其中 Dave 是 Mary 的父亲,Mary 是 Jack 的妹妹。我想要 Dave 有两个孩子 Jack 和 Mary 的理由。
:Human a rdfs:Class .
:Man rdfs:subClassOf :Human ;
owl:disjointWith :Woman .
:Woman rdfs:subClassOf :Human ;
owl:disjointWith :Man .
:hasChild a rdf:Property ;
owl:inverseOf :hasParent ;
rdfs:domain :Human ;
rdfs:range :Human.
:fatherOf owl:InverseFunctionalProperty rdf:Property ;
owl:inverseOf :hasFather ;
rdfs:subPropertyOf :hasChild ;
rdfs:domain :Man ;
rdfs:range :Human.
:motherOf owl:InverseFunctionalProperty rdf:Property ;
owl:inverseOf :hasMother ;
rdfs:subPropertyOf :hasChild ;
rdfs:domain :Woman ;
rdfs:range :Human.
:siblingOf a owl:SymmetricProperty, owl:TransitiveProperty ;
owl:inverseOf :hasSibling ;
rdfs:domain :Human ;
rdfs:range :Human.
:brotherOf a rdf:Property ;
owl:inverseOf :hasBrother ;
rdfs:subPropertyOf :siblingOf ;
rdfs:domain :Man ;
rdfs:range :Human.
:sisterOf a rdf:Property ;
owl:inverseOf :hasSister ;
rdfs:subPropertyOf :siblingOf ;
rdfs:domain :Woman ;
rdfs:range :Human.
[] rdf:type owl:Axiom ;
owl:subject :Man ;
owl:predicate rdfs:subClassOf ;
owl:object :Human ;
rdfs:label "States that every man is a human."^^xsd:string .
[] rdf:type owl:Axiom ;
owl:subject :Woman ;
owl:predicate rdfs:subClassOf ;
owl:object :Human ;
rdfs:label "States that every woman is a human."^^xsd:string .
:Dave a :Man .
:Jack a :Man ;
:hasSister :Mary .
:Mary a :Woman ;
:hasFather :Dave .
我读过 http://www.w3.org/TR/owl-ref/#Property, http://www.w3.org/TR/2002/WD-owl-semantics-20021108/syntax.html#2.3.1.3 但仍然不明白如何表达这个简单的事实。
Dave is father of Mary and Mary sister of Jack. I want reason that Dave have two childs Jack and Mary.
如果您忽略兄弟姐妹具有不同 parent 的可能性(例如,一个 parent 和一个不同的 parent),那么您可以使用子属性链来做到这一点。如果你有这样的数据:
戴夫 →hasChild Mary →hasSibling 杰克
那么您想要使用的规则是:
有孩子 •有兄弟姐妹 ⊑有孩子
这会让你推断出:
戴夫 →hasChild 杰克
在 Turtle 中可能如下所示:
@prefix : < .
@prefix a: < .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
a:Jack a owl:NamedIndividual .
a:Dave a owl:NamedIndividual ;
a:hasChild a:Mary .
a:hasChild a owl:ObjectProperty ;
owl:propertyChainAxiom ( a:hasChild a:hasSibling ) .
a:Mary a owl:NamedIndividual ;
a:hasSibling a:Jack .
a:hasSibling a owl:ObjectProperty .
a: a owl:Ontology .
Protege 得出的结论如下:
我用海龟符号写了一个简单的文件,其中 Dave 是 Mary 的父亲,Mary 是 Jack 的妹妹。我想要 Dave 有两个孩子 Jack 和 Mary 的理由。
:Human a rdfs:Class .
:Man rdfs:subClassOf :Human ;
owl:disjointWith :Woman .
:Woman rdfs:subClassOf :Human ;
owl:disjointWith :Man .
:hasChild a rdf:Property ;
owl:inverseOf :hasParent ;
rdfs:domain :Human ;
rdfs:range :Human.
:fatherOf owl:InverseFunctionalProperty rdf:Property ;
owl:inverseOf :hasFather ;
rdfs:subPropertyOf :hasChild ;
rdfs:domain :Man ;
rdfs:range :Human.
:motherOf owl:InverseFunctionalProperty rdf:Property ;
owl:inverseOf :hasMother ;
rdfs:subPropertyOf :hasChild ;
rdfs:domain :Woman ;
rdfs:range :Human.
:siblingOf a owl:SymmetricProperty, owl:TransitiveProperty ;
owl:inverseOf :hasSibling ;
rdfs:domain :Human ;
rdfs:range :Human.
:brotherOf a rdf:Property ;
owl:inverseOf :hasBrother ;
rdfs:subPropertyOf :siblingOf ;
rdfs:domain :Man ;
rdfs:range :Human.
:sisterOf a rdf:Property ;
owl:inverseOf :hasSister ;
rdfs:subPropertyOf :siblingOf ;
rdfs:domain :Woman ;
rdfs:range :Human.
[] rdf:type owl:Axiom ;
owl:subject :Man ;
owl:predicate rdfs:subClassOf ;
owl:object :Human ;
rdfs:label "States that every man is a human."^^xsd:string .
[] rdf:type owl:Axiom ;
owl:subject :Woman ;
owl:predicate rdfs:subClassOf ;
owl:object :Human ;
rdfs:label "States that every woman is a human."^^xsd:string .
:Dave a :Man .
:Jack a :Man ;
:hasSister :Mary .
:Mary a :Woman ;
:hasFather :Dave .
我读过 http://www.w3.org/TR/owl-ref/#Property, http://www.w3.org/TR/2002/WD-owl-semantics-20021108/syntax.html#2.3.1.3 但仍然不明白如何表达这个简单的事实。
Dave is father of Mary and Mary sister of Jack. I want reason that Dave have two childs Jack and Mary.
如果您忽略兄弟姐妹具有不同 parent 的可能性(例如,一个 parent 和一个不同的 parent),那么您可以使用子属性链来做到这一点。如果你有这样的数据:
戴夫 →hasChild Mary →hasSibling 杰克
那么您想要使用的规则是:
有孩子 •有兄弟姐妹 ⊑有孩子
这会让你推断出:
戴夫 →hasChild 杰克
在 Turtle 中可能如下所示:
@prefix : < .
@prefix a: < .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
a:Jack a owl:NamedIndividual .
a:Dave a owl:NamedIndividual ;
a:hasChild a:Mary .
a:hasChild a owl:ObjectProperty ;
owl:propertyChainAxiom ( a:hasChild a:hasSibling ) .
a:Mary a owl:NamedIndividual ;
a:hasSibling a:Jack .
a:hasSibling a owl:ObjectProperty .
a: a owl:Ontology .
Protege 得出的结论如下: