web-dev-qa-db-ja.com

rdf:resource、rdf:about、rdf:IDの違い

rdf:resourcerdf:about、およびrdf:IDの概念的な違いは何ですか。私はいくつかの調査をしましたが、それらの違いはまだはっきりしていません。たとえば、リソースを初めて宣言するときにrdf:IDを使用するかどうか、既存のリソースを参照するためにrdf:resourceを使用するなどです。

ちょっとした例を教えていただければ幸いです。

28
suat

明確にするために、これはrdfを書く特定の方法、つまりRDF/XMLについてのみです。他の構文には、これらの違いはありません。

その免責事項を邪魔しないで:

私たちがやろうとしているのは、次の形式のステートメントを書くことです。

subject predicate object

特に:

subjectURI predicate objectURI

では、RDF/XMLでサブジェクトとオブジェクトのURIをどのように導入するのでしょうか。

  1. rdf:aboutは、ステートメントのサブジェクトURIを設定します。これは、絶対(http://example.com/)であるか、ドキュメントのBASEに関連して解決されます(例:/foo/bar#frag)。 (htmlのhrefのように)
  2. rdf:resourceは、ステートメントのオブジェクトURIを、ここでも絶対または相対のいずれかに設定します。
  3. rdf:IDはサブジェクトURIを設定しますが、このドキュメント内にのみ含めることができます。 IDも1回しか使用できません。 htmlの<a name="baz">またはid="baz"と非常によく似ています。

rdf:IDは、

  1. rdf:aboutまたはrdf:resourceをフラグメント#bazで置き換えることができます。
  2. 同じIDを複数回使用すると、xmlの問題が発生する可能性があります。

つまり、冗長であり、エラーの原因となる可能性があります。

振り返ってみると、何かがサブジェクトであるかオブジェクトであるかはRDF/XML構文から明らかであるため、通常、URIを指定するために必要な属性は1つだけです。

<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の両方を使用すると、ほとんどの場合エラーになります(サブジェクト位置またはオブジェクト位置にいます)。

tl; dr

rdf:IDは避けてください。 rdf:aboutrdf:resourceをhrefのように使用します。前者は主語に、後者はオブジェクトに使用します。

追加

rdf:IDはプロパティ要素で使用できることを忘れましたが、予期しないことを実行します。トリプルを具体化します。 rdf:IDは避けてください。

49
user205512

提供された回答の優れた点のいくつかを明らかにしたいと思いますが、rdf:IDとrdf:aboutに関してのみです。

タグはURIを構築するために使用されます。完全なURIが提供されていない場合(rdf:ID = "x"など)、生成されたURIは、通常はドキュメントの場所から派生したスコープ内のベースURIに相対的ですが、xml:base属性で指定できます。 。

(上記の)ポイントは、rdf:aboutは完全修飾URIである可能性があるため、設定するだけで簡単です。

rdf:IDを完全修飾URIにすることはできませんが、xml:base属性を手動で設定すれば、それを制御できます。

したがって、私にとっての一般的な経験則は、「グローバルに知られている」識別子にrdf:aboutを使用し(URIを常に同じにしたい場合)、URIがないローカルリソースを記述するときにrdf:IDを使用することです。現在のドキュメントの外側を気にしました。

0
Andrew