在OWL中创建具有多个限制的推断关系

在OWL中创建具有多个限制的推断关系,owl,graphdb,Owl,Graphdb,我有以下Turtle语法文件(见问题末尾),我希望能够推断出:hasSibling,但只能推断出完整的兄弟姐妹,而不是一半。i、 我只想要那些父母相同的孩子 我已经复习了,它解决了一半的问题。以下SPARQL查询: 前缀: 选择不同的* 在哪里{ 孩子:是兄弟姐妹。 过滤器(?child=:jennySmith) } 返回: :jimJones-同父异母的兄弟姐妹,不要 :joeSmith :jennySmith-自我,不理想,但我可以接受 我尝试使用owl:intersectionOf并

我有以下Turtle语法文件(见问题末尾),我希望能够推断出
:hasSibling
,但只能推断出完整的兄弟姐妹,而不是一半。i、 我只想要那些父母相同的孩子

我已经复习了,它解决了一半的问题。以下SPARQL查询:

前缀:
选择不同的*
在哪里{
孩子:是兄弟姐妹。
过滤器(?child=:jennySmith)
}
返回:

  • :jimJones
    -同父异母的兄弟姐妹,不要
  • :joeSmith
  • :jennySmith
    -自我,不理想,但我可以接受
我尝试使用
owl:intersectionOf
并提供了两个集合,一个在
owl:propertyChainAxiom
中使用
:hasdafter
,另一个使用
:hasMother
但该集合是空的(可能--可能--我的语法有误,或者这两个属性链实际上返回了不同的“东西”)--我还不太了解猫头鹰):

:x1
猫头鹰:限制;
猫头鹰:交叉(
[
猫头鹰:不动产Chainaxiom(
:他父亲
:isParentOf
) ] [
猫头鹰:不动产Chainaxiom(
:他妈妈
:isParentOf
)
]
)
.
另一种可能是猫头鹰不可能做到这一点

我用OWL2-RL在GraphDB中设置了存储库。请忽略现有的本体论来定义族谱,OWL可能不是表示它们的最佳方式。我的目标不是创建族谱,而是学习猫头鹰的限制和推论。这就是我用来说明我的问题的MVCE

@前缀owl:。
@前缀owl2:。
@前缀rdf:。
@前缀rdfs:。
@前缀xml:。
@前缀xsd:。
@前缀:。
猫头鹰:本体论;
.
:人
猫头鹰:类;
rdfs:猫头鹰的子类:事物;
.
:hasGender
猫头鹰:对象属性;
rdfs:域:人;
.
:男
猫头鹰:类;
rdfs:子类:个人;
owl:等价类[
猫头鹰:限制;
猫头鹰:onProperty:hasGender;
猫头鹰:hasValue:雄性;
]
.
:女人
猫头鹰:类;
rdfs:子类:个人;
owl:等价类[
猫头鹰:限制;
猫头鹰:onProperty:hasGender;
猫头鹰:hasValue:雌性;
]
.
:家长
猫头鹰:限制;
rdfs:子类:个人;
owl:onProperty:isParentOf;
猫头鹰:一些价值来自:人;
.
:孩子
猫头鹰:限制;
rdfs:子类:个人;
owl:onProperty:hasParent;
猫头鹰:一些价值来自:人;
.
:父亲
猫头鹰:类;
rdfs:子类:父类;
owl:等价类[
猫头鹰:限制;
owl:intersectionOf(:父:人);
] ;
.
:母亲
猫头鹰:类;
rdfs:子类:父类;
owl:等价类[
猫头鹰:限制;
owl:intersectionOf(:父母:女人);
] ;
owl2:不相交的对象属性:父;
.
:他父亲
猫头鹰:倒数of:isFatherOf;
.
:他妈妈
owl:inverseOf:isMotherOf;
.
:hasParent
猫头鹰:对象属性;
.
:isMotherOf
猫头鹰:对象属性;
领域:女性;
rdfs:range::Child;
rdfs:subpertyof:isParentOf;
.
:isFatherOf
猫头鹰:对象属性;
rdfs:域:人;
rdfs:range::Child;
rdfs:subpertyof:isParentOf;
.
:isParentOf
猫头鹰:对象属性;
rdfs:域:人;
范围:人;
猫头鹰:倒数of:hasParent;
.
:isSiblingOf
猫头鹰:对象属性;
猫头鹰:不动产Chainaxiom(
:hasParent
:isParentOf
)
.
:珍妮史密斯
答:人,;
:性别:女性;
:isMotherOf:jimJones;
:isMotherOf:joeSmith;
:isMotherOf:jennySmith;
.
:约翰史密斯
答:人,;
:性别:男;
:isFatherOf:joeSmith;
:isFatherOf:jennySmith;
.
:汤姆琼斯
答:人,;
:性别:男;
:isFatherOf:jimJones;
.
:jimJones
答:人,;
:性别:男;
.
:joeSmith
答:人,;
:性别:男;
.
:詹尼史密斯
答:人,;
:性别:女性;
:isMotherOf:harrySmith;
.
:哈里斯密斯
答:人,;
:性别:男;
.

您可以使用如下自定义规则定义
:isFullSiblingOf
。阅读有关约束和剪切的信息

id:isFullSiblingOf
xf
x m
y f[Constraint x!=y][Cut]
y m
----------------
xy
我想你已经有了反向推理。最好的方法是选择您需要的公理,然后添加您自己的公理:例如,如果您不需要,您不必包含所有RL公理。请参阅更多建议:

PS2:您还应该将
isFullSiblingOf
声明为
owl:SymmetricProperty
。顺便说一句,我会使用
hasFullSibling
,因为逆名称更难理解

PS3:
owl2:disjointObjectProperties:Father
以上是一个错误,您不能在类上使用它


PS4:
使用没有基的相对URL,这不是很好。

属性链的交集是无法实现的。你所拥有的并不是一个有效的OWL公理。OWL中也没有变量,因此,要表达的内容需要SWRL或其他某种规则语言(如果您选择的三重存储支持的话)。GraphDB确实支持自定义规则,所以只要试着用相应的语法编写规则就可以了。那么,是不是不可能在OWL中表达“当且仅当实例具有相同的两个父实例时,才是兄弟实例”的概念?我不必使用财产链,这正是我能想到的。我是在这样的假设下工作的,即我不能理解它并不意味着它不可能。
id: isFullSiblingOf
  x <:hasFather> f
  x <:hasMother> m
  y <:hasFather> f [Constraint x != y] [Cut]
  y <:hasMother> m
  ----------------
  x <:isSiblingOf> y