我需要推断一个人是另一个人的兄弟,如果他们有同一个父亲。
所以,如果我有这个,
巴特的父亲是霍默
Lisa有父亲Homer
丽莎有父亲荷马,因为 Bart
和 Lisa
有同一个父亲,我想推断。
丽莎有哥哥巴特
有什么方法可以使用任何属性特征来实现吗?
安托万-齐默尔曼的回答 是一个非常好的开端,触及到了解决这类任务的主要点。
从... x 给每个 x'的兄弟们,有一条道路的形式。有父亲o有父亲-1.
不过,这其实不只是兄弟之间的事。 对所有的兄弟姐妹都是如此 x 本身。 这意味着你将有以下的定义。有兄弟姐妹:
有兄弟姐妹≡有父亲o有父亲。-1
(其实,这真的只是 hasPaternalSibling;更精确的定义是使用 hasParent.) 现在,利用这一点,你可以要求兄弟,也就是简单的兄弟姐妹是男人,的。x 的查询,如:(hasSibling值x)和Man
(hasSibling value x) and Man
然而,它 会 妥帖 有兄弟 财产。 你可以通过财产链和 有兄弟姐妹 如果你有一个特殊的属性,将每个 人 到自己,而只把雄性与自己联系起来。
hasBrother ≡ hasSibling o specialProperty(兄弟姐妹)
其实,这样的属性是我们从一种叫做 腐化,这在一个问题中已经有了更多的描述。OWL 2 rolification,以及它的答案。 我们的想法是,对于该类 人,我们创建一个新的属性 r人 并添加等价物。
人≡r人 一些自我
其中说,每个 人 与自己的关系是 r人 财产,而且 只是 的实例 人 是如此连接。 这正是我们需要的属性,因为 特殊属性 以上。 因此,我们最终得到以下定义。人, 有兄弟姐妹和 有兄弟:
现在,我们可以为兄弟们请求 x 这样的查询。
hasBrother-1 价值x
例如,我们可以要求 格雷格的兄弟姐妹,并得到 彼得, 格雷格 (本人),以及 鲍比.
这是海龟的本体论。
@prefix : <http://www.example.org/brady#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix brady: <http://www.example.org/brady#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
brady:hasSibling a owl:ObjectProperty ;
owl:propertyChainAxiom ( brady:hasFather [ owl:inverseOf
brady:hasFather ] ) .
brady:Carol a owl:NamedIndividual , brady:Woman .
brady:hasBrother a owl:ObjectProperty ;
owl:propertyChainAxiom ( brady:hasSibling brady:r_Man ) .
<http://www.example.org/brady>
a owl:Ontology .
brady:Woman a owl:Class ;
rdfs:subClassOf brady:Person ;
owl:equivalentClass [ a owl:Restriction ;
owl:hasSelf true ;
owl:onProperty brady:r_Woman
] .
brady:hasFather a owl:ObjectProperty .
brady:Person a owl:Class .
brady:Man a owl:Class ;
rdfs:subClassOf brady:Person ;
owl:equivalentClass [ a owl:Restriction ;
owl:hasSelf true ;
owl:onProperty brady:r_Man
] .
brady:r_Woman a owl:ObjectProperty .
brady:r_Man a owl:ObjectProperty .
brady:Marcia a owl:NamedIndividual , brady:Woman ;
brady:hasFather brady:Mike .
brady:Peter a owl:NamedIndividual , brady:Man ;
brady:hasFather brady:Mike .
brady:Jan a owl:NamedIndividual , brady:Woman ;
brady:hasFather brady:Mike .
brady:Cindy a owl:NamedIndividual , brady:Woman ;
brady:hasFather brady:Mike .
brady:Bobby a owl:NamedIndividual , brady:Man ;
brady:hasFather brady:Mike .
brady:Greg a owl:NamedIndividual , brady:Man ;
brady:hasFather brady:Mike .
brady:Mike a owl:NamedIndividual , brady:Man .
假设每个人都是自己的兄弟 姐妹也是兄弟。
:hasBrother owl:propertyChainAxiom (:hasFather [ owl:inverseOf :hasFather ]) .
很难更精确地定义:hasBrother, 排除女性兄弟和自我兄弟关系. 但你可以如下推断丽莎的所有兄弟。
:Female a owl:Class .
:Male a owl:Class;
owl:disjointWith :Female .
:Lisa a :Female .
:Bart a :Male .
:Homer a :Male .
:hasFather a owl:ObjectProperty;
rdfs:range :Male .
:hasBrother a owl:ObjectProperty;
rdfs:range :Male .
:hasSiblingOrSelf owl:propertyChainAxiom ( :hasFather [ :hasFather ] ) .
:LisaBrother owl:equivalentClass [
a owl:Restriction;
owl:onProperty [ owl:inverseOf :hasBrother ];
owl:hasValue :Lisa
], [
a owl:Class;
owl:intersectionOf (
[ a owl:Restriction; owl:onProperty :hasSiblingOrSelf; owl:hasValue :Lisa ]
:Male
)
] .
一种方法是利用SWRL规则.
在protege上。
写规则。
isChildOf(?x,?y)^FatherOf(?y,?z)^differentFrom(?z,?x)->isBrotherOf(?x,?z)
这意味着,如果 "x是y的孩子","y也是z的父母","z和x是不同的",那么 "z和x是兄弟"。