Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
911 views
in Technique[技术] by (71.8m points)

xml - Differences between rdf:resource, rdf:about and rdf:ID

What are the conceptual differences between rdf:resource, rdf:about, and rdf:ID. I did some investigation but the difference between them are not clear for me yet. For example, whether rdf:ID is used when declaring a resource for the first time, rdf:resource is used for referencing an already existing resource,?etc.

I would be glad if you provide some little examples.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

To be clear this is only about a particular way of writing rdf: namely RDF/XML. Other syntaxes don't feature these differences.

With that disclaimer out of the way:

What we're trying to do is write statements of the form:

subject predicate object

and in particular:

subjectURI predicate objectURI

So how do we introduce subject and object URIs in RDF/XML?

  1. rdf:about sets the subject URI of a statement, which may be absolute (http://example.com/) or resolved relative to the BASE of the document (e.g. /foo/bar, #frag). (Like href in html)
  2. rdf:resource sets the object URI of a statement, once again either absolute or relative.
  3. rdf:ID sets the subject URI, but it can only be within this document. An ID can also only be used once. Very like <a name="baz"> or id="baz" in html.

rdf:ID is discouraged since

  1. you can replace it with an rdf:about or rdf:resource with a fragment #baz and
  2. it can cause xml issues if you use the same id more than once.

That is, it's redundant and a potential source of errors.

In retrospect there typically only needs to be one attribute to specify a URI, since whether something is a subject or object is apparent from the RDF/XML syntax:

<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) 
...

(rule of thumb: odd lines rdf:about, even lines, rdf:resource)

and using both rdf:about and rdf:resource on an element is almost always an error (you're either in a subject position or object position).

tl;dr

Avoid rdf:ID. Use rdf:about and rdf:resource much like an href, the former for subject, the latter for objects.

Additional

Forgot to mention that rdf:ID can be used on a property element, but it does something you may find unexpected: it reifies the triple. Avoid rdf:ID.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...