rdf:resource、rdf:about和rdf:ID之间的区别

34
rdf:resourcerdf:aboutrdf:ID之间的概念区别是什么?我进行了一些调查,但它们之间的差异对我来说还不太清晰。例如,在第一次声明资源时是否要使用rdf:ID,在引用已经存在的资源时是否要使用rdf:resource等。 如果您能提供一些小例子,我将不胜感激。
2个回答

64

明确一点,这只是关于一种写RDF的方式,即RDF/XML。其他语法不会有这些差异。

有了这个声明:

我们试图编写以下形式的语句:

subject predicate object

特别地,包括:

subjectURI predicate objectURI

如何在RDF/XML中引入主体和对象URI?

  1. rdf:about设置语句的主体URI,可以是绝对的(http://example.com/)或相对于文档的基础URI解析后的值(例如: /foo/bar#frag)。 (类似于html中的href
  2. rdf:resource设置语句的对象URI,同样可以是绝对的或相对的。
  3. rdf:ID设置语句的主体URI,但它只能在此文档中使用。 ID也只能使用一次。与html中的<a name="baz">id =" baz "非常相似。

rdf:ID不建议使用,因为:

  1. 您可以将其替换为带有片段#bazrdf:aboutrdf:resource
  2. 如果多次使用相同的ID,它会导致XML问题。

即它是多余的且可能导致错误的一个潜在来源。

回顾来看,通常只需要一个属性来指定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:aboutrdf:resource几乎总是一个错误(你要么处于主语位置,要么处于对象位置)。

太长不看

避免使用rdf:ID。像使用href一样使用rdf:aboutrdf:resource,前者用于主语,后者用于对象。

附加信息

忘了提到rdf:ID可以用于属性元素,但它会做一些你可能意想不到的事情:重新定义三元组。避免使用rdf:ID


1
刚刚编辑了一下,修正了一些错误,并稍微修改了一下。RDF/XML 有点棘手,如果你对 RDF 还不是很熟悉的话,最好避免使用它。可以使用像 n-triples 或 turtle 这样的语法,这样映射到 RDF 模型会更简单。你总是可以使用像 rapper 这样的工具将其转换为 RDF/XML。 - user205512

4
我想澄清提供的答案中一些优秀观点,但只涉及rdf:ID和rdf:about。
这些标签用于构建URI。如果没有提供完整的URI(例如rdf:ID="x"),则生成的URI相对于范围内基本URI,通常派生自文档位置,但可以使用xml:base属性指定。
如上所述,重点是rdf:about可能是完全限定的URI,因此很容易设置它。
rdf:ID不能成为完全限定的URI,但是,如果手动设置xml:base属性,则仍然可以控制它。
因此,对我来说,一般的经验法则是,在描述URI在当前文档之外不太关注的本地资源时,使用rdf:ID;对于“全局已知”标识符(当您希望URI始终相同)使用rdf:about。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接