考虑以下示例,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
的值是两个类描述的列表,即两个枚举,两者都描述具有两个个体的类。生成的交集是一个具有一个个体的类,即Tosca
,因为这是两个枚举共有的唯一个体。
如果我们遗漏了第一个rdf:parseType="Collection"
会怎么样?
如果相交的类不是集合,我们还需要使用第一个rdf:parseType="Collection"
吗?
答案 0 :(得分:6)
owl:intersectionOf的值应该是RDF列表。 RDF列表是链表,其中节点的元素由rdf:first表示,列表的尾部由rdf:rest表示,空列表由rdf:nil表示。你可以想象,这很快变得非常冗长。使用parseType Collection attribute可以缩短序列化时间。它不是三元组,它只是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#">
<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:第一和rdf:休息三元组。如果您不在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>
因此,我们使用了很好的缩写,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 .
如果我们遗漏了第一个
rdf:parseType="Collection"
会怎么样?
从解析类型集合的文档:
RDF / XML允许属性元素上的rdf:parseType =“Collection”属性允许它包含多个节点元素。
这表明如果没有解析类型集合属性,则属性元素不应包含多个元素。您想要阅读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>
现在,有一个简写,允许您在节点元素中使用多个属性元素。这在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>
但是,没有这样的简写允许您在单个属性元素中添加多个对象。也就是说,你不能缩写三元组
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>
如果您有一个集合,然后从中删除了解析类型集合属性,那么这就是您最终会得到的结果。我认为这将是一个很好的功能,但也许标准的其他部分会与之冲突。无论如何,这就是你尝试时收到警告的原因;这不合法。
如果相交的类不是集合,我们还需要使用第一个rdf:parseType =“Collection”吗?
如上所述,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工具。