为什么我们需要使用 rdf:parseType="Collection" 和 owl:intersectionOf?
Why do we need to use rdf:parseType="Collection" with owl:intersectionOf?
考虑以下摘自 http://www.w3.org/TR/owl-ref/#intersectionOf-def.
的示例
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<owl:Thing rdf:about="#Tosca" />
<owl:Thing rdf:about="#Salome" />
</owl:oneOf>
</owl:Class>
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<owl:Thing rdf:about="#Turandot" />
<owl:Thing rdf:about="#Tosca" />
</owl:oneOf>
</owl:Class>
</owl:intersectionOf>
</owl:Class>
虽然我们了解第二个和第三个 rdf:parseType="Collection"
的用法,但我对 owl:intersectionOf
之后的第一个用法有些困惑。
在这个例子中owl:intersectionOf
的值是两个class描述的列表,即两个枚举,都描述了一个class有两个人。由此产生的交集是 class 与一个个体,即 Tosca
,因为这是两个枚举中唯一共有的个体。
如果我们省略第一个 rdf:parseType="Collection"
会发生什么?
如果相交的 class 是 不是 集合,我们还需要使用第一个 rdf:parseType="Collection"
吗?
owl:intersectionOf 的值应该是一个 RDF 列表。 RDF列表是链表,节点元素用rdf:first表示,链表尾部用rdf:rest表示,空链表用rdf:nil表示。可以想象,这很快就会变得非常冗长。使用 parseType Collection attribute 可以缩短序列化时间。它不是三元组,它只是 RDF/XML 序列化中的 shorthand。
这是您的代码段的完整版本:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<owl:Thing rdf:about="urn:ex#Tosca"/>
<owl:Thing rdf:about="urn:ex#Salome"/>
</owl:oneOf>
</owl:Class>
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<owl:Thing rdf:about="urn:ex#Turandot"/>
<owl:Thing rdf:about="urn:ex#Tosca"/>
</owl:oneOf>
</owl:Class>
</owl:intersectionOf>
</owl:Class>
</rdf:RDF>
如果在 N-Triples 中序列化,您可以看到所有实际的三元组:
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffd <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffe .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffd <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff9 .
<urn:ex#Tosca> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Thing> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff8 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <urn:ex#Turandot> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff8 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff7 .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffb <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <urn:ex#Salome> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffb <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffe <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Class> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffe <http://www.w3.org/2002/07/owl#oneOf> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffc .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffc <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <urn:ex#Tosca> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffc <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffb .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff9 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffa .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff9 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
<urn:ex#Turandot> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Thing> .
<urn:ex#Salome> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Thing> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff7 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <urn:ex#Tosca> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff7 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffa <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Class> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffa <http://www.w3.org/2002/07/owl#oneOf> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff8 .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7fff <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Class> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7fff <http://www.w3.org/2002/07/owl#intersectionOf> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffd .
这是很多 rdf:first 和 rdf:rest 三元组。如果您不在 RDF/XML:
中使用该缩写,您会得到相同的结果
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#" >
<rdf:Description rdf:nodeID="A0">
<rdf:first rdf:resource="urn:ex#Tosca"/>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A1">
<rdf:first rdf:resource="urn:ex#Turandot"/>
<rdf:rest rdf:nodeID="A0"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A2">
<rdf:first rdf:nodeID="A3"/>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
<rdf:Description rdf:about="urn:ex#Salome">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
</rdf:Description>
<rdf:Description rdf:about="urn:ex#Tosca">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
</rdf:Description>
<rdf:Description rdf:about="urn:ex#Turandot">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A3">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
<owl:oneOf rdf:nodeID="A1"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A4">
<rdf:first rdf:resource="urn:ex#Salome"/>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A5">
<rdf:first rdf:resource="urn:ex#Tosca"/>
<rdf:rest rdf:nodeID="A4"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A6">
<rdf:first rdf:nodeID="A7"/>
<rdf:rest rdf:nodeID="A2"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A7">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
<owl:oneOf rdf:nodeID="A5"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A8">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
<owl:intersectionOf rdf:nodeID="A6"/>
</rdf:Description>
</rdf:RDF>
因此,我们使用很好的 shorthands,RDF/XML 的 parseType 集合,或 Turtle 的括号:
@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#> .
<urn:ex#Tosca> a owl:Thing .
_:b0 a owl:Class ;
owl:oneOf ( <urn:ex#Tosca> <urn:ex#Salome> ) .
[ a owl:Class ;
owl:intersectionOf ( _:b0 _:b1 )
] .
_:b1 a owl:Class ;
owl:oneOf ( <urn:ex#Turandot> <urn:ex#Tosca> ) .
<urn:ex#Turandot> a owl:Thing .
<urn:ex#Salome> a owl:Thing .
如果没有属性会怎样
What would have happened if we left out the first rdf:parseType="Collection"
?
来自关于解析类型集合的文档:
RDF/XML allows an rdf:parseType="Collection" attribute on a property element to let it contain multiple node elements.
这表明如果没有解析类型集合属性,则 属性 元素不应包含多个元素。您需要阅读 2.2 Node Elements and Property Elements 以了解典型的语法是什么。一般来说,这个想法是代表三元组
x:s x:p1 x:q1 .
x:s x:p2 x:q2 .
你最终 XML 喜欢:
<rdf:Description rdf:about="...s"> <!-- a node element -->
<x:p1> <!-- a property element -->
<rdf:Description rdf:about="...q1"/> <!-- a node element -->
</x:p1>
</rdf:Description>
<rdf:Description rdf:about="...s"> <!-- a node element -->
<x:p2> <!-- a property element -->
<rdf:Description rdf:about="...q2"/> <!-- a node element -->
</x:p2>
</rdf:Description>
现在,有一个 shorthand 允许您在一个节点元素中使用多个 属性 元素。 2.3 Multiple Property Elements 中对此进行了描述,您可以改为执行此操作:
<rdf:Description rdf:about="...s"> <!-- a node element -->
<x:p1> <!-- a property element -->
<rdf:Description rdf:about="...q1"/> <!-- a node element -->
</x:p1>
<x:p2> <!-- a property element -->
<rdf:Description rdf:about="...q2"/> <!-- a node element -->
</x:p2>
</rdf:Description>
但是,没有这样的 shorthand 可以让您在单个 属性 元素中添加多个对象。也就是说,您不能 缩写三元组
x:s x:p1 x:q1 .
x:s x:p1 x:q2 .
来自
<rdf:Description rdf:about="...s"> <!-- a node element -->
<x:p1> <!-- a property element -->
<rdf:Description rdf:about="...q1"/> <!-- a node element -->
<rdf:Description rdf:about="...q2"/> <!-- a node element -->
</x:p1>
</rdf:Description>
如果您有一个集合然后从中删除解析类型集合属性,那么您最终会得到这样的结果。我想这会是一个不错的功能,但也许它会与标准的其他部分发生冲突。无论如何,这就是为什么您在尝试时会收到警告;这是不合法的。
如果 类 不是交叉点
Do we still need to use the first rdf:parseType="Collection", if the intersecting classes are not collections?
如上所述,RDF/XML 是 RDF 的序列化,RDF 是一种抽象数据模型(它只是三元组)。 RDF/XML 增加了许多您不必担心的复杂性。事实上,您正在使用 OWL 文件使事情变得更加复杂,因为 OWL 是另一种抽象表示(它只是公理)。有一个从 OWL 到 RDF 的映射,有点复杂。因此,您正在查看具有两层编码的内容:
OWL(公理)⇒ RDF(三元组) ⇒ RDF/XML
OWL对解析类型收集和RDF/XML序列化一无所知,它只知道OWL。有一个知道 OWL 和 RDF 的映射,这就是生成 RDF 三元组的原因。 RDF 对解析类型集合一无所知。有一个从 RDF 到 XML 的映射知道它。您的 RDF 需要是合法的 RDF,句号。
如果您使用 OWL,请使用 OWL 工具。
如果您正在使用 RDF,请使用 RDF 工具。
如果您使用 XML,请使用 XML 工具。
考虑以下摘自 http://www.w3.org/TR/owl-ref/#intersectionOf-def.
的示例<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<owl:Thing rdf:about="#Tosca" />
<owl:Thing rdf:about="#Salome" />
</owl:oneOf>
</owl:Class>
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<owl:Thing rdf:about="#Turandot" />
<owl:Thing rdf:about="#Tosca" />
</owl:oneOf>
</owl:Class>
</owl:intersectionOf>
</owl:Class>
虽然我们了解第二个和第三个 rdf:parseType="Collection"
的用法,但我对 owl:intersectionOf
之后的第一个用法有些困惑。
在这个例子中owl:intersectionOf
的值是两个class描述的列表,即两个枚举,都描述了一个class有两个人。由此产生的交集是 class 与一个个体,即 Tosca
,因为这是两个枚举中唯一共有的个体。
如果我们省略第一个 rdf:parseType="Collection"
会发生什么?
如果相交的 class 是 不是 集合,我们还需要使用第一个 rdf:parseType="Collection"
吗?
owl:intersectionOf 的值应该是一个 RDF 列表。 RDF列表是链表,节点元素用rdf:first表示,链表尾部用rdf:rest表示,空链表用rdf:nil表示。可以想象,这很快就会变得非常冗长。使用 parseType Collection attribute 可以缩短序列化时间。它不是三元组,它只是 RDF/XML 序列化中的 shorthand。
这是您的代码段的完整版本:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<owl:Thing rdf:about="urn:ex#Tosca"/>
<owl:Thing rdf:about="urn:ex#Salome"/>
</owl:oneOf>
</owl:Class>
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<owl:Thing rdf:about="urn:ex#Turandot"/>
<owl:Thing rdf:about="urn:ex#Tosca"/>
</owl:oneOf>
</owl:Class>
</owl:intersectionOf>
</owl:Class>
</rdf:RDF>
如果在 N-Triples 中序列化,您可以看到所有实际的三元组:
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffd <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffe .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffd <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff9 .
<urn:ex#Tosca> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Thing> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff8 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <urn:ex#Turandot> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff8 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff7 .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffb <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <urn:ex#Salome> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffb <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffe <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Class> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffe <http://www.w3.org/2002/07/owl#oneOf> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffc .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffc <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <urn:ex#Tosca> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffc <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffb .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff9 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffa .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff9 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
<urn:ex#Turandot> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Thing> .
<urn:ex#Salome> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Thing> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff7 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <urn:ex#Tosca> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff7 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffa <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Class> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffa <http://www.w3.org/2002/07/owl#oneOf> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ff8 .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7fff <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Class> .
_:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7fff <http://www.w3.org/2002/07/owl#intersectionOf> _:BX2D2b2d7d1aX3A1526aea91dcX3AX2D7ffd .
这是很多 rdf:first 和 rdf:rest 三元组。如果您不在 RDF/XML:
中使用该缩写,您会得到相同的结果<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#" >
<rdf:Description rdf:nodeID="A0">
<rdf:first rdf:resource="urn:ex#Tosca"/>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A1">
<rdf:first rdf:resource="urn:ex#Turandot"/>
<rdf:rest rdf:nodeID="A0"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A2">
<rdf:first rdf:nodeID="A3"/>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
<rdf:Description rdf:about="urn:ex#Salome">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
</rdf:Description>
<rdf:Description rdf:about="urn:ex#Tosca">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
</rdf:Description>
<rdf:Description rdf:about="urn:ex#Turandot">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A3">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
<owl:oneOf rdf:nodeID="A1"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A4">
<rdf:first rdf:resource="urn:ex#Salome"/>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A5">
<rdf:first rdf:resource="urn:ex#Tosca"/>
<rdf:rest rdf:nodeID="A4"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A6">
<rdf:first rdf:nodeID="A7"/>
<rdf:rest rdf:nodeID="A2"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A7">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
<owl:oneOf rdf:nodeID="A5"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A8">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
<owl:intersectionOf rdf:nodeID="A6"/>
</rdf:Description>
</rdf:RDF>
因此,我们使用很好的 shorthands,RDF/XML 的 parseType 集合,或 Turtle 的括号:
@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#> .
<urn:ex#Tosca> a owl:Thing .
_:b0 a owl:Class ;
owl:oneOf ( <urn:ex#Tosca> <urn:ex#Salome> ) .
[ a owl:Class ;
owl:intersectionOf ( _:b0 _:b1 )
] .
_:b1 a owl:Class ;
owl:oneOf ( <urn:ex#Turandot> <urn:ex#Tosca> ) .
<urn:ex#Turandot> a owl:Thing .
<urn:ex#Salome> a owl:Thing .
如果没有属性会怎样
What would have happened if we left out the first
rdf:parseType="Collection"
?
来自关于解析类型集合的文档:
RDF/XML allows an rdf:parseType="Collection" attribute on a property element to let it contain multiple node elements.
这表明如果没有解析类型集合属性,则 属性 元素不应包含多个元素。您需要阅读 2.2 Node Elements and Property Elements 以了解典型的语法是什么。一般来说,这个想法是代表三元组
x:s x:p1 x:q1 .
x:s x:p2 x:q2 .
你最终 XML 喜欢:
<rdf:Description rdf:about="...s"> <!-- a node element -->
<x:p1> <!-- a property element -->
<rdf:Description rdf:about="...q1"/> <!-- a node element -->
</x:p1>
</rdf:Description>
<rdf:Description rdf:about="...s"> <!-- a node element -->
<x:p2> <!-- a property element -->
<rdf:Description rdf:about="...q2"/> <!-- a node element -->
</x:p2>
</rdf:Description>
现在,有一个 shorthand 允许您在一个节点元素中使用多个 属性 元素。 2.3 Multiple Property Elements 中对此进行了描述,您可以改为执行此操作:
<rdf:Description rdf:about="...s"> <!-- a node element -->
<x:p1> <!-- a property element -->
<rdf:Description rdf:about="...q1"/> <!-- a node element -->
</x:p1>
<x:p2> <!-- a property element -->
<rdf:Description rdf:about="...q2"/> <!-- a node element -->
</x:p2>
</rdf:Description>
但是,没有这样的 shorthand 可以让您在单个 属性 元素中添加多个对象。也就是说,您不能 缩写三元组
x:s x:p1 x:q1 .
x:s x:p1 x:q2 .
来自
<rdf:Description rdf:about="...s"> <!-- a node element -->
<x:p1> <!-- a property element -->
<rdf:Description rdf:about="...q1"/> <!-- a node element -->
<rdf:Description rdf:about="...q2"/> <!-- a node element -->
</x:p1>
</rdf:Description>
如果您有一个集合然后从中删除解析类型集合属性,那么您最终会得到这样的结果。我想这会是一个不错的功能,但也许它会与标准的其他部分发生冲突。无论如何,这就是为什么您在尝试时会收到警告;这是不合法的。
如果 类 不是交叉点
Do we still need to use the first rdf:parseType="Collection", if the intersecting classes are not collections?
如上所述,RDF/XML 是 RDF 的序列化,RDF 是一种抽象数据模型(它只是三元组)。 RDF/XML 增加了许多您不必担心的复杂性。事实上,您正在使用 OWL 文件使事情变得更加复杂,因为 OWL 是另一种抽象表示(它只是公理)。有一个从 OWL 到 RDF 的映射,有点复杂。因此,您正在查看具有两层编码的内容:
OWL(公理)⇒ RDF(三元组) ⇒ RDF/XML
OWL对解析类型收集和RDF/XML序列化一无所知,它只知道OWL。有一个知道 OWL 和 RDF 的映射,这就是生成 RDF 三元组的原因。 RDF 对解析类型集合一无所知。有一个从 RDF 到 XML 的映射知道它。您的 RDF 需要是合法的 RDF,句号。
如果您使用 OWL,请使用 OWL 工具。
如果您正在使用 RDF,请使用 RDF 工具。
如果您使用 XML,请使用 XML 工具。