为什么需要一个空白节点来定义OWL中的等效类?以下两个不相等吗?
:Wine owl:equivalentClass [
a owl:Class ;
owl:unionOf (:RedWine :RoséWine :WhiteWine) ] .
和
:Wine a owl:Class .
:Wine owl:unionOf (:RedWine :RoséWine :WhiteWine) .
答案 0 :(得分:1)
这与Why use owl:Restriction as own:EquivalenceClass's property?不完全相同,但答案大致相同:从RDF到OWL的映射定义为这样的缩写不会产生你想要的本体您将RDF映射到OWL。不管你是否最终有歧义,我都不确定。但是,您不会最终得到您想要的本体。从RDF到OWL的相关翻译说,当你有:
_:x rdf:type owl:Class .
_:x owl:unionOf T(SEQ y1 ... yn) .
{ n ≥ 2 and CE(yi) ≠ ε for each 1 ≤ i ≤ n }
你得到一个类表达式, ObjectUnionOf(CE(y1)... CE(yn))。根据{{3}},首先解析表达式,然后解析公理。重要的是,“每次匹配一个模式时,都会从G中删除匹配的三元组。”这意味着我们将表达式解析为RDF:
:Wine rdf:type owl:Class .
:Wine owl:unionOf (:RedWine :RoséWine :WhiteWine) .
我们得到类表达式,RedWine∪RoseWine∪WhiteWine,我们从图表中删除三元组。稍后,在3.2.4 Parsing of Expressions中,我们开始寻找?x rdf:type owl:Class 的实例,以获得声明公理声明(Class(?x) ))即可。但是,当我们解析unionOf表达式时,我们删除了:Wine rdf:type owl:Class 。现在我们没有将Wine作为本体中的一类。
现在,缩写不起作用的原因是因为翻译不支持它。翻译在遇到它们时会从图形中删除三元组,并且它会首先删除表达式,这样就会为声明公理留下必要的三元组。但是,我们可以想象一个没有删除它们的翻译公理;它可能只是解析表达式,然后解析公理。我认为你所描述的缩写就是那个
:A owl:equivalentClass :B .
:B ?p ?o .
可以替换为:
:A ?p ?o .
只要对所有?p?o 完成:B有。这可能不是 unionOf 表达式的问题,因为每个 unionOf 表达式都需要一个?p?o (其中?p < / strong>是 owl:unionOf 和?o 是RDF列表)。但是,对于任何需要多个三元组的类表达式,如果存在多个相同类型的等效类表达式,则可能会变得模糊不清。例如,如果你有三元组
_:x rdf:type owl:Restriction .
_:x owl:onProperty y .
_:x owl:someValuesFrom z .
指定 someValuesFrom 限制,然后只要你有两个限制,你就无法知道 owl:onProperty 与哪个强>猫头鹰:someValuesFrom类似即可。这是3.2.5 Parsing of Axioms中出现的问题如果 owl:unionOf 的编码方式略有不同,则会出现同样的问题。例如,如果A∪B由以下编码:
_:x rdf:type owl:Class .
_:x owl:unionMember :A .
_:x owl:unionMember :B .
如果你试图对公理进行编码,那么你会遇到歧义:
A≡B∪C
A≡D∪E
你会得到编码:
:A rdf:type owl:Class .
:A owl:unionMember :B .
:A owl:unionMember :C .
:A owl:unionMember :D .
:A owl:unionMember :E .
你可以回读为:
A≡B∪C∪D∪E
在逻辑上不等同。