rdf:resource
,rdf:about
和rdf:ID
之间存在哪些概念差异。我做了一些调查,但他们之间的区别对我来说还不清楚。例如,在第一次声明资源时是否使用rdf:ID
,rdf:resource
用于引用已存在的资源等。
如果你提供一些小例子,我会很高兴。
答案 0 :(得分:46)
要明确这只是关于编写rdf的一种特殊方式:即RDF / XML。其他语法没有这些差异。
将该免责声明排除在外:
我们要做的是写下以下形式的陈述:
subject predicate object
,特别是:
subjectURI predicate objectURI
那么我们如何在RDF / XML中引入主题和对象URI?
rdf:about
设置语句的主题URI,可以是绝对的(http://example.com/
)或相对于文档的BASE解析(例如/foo/bar
,#frag
) 。 (如html中的href
)rdf:resource
设置语句的对象URI,再次设置为绝对或相对。rdf:ID
设置主题URI,但它只能在此文档中。 ID也只能使用一次。与html中的<a name="baz">
或id="baz"
非常相似。 rdf:ID
因为
rdf:about
或rdf:resource
替换片段#baz
和也就是说,它是多余的,也是潜在的错误来源。
回想起来,通常只需要一个属性来指定URI,因为从RDF / XML语法中可以看出某些东西是主题还是对象:
<ex:Foo ...> - subject
<ex:prop ... /> - property then object
</ex:Foo>
<ex:Foo ...> - subject
<ex:prop> - property
<ex:Bar ... /> - subject (and implictly an object chaining from previous)
...
(经验法则:奇数行rdf:about
,偶数行,rdf:resource
)
并且在元素上同时使用rdf:about
和rdf:resource
几乎总是错误(您处于主题位置或对象位置)。
避免使用rdf:ID
。使用rdf:about
和rdf:resource
非常像href,前者用于主题,后者用于对象。
忘记提及rdf:ID
可以在属性元素上使用,但它可能会发现一些意外的事情:它会使三元组具体化。避免使用rdf:ID
。
答案 1 :(得分:0)
我想澄清一下提供的答案中的一些优点,但仅限于rdf:ID和rdf:about。
标签用于构建URI。如果未提供完整URI(例如rdf:ID =“x”),则生成的URI相对于通常从文档的位置派生的范围内基URI,但可以使用xml:base属性指定。
关键点(如上所述)是rdf:about可能是一个完全限定的URI,所以很容易设置它。
rdf:ID不能是完全限定的URI,但是,如果手动设置xml:base属性,仍然可以控制它。
因此,对我来说,一般的经验法则是使用rdf:about作为“全局已知”标识符(当您希望URI始终相同时)并在描述本地资源时使用rdf:ID URI不在当前文档之外。