要約

現在のウェブは、主にHTMLで作成された膨大な数のドキュメントで構成されています。これらのドキュメントにはかなりの量の構造化データが含まれていますが、その大部分はツールやアプリケーションで利用することができません。公開者がこのデータをより完全に表現でき、ツールがそれを読むことができれば、ユーザ機能の新しい世界が利用可能となり、ユーザがアプリケーションとウェブサイトの間で構造化データを転送できるようになり、閲覧アプリケーションによりユーザ経験を向上させることができます。例えば、ウェブ・ページ上のイベントをユーザのデスクトップ・カレンダーに直接インポートできます。また、ドキュメント上のライセンス情報を検出できるようになり、権利が自動的にユーザに通知されます。写真の作成者、カメラの設定情報、解像度、場所、トピックを元の写真と同様に簡単に公開でき、構造化された検索や共有が可能となります。

RDFaコアは、マークアップ言語で構造化データを表現するための属性の仕様です。マークアップ言語(HTMLなど)で既に利用可能な組み込みデータをRDFaマークアップで再利用できることが多く、公開者がドキュメントのコンテンツで重要なデータを繰り返す必要はありません。基礎となる抽象表現はRDF [RDF11-PRIMER]で、公開者は独自の語彙を構築したり、他の語彙を拡張したり、時間の経過に合わせて最大限の相互運用性を有する語彙を展開することができます。表現される構造はデータと密接に関連しているため、表示されたデータを関連する構造とともにコピーして貼り付けることができます。

データ解釈の規則は汎用的なものであるため、形式によって異なる規則は必要ありません。これにより、データの著者と公開者は、ソフトウェアを更新したり、中央機関に形式を登録したり、2つの形式の相互干渉を心配したりする必要なく、独自の形式を定義できます。

RDFaは、マイクロフォーマット[MICROFORMATS]と同じ目標をいくつか共有しています。マイクロフォーマットでは、構造化されたデータをHTMLドキュメントに組み込むための構文と、マイクロフォーマットごとの特定の用語の語彙の両方を指定するのに対し、RDFaは構文のみを指定し、他の用語(語彙やタクソノミーと呼ぶことが多い)の独自の仕様に依存します。RDFaでは、複数の独自に開発された語彙を自由に混在させることができ、使用されている特定の語彙を知らなくてもその言語を解析できるように設計されています。

このドキュメントは、RDFaの詳細な構文仕様であり、次の人を対象としています。

RDFaの使用方法に関する概論や実例について知りたい人は、[RDFA-PRIMER]を参照してください。

この文書の読み方

まず、RDFaRDFに精通しておらず、ドキュメントにRDFaを追加したいだけの場合、RDFa入門[RDFA-PRIMER]が入門としてよりふさわしいでしょう。

既にRDFaに精通していて、 — おそらくRDFaプロセッサを作成するために — 処理規則について詳しく検討したい場合は、処理モデルの項に最も興味を持つでしょう。そこには、各処理ステップの概要の後に、規則ごとにより詳細な項が含まれています。

RDFaには精通していないけれども、RDFに精通している場合は、処理モデルを読む前に構文の概要を読むと、RDFaを用いたさまざまなマークアップの例が示されているため、有益でしょう。最初にいくつかの例を見ると、処理規則を読みやすくなるでしょう。

RDFに精通していない場合は、RDF用語であれこれと試してみる前に、RDF用語の項を見てみるのが良いかもしれません。RDFaは、著者にとって容易なように作られています — 利用にあたって著者がRDFを理解している必要はありません — が、 RDFaを利用するアプリケーションの作成者は、RDFを理解する必要があります。ウェブ上にはRDFに関する多くの資料があり、RDFaをサポートするツールが増えています。このドキュメントは、RDFaの目標をより明確にするために十分なRDFに関する背景のみを含んでいます。

RDFaは、HTMLなどの既存のマークアップ言語でシンプルな属性を用いてRDF型の関係を表現する方法です。RDFは完全に国際化されており、IRI(Internationalized Resource Identifier)の使用が認められています。「IRI」という用語がこの仕様全体で用いられているのを目にするでしょう。IRIという用語に慣れていなくても、おそらく「URI」や「URL」という用語は目にしたことがあるでしょう。IRIは、プレーンなASCII以外の文字の使用が許されているURIの拡張です。RDFではこれらの文字を使用でき、RDFaでも使用できます。この仕様では、これが当てはまることを明確にするために、正しい用語であるIRIを使用するように留意しています。

この仕様ではIRIのみを参照していますが、ホスト言語によってその属性の構文がIRIのサブセットに限定される可能性があります(例えば、HTML5の@href)。ホスト言語の検証上の制約に関わらず、RDFaプロセッサは、IRIを処理できます。

このドキュメントのステータス

この項は、このドキュメントの公開時のステータスについて記述しています。他のドキュメントがこのドキュメントに取って代わることがありえます。現行のW3Cの刊行物およびこの技術報告の最新の改訂版のリストは、http://www.w3.org/TR/のW3C技術報告インデックスにあります。

これは、2013年8月22日に公開された勧告の編集改訂版です。そのドキュメントは、RDFa構文1.0[RDFA-SYNTAX]の改訂版でした。このバージョンとバージョン1.0との間には、次を含む多くの実質的な違いがあります。

  1. XHTMLに対する特定の規則の削除 - これらは現在、XHTML+RDFa[XHTML-RDFA]で定義されている。
  2. 用語、CURIE、または絶対IRIを含むことができるように、一部のRDFa属性のデータ型の拡張。
  3. ホスト言語で、デフォルトの用語、デフォルトの接頭辞マッピング、およびデフォルトの語彙のコレクションを定義することが認められた。
  4. 未定義の用語に用いるデフォルトの語彙を定義する機能。
  5. 用語は、大文字・小文字を区別しないで比較する必要がある。
  6. 多くの場合に@rel属性を置き換えることができる@property属性のよりリッチな挙動。
  7. @typeofの扱いが少し異なり、実用的な利用に適している。

より完全な変更点のリストが変更にあります。

テスト・ハーネスのサンプルが利用できます。この一連のテストは網羅的なものではありません。ユーザは、このテストがRDFaの有用な使用例であると考えるかもしれません。

このドキュメントは、RDFaワーキンググループによって勧告として公開されました。このドキュメントに関してコメントを行いたい場合には、public-rdfa@w3.org(購読アーカイブ)にお送りください。どのようなコメントでも歓迎します。

ワーキンググループの実装報告書を参照してください。

このドキュメントは、W3Cメンバー、ソフトウェア開発者、他のW3Cグループ、および他の利害関係者によりレビューされ、W3C勧告として管理者の協賛を得ました。これは確定済みドキュメントであり、参考資料として用いたり、別のドキュメントで引用することができます。勧告の作成におけるW3Cの役割は、仕様に注意を引き付け、広範囲な開発を促進することです。これによってウェブの機能性および相互運用性が増強されます。

このドキュメントは、2004年2月5日のW3C特許方針の下で活動しているグループによって作成されました。W3Cは、このグループの成果物に関連するあらゆる特許の開示の公開リストを維持し、このページには特許の開示に関する指示も含まれています。不可欠な請求権(Essential Claim(s))を含んでいると思われる特許に関して実際に知っている人は、W3C特許方針の6項に従って情報を開示しなければなりません。

このドキュメントは、2005年10月14日のW3Cプロセス・ドキュメントによって管理されています。

目次

1. 動機

この項は非規範的です。

RDF/XML[RDF-SYNTAX-GRAMMAR]は、RDFのすべての抽象概念を表現するのに十分な柔軟性を提供します。しかし、それは多くの課題を提示します。まず、XMLスキーマまたはDTDを用いたRDF/XMLが含まれるドキュメントを検証することは困難または不可能なため、RDF/XMLを他のマークアップ言語にインポートすることは困難です。RELAX NG[RELAXNG-SCHEMA]のような新しいスキーマ言語では、任意のRDF/XMLを含んでいるドキュメントを検証する方法が提供されていますが、幅広いサポートを得るにはしばらく時間がかかります。

第二に、たとえRDF/XMLをXHTMLのようなXML方言に直接追加できたとしても、表示されるデータとRDF/XML構造化データとの間に重大なデータの重複が存在するでしょう。ドキュメントの既存のデータを繰り返さずにドキュメントにRDFを追加する方がはるかに良いでしょう。例えば、テキスト内に著者の名前を明示的に表示しているXHTMLドキュメント — おそらく、ニュース・サイトの署名記事として — は、同じ概念のRDF表現でこの名前を繰り返す必要はありません。RDFとして解釈できる形で既存のマークアップを補完することが可能であるべきです。

表示データを構造化データと一緒に配置するもう一つの理由は、ウェブ・データの構造を「コンテキスト内」で表現することが非常に有益であることです。ユーザは、アプリケーションから別のアプリケーションに、時には非ウェブ・ベースのアプリケーションに、または非ウェブ・ベースのアプリケーションから、構造化データを転送したいことが多いため、ユーザ体験を向上させることができます。例えば、関心のある項目を「右クリック」することにより特定の表示データに関する情報をユーザに示すことができます。さらに、大量のコンテンツを生成している組織(例えば、報道機関)では、セマンティックなデータを別途維持するよりもインラインで組み込む方が簡単だと考えるでしょう。

過去には、特定の概念を表すために、マークアップ言語に直接多くの属性を「組み込んで」いました。例えば、XHTML 1.1[XHTML11]やHTML[HTML401]には@citeがあります。この属性により、著者は引用の起源を示すための情報をドキュメントに追加することができます。

しかし、これらの「組み込んだ」属性の場合、RDFaプロセッサが個々の特殊な属性を知っている必要があるため、ドキュメントからメタデータを抽出するための一般的なプロセスを定義することは困難です。RDFaの動機の1つは、組み込みではなく、一般的な方法でメタデータを用いてドキュメントを拡張できる手段を考案することでした。これは、固定の属性集合と解析規則を作成することで実現してきましたが、それにより、範囲が拡大している利用可能なRDF語彙から任意の数のプロパティーをこれらの属性に含めることができます。ほとんどの場合、これらのプロパティーのは、すでに著者のドキュメントにある情報です。

RDFaにより、属性にのみ依存するRDFの新しい構文の概要を示すことで、その言語のユーザが持ちえるすべての構造要件を予測するというマークアップ言語の設計者のプレッシャーが軽減されます。この仕様の概念と規則を遵守することで、言語の設計者は最小限の労力でRDFaを自身の環境にインポートし、適合するプロセッサが、自身のドキュメントからセマンティックなデータを確実に抽出できるようにすることが可能となります。

2. 構文の概要

この項は非規範的です。

次の例は、RDFaに精通していない読者が、RDFaの仕組みをすぐに理解できるようにするためのものです。より完全な手引きについては、RDFa入門[RDFA-PRIMER]をお読みください。

RDFでは、接頭辞と参照を用いた短縮IRIにより語彙の用語を短縮するのが一般的です。この方法については、「短縮URI表現」の項で詳しく説明しています。このドキュメント全体の例は、次の語彙の接頭辞が定義されていることを前提としています。

bibo: http://purl.org/ontology/bibo/
cc: http://creativecommons.org/ns#
dbp: http://dbpedia.org/property/
dbp-owl: http://dbpedia.org/ontology/
dbr: http://dbpedia.org/resource/
dc: http://purl.org/dc/terms/
ex: http://example.org/
foaf: http://xmlns.com/foaf/0.1/
owl: http://www.w3.org/2002/07/owl#
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfa: http://www.w3.org/ns/rdfa#
rdfs: http://www.w3.org/2000/01/rdf-schema#
xhv: http://www.w3.org/1999/xhtml/vocab#
xsd: http://www.w3.org/2001/XMLSchema#

以下の一部の例では、表示されているRDFaフラグメント識別子を含んでいるドキュメントに対してローカルなフラグメント識別子を持つIRIを用いています(例えば、「about="#me"」)。RDF/XML[RDF-SYNTAX-GRAMMAR]やその他のRDFシリアル化でも用いられているこのイディオムは、RDFaで記述されているエンティティに対して新しいIRIを簡単に「作成する」方法を提供するため、RDFaの表現力に大きく貢献します。フラグメント識別子を含んでいるIRIがRDFグラフに出現する場合の正確な意味は、[RDF-SYNTAX-GRAMMAR]の7項で示されています。そのようなフラグメント識別子が確実に正しく解釈されるように、RDFaを組み込んだマークアップ言語のメディア・タイプの登録では、この仕様を直接的または間接的に参照すべきです。

2.1 RDFaの属性

RDFaは、いくつかの新しい属性を提供するだけでなく、多くのよく見かける属性を用います。広く展開されている言語(例えば、HTML)に既に存在している属性は、その構文が若干変更されている場合もあるものの、常に同じ意味を持っています。例えば、(X)HTMLには、新しい@relの値を追加する明確な方法はありません。RDFaは、この問題を明示的に解決することを目指しており、IRIを値として認めることでそれを行います。また、完全なIRIの値を簡潔に表現できるようにする用語と「短縮URI表現」の概念 — このドキュメントではCURIEと呼ぶ — も導入しています。完全なRDFaの属性名と構文のリストについては、属性と構文を参照してください。

2.2

(X)HTMLでは、著者はmetalinkの要素を用いて、現在のドキュメントに関するメタデータと関係を含めることができます(ここの例では、XHTML+RDFa [XHTML-RDFA]を用いている)。例えば、ページの著者は、現在のページの前後のページとともに、linkとmetaの要素を用いて表現できます。

例1
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Page 7</title>
    <meta name="author" content="Mark Birbeck" />
    <link rel="prev" href="page6.html" />
    <link rel="next" href="page8.html" />
  </head>
  <body>...</body>
</html>

RDFaはこの概念を利用し、完全なIRIで他の語彙を利用する性能を用いて、それを高めます。

例2
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>My home-page</title>
    <meta property="http://purl.org/dc/terms/creator" content="Mark Birbeck" />
    <link rel="http://xmlns.com/foaf/0.1/topic" href="http://www.example.com/#us" />
  </head>
  <body>...</body>
</html>

上記のような完全なIRIの使用は煩雑でありえるため、RDFaでは、短縮URI表現の使用も認められており、それにより、著者は省略表現を用いて複数の語彙で用語を参照できます。

例3
<html
  xmlns="http://www.w3.org/1999/xhtml"
  prefix="foaf: http://xmlns.com/foaf/0.1/
          dc: http://purl.org/dc/terms/"
  >
  <head>
    <title>My home-page</title>
    <meta property="dc:creator" content="Mark Birbeck" />
    <link rel="foaf:topic" href="http://www.example.com/#us" />
  </head>
  <body>...</body>
</html>

RDFaは、任意の要素における@rel@revの使用をサポートしています。これは、様々な語彙のサポートを追加するとさらに便利になります。

例4
This document is licensed under the 
<a prefix="cc: http://creativecommons.org/ns#"
   rel="cc:license"
   href="http://creativecommons.org/licenses/by-nc-nd/3.0/"
   >Creative Commons By-NC-ND License</a>.

ドキュメント内のIRIを再利用してメタデータを提供できるだけでなく、@propertyと一緒に用いれば、テキストをインライン化することもできます。

例5
<html
  xmlns="http://www.w3.org/1999/xhtml"
  prefix="dc: http://purl.org/dc/terms/"
  >
  <head><title>My Home Page</title></head>
  <body>
    <h1 property="dc:title">My home-page</h1>
    <p>Last modified: 16 September 2015</p>
  </body>
</html>

表示されているあるテキストが、それが表す「値」と異なる場合は、@contentを用いてより正確な値を追加できます。値は、@datatypeを用いて型付けすることもできます。

例6
<html
  xmlns="http://www.w3.org/1999/xhtml"
  prefix="xsd: http://www.w3.org/2001/XMLSchema#
          dc: http://purl.org/dc/terms/"
  >
  <head><title>My Home Page</title></head>
  <body>
    <h1 property="dc:title">My home-page</h1>
    <p>Last modified: <span property="dc:modified"
            content="2015-09-16T16:00:00-05:00"
            datatype="xsd:dateTime">16 September 2015</span>.</p>
  </body>
</html>

RDFaでは、ドキュメントに他のドキュメントや資源に関するメタデータ情報を含めることができます。

例7
<html
  xmlns="http://www.w3.org/1999/xhtml"
  prefix="bibo: http://purl.org/ontology/bibo/
          dc: http://purl.org/dc/terms/"
  >
  <head>
    <title>Books by Marco Pierre White</title>
  </head>
  <body>
    I think White's book
    '<span about="urn:ISBN:0091808189" 
           property="dc:title">Canteen Cuisine</span>'
    is well worth getting since although it's quite advanced stuff, he
    makes it pretty easy to follow. You might also like
    <span 
     about="urn:ISBN:1596913614" 
     property="dc:description"
     >White's autobiography</span>.
  </body>
</html>

多くの場合、マークアップのブロックには、同じ項目に関連付けられている多数のプロパティーが含まれているでしょう。RDFaでは、@typeofによりその項目の型を示すことができます。

例8
<html
  xmlns="http://www.w3.org/1999/xhtml"
  prefix="bibo: http://purl.org/ontology/bibo/
          dc: http://purl.org/dc/terms/"
  >
  <head>
    <title>Books by Marco Pierre White</title>
  </head>
  <body>
    I think White's book
    '<span about="urn:ISBN:0091808189" typeof="bibo:Book"
           property="dc:title">Canteen Cuisine</span>'
    is well worth getting since although it's quite advanced stuff, he
    makes it pretty easy to follow. You might also like
    <span 
     about="urn:ISBN:1596913614"
     typeof="bibo:Book"
     property="dc:description"
     >White's autobiography</span>.
  </body>
</html>

少量のマークアップを扱う場合には、CURIEではなく、完全なIRIを用いる方が容易な場合もあります。前の例は、次のように書くこともできます。

例9
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Books by Marco Pierre White</title>
  </head>
  <body>
    I think White's book
    '<span
     about="urn:ISBN:0091808189"
     typeof="http://purl.org/ontology/bibo/Book"
     property="http://purl.org/dc/terms/title"
     >Canteen Cuisine</span>'
    is well worth getting since although it's quite advanced stuff, he
    makes it pretty easy to follow. You might also like
    <span
     about="urn:ISBN:1596913614"
     typeof="http://purl.org/ontology/bibo/Book"
     property="http://purl.org/dc/terms/description"
     >White's autobiography</span>.
  </body>
</html>

特定の語彙の用語を用いてドキュメントの一部を定義するシンプルな方法は、@vocabでデフォルトの語彙IRIを定義することです。例えば、FOAF用語を用いる場合は、次のとおりです。

例10
<div vocab="http://xmlns.com/foaf/0.1/" about="#me">
   My name is <span property="name">John Doe</span> and my blog is called
   <a rel="homepage" href="http://example.org/blog/">Understanding Semantics</a>.
</div>

上記の例では、次のトリプルが生成されます(ここではTurtle構文で表しています)。

例11
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
<#me> foaf:name "John Doe" ;
      foaf:homepage <http://example.org/blog/> .

シンプルなケースでは、@relの代わりに@propertyプロパティーを用いることもできます。実際、要素に@rel@datatype、または@contentが含まれていないけれども、@hrefなどがあれば、@propertyの効果は@relの役割に似たものになります。例えば、前の例は次のように書くことができました。

例12
<div vocab="http://xmlns.com/foaf/0.1/" about="#me">
   My name is <span property="name">John Doe</span> and my blog is called
   <a property="homepage" href="http://example.org/blog/">Understanding Semantics</a>.
</div>

3. RDF用語

この項は非規範的です。

前項では、RDFaのマークアップの構造を示すために、典型的なマークアップの例を示しました。RDFaは「RDF in Attributes」の省略形です。RDFaを作成するためには、RDFを理解している必要はありませんが、確実に役に立ちます。しかし、RDFaをサポートする言語のRDF出力を利用するシステムを構築する場合には、RDFを理解する必要があることはほぼ間違いありません。この項では、RDFの基本概念と用語を紹介します。RDFのより完全は説明については、RDF概念ドキュメント[RDF-SYNTAX-GRAMMAR]とRDF構文ドキュメント[RDF-SYNTAX-GRAMMAR]を参照してください。

3.1 ステートメント

RDFaがアクセスを提供する構造化データは、ステートメントのコレクションです。ステートメントは、処理が容易になるように特定の形式で構築された情報の基本単位です。大量の情報をステートメントのコレクションに分解することにより、非常に複雑なメタデータもシンプルな規則で処理できます。

例えば、次のような事実があるとします。

例13
Albert was born on March 14, 1879, in the German Empire. There is a picture of him at
the web address, http://en.wikipedia.org/wiki/Image:Albert_Einstein_Head.jpg.

これは、機械には解釈が非常に難しく、あるデータ・アプリケーションから別のデータ・アプリケーションに渡せる形式ではまったくありません。しかし、その情報を一連のステートメントに変換すると、扱いやすくなり始めます。したがって、同じ情報を次のより短い「ステートメント」で表すことができます。

例14
Albert was born on March 14, 1879.
Albert was born in the German Empire.
Albert has a picture at
  http://en.wikipedia.org/wiki/Image:Albert_Einstein_Head.jpg.

3.2 トリプル

この情報を機械で処理できるようにするために、RDFはこれらの文の構造を定義しています。ステートメントは正式にはトリプルと呼ばれ、3つの要素で構成されていることを意味します。最初のものはトリプルの主語であり、何に関してステートメントを出しているかを表します。これらすべての例では、主語は「Albert」(アルベルト)です。

トリプルの2番目の部分は、定義したい主語のプロパティーです。ここの例では、プロパティーは「was born on」(~に生まれた)、「was born in」(~で生まれた)、「has a picture at」(~に写真がある)です。これらのプロパティーは、通常、RDFでは述語と呼びます。

トリプルの最後の部分は、目的語と呼ばれます。ここの例では、その3つの目的語は「March 14, 1879」(1879年3月14日)、「the German Empire」(ドイツ帝国)、「http://en.wikipedia.org/wiki/Image:Albert_Einstein_Head.jpg」という値を持っています。

RDFaは、「主語」、「述語」、「目的語」で国際化文字をサポートしています。

3.3 IRI参照

複雑な情報を扱いやすい単位に分割することは、データの特定に役立ちますが、いくらかの曖昧さも残ります。例えば、どの「Albert」に関する話なのでしょうか?別のシステムが「Albert」に関する事実をより多く持っている場合、どのようにすれば、それらが同じ人物に関するものであるかを知り、その人物に関して分かっていることのリストに追加できるのでしょうか?ドイツ帝国(German Empire)で生まれた人々を見つけたいと思ったときに、どのようにすれば、「was born in」という述語が、他のシステムに存在しうる「birthplace」(出生地)という述語と同じ意味を持っていると知ることができるのでしょうか?RDFは、曖昧な用語をIRI参照に置き換えることでこの問題を解決します。

IRIは、ウェブ・ページを識別するために最も一般的に用いられていますが、RDFでは、概念に対して一意の識別子を提供する方法としてそれを用います。例えば、「Albert」という曖昧な文字列ではなく、Albert Einstein(アルベルト・アインシュタイン)のDBPedia[http://dbpedia.org]のIRIを用いて、すべてのステートメントの主語(各トリプルの最初の部分)を識別することができます。

例15
<http://dbpedia.org/resource/Albert_Einstein>
   has the name 
   Albert Einstein.
<http://dbpedia.org/resource/Albert_Einstein>
   was born on 
   March 14, 1879.
<http://dbpedia.org/resource/Albert_Einstein>
   was born in 
   the German Empire.
<http://dbpedia.org/resource/Albert_Einstein>
   has a picture at
   http://en.wikipedia.org/wiki/Image:Albert_Einstein_Head.jpg.

IRI参照は、メタデータ・ステートメントの目的語(各トリプルの3番目の部分)を一意に識別するためにも用いられます。Einsteinの写真は既にIRIですが、IRIを用いて「ドイツ帝国」という国を一意に識別することもできます。同時に、引用符で囲むことで、名前と生年月日が実際にはリテラルである(IRIではない)ことを示します。

例16
<http://dbpedia.org/resource/Albert_Einstein> 
   has the name 
   "Albert Einstein".
<http://dbpedia.org/resource/Albert_Einstein> 
   was born on 
   "March 14, 1879".
<http://dbpedia.org/resource/Albert_Einstein> 
   was born in 
   <http://dbpedia.org/resource/German_Empire>.
<http://dbpedia.org/resource/Albert_Einstein> 
   has a picture at
   <http://en.wikipedia.org/wiki/Image:Albert_Einstein_Head.jpg>.

IRI参照は、述語が明確であることを保証するためにも用いられます。このようにして、「birthplace」、「place of birth」、「Lieu de naissance」などが、すべて同じものを指すと確信することが可能となります。

例17
<http://dbpedia.org/resource/Albert_Einstein>
  <http://xmlns.com/foaf/0.1/name>
  "Albert Einstein".
<http://dbpedia.org/resource/Albert_Einstein>
  <http://dbpedia.org/property/dateOfBirth>
  "March 14, 1879".
<http://dbpedia.org/resource/Albert_Einstein>
  <http://dbpedia.org/property/birthPlace>
  <http://dbpedia.org/resource/German_Empire>.
<http://dbpedia.org/resource/Albert_Einstein>
  <http://xmlns.com/foaf/0.1/depiction>
  <http://en.wikipedia.org/wiki/Image:Albert_Einstein_Head.jpg>.

3.4 プレーン・リテラル

主語と述語には常にIRI資源が用いられますが、トリプルの目的語部分はIRIかリテラルのいずれかでありえます。例のトリプルでは、Einsteinの名前はプレーン・リテラル(具体的には、型や言語情報のないベーシックな文字列)で表されています。

例18
<http://dbpedia.org/resource/Albert_Einstein>
  <http://xmlns.com/foaf/0.1/name> "Albert Einstein".

プレーン・リテラルには、プレーン・テキストを自然言語で捕捉するために、言語タグを付与することもできます。例えば、Einsteinの出生地は、英語とドイツ語では名前が異なります。

例19
<http://dbpedia.org/resource/German_Empire>
  rdfs:label "German Empire"@en;
  rdfs:label "Deutsches Kaiserreich"@de .

3.5 型付きリテラル

日付や数字などの一部のリテラルは、非常に特定的な意味を持つため、RDFはリテラルの型を示す方法を提供しています。型付きリテラルは、プレーン・リテラルの末尾にIRIを付けて示し、このIRIがリテラルのデータ型を示します。このIRIは、通常、XMLスキーマ・データ型の仕様[XMLSCHEMA11-2]で定義されているデータ型に基づきます。Einsteinの生年月日をhttp://www.w3.org/2001/XMLSchema#dateという型のリテラルで明確に表すために、次の構文を用います。

例20
<http://dbpedia.org/resource/Albert_Einstein>
  <http://dbpedia.org/property/dateOfBirth> 
     "1879-03-14"^^<http://www.w3.org/2001/XMLSchema#date>.

3.6 Turtle

RDFの鍵となる概念はトリプルとIRIの使用であり、特定の構文ではないため、RDF自体には、トリプルを表すための1つの決まった方法はありません。しかし、トリプルを表す方法は、RDF/XML[RDF-SYNTAX-GRAMMAR]、Turtle[TURTLE]、そしてもちろんRDFaなど、多く存在しています。RDFに関する多くの議論では、Turtle構文が非常にコンパクトであるため、これを用いてその概念を説明しています。ここで示した例では、既にこの構文を用いていますが、RDFaから生成されうるRDFに関して説明する必要がある場合は、このドキュメント全体で引き続き用います。Turtleは、IRIマッピングを用いて長いIRIを短縮でき、これを用いて、次のように短縮IRI表現を表すことができます。

例21
@prefix dbp: <http://dbpedia.org/property/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
<http://dbpedia.org/resource/Albert_Einstein>
  foaf:name "Albert Einstein" .
<http://dbpedia.org/resource/Albert_Einstein>
  dbp:birthPlace <http://dbpedia.org/resource/German_Empire> .

ここでは「dbp:」はDBPediaのIRIにマッピングされ、「foaf:」は「Friend of a Friend」の語彙のIRIにマッピングされます。

TurtleのIRIは、このように短縮できます。これは、Einsteinの識別子やデータ型指示子を短縮するために同じ技術を用いることもできたことを意味します。

例22
@prefix dbp: <http://dbpedia.org/property/> .
@prefix dbr: <http://dbpedia.org/resource/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

dbr:Albert_Einstein
  foaf:name "Albert Einstein";
  dbp:birthPlace dbr:German_Empire;
  dbp:dateOfBirth "1879-03-14"^^xsd:date;
  foaf:depiction <http://en.wikipedia.org/wiki/Image:Albert_Einstein_Head.jpg> .

dbr:German_Empire
  rdfs:label "German Empire"@en;
  rdfs:label "Deutsches Kaiserreich"@de .

例を記述する際に、次のようなTurtle表現のIRIをよく見かけます。

例23
<>

これは、「現在のドキュメント」、すなわち処理中のドキュメントを示します。最終的には、ドキュメントのロケーションに基づく完全なIRIが存在するようになりますが、この短縮形はサンプルをよりコンパクトにするために役立ちます。短縮形の技術全体は例をコンパクトにする方法に過ぎず、生成される実際のトリプルでは常に完全なIRIを用いることに特に注意してください。

3.7 グラフ

トリプルのコレクションをグラフと呼びます。この仕様で定義しているすべてのトリプルは、RDFaプロセッサによる出力グラフに含まれます。グラフやその他のRDFの概念の詳細については、[RDF-SYNTAX-GRAMMAR]を参照してください。

3.8 短縮URI表現

RDFステートメントの短縮表現を可能とするために、RDFaでは、ほとんどのIRI参照を「短縮URI表現」(compact URI expression)、すなわちCURIEと呼ばれる形式に短縮することができます。この方法の詳細な議論は、CURIEとIRIの処理の項にあります。

CURIEはマークアップとTurtleの例でのみ用いており、生成されたトリプルには決して現れないことに注意してください。これは、IRI参照を用いるためにRDFで定義されています。

3.9 フラグメントとRDFaのマークアップ

組み込みメタデータの利用が増えるということは、マークアップのフラグメントを取り込んで、あるドキュメントから別のドキュメントにそれを移動させることです。これは、ブラウザでのドラッグ・アンド・ドロップや、ドキュメントへの記述用に著者に提供されるコードのスニペットなどのツールを用いることで発生する可能性があります。後者の良い例は、Creative Commonsが提供するライセンスのフラグメントです。

しかし、フラグメントの作成に関わる人(ツールの構築またはスニペットの作成のいずれかにより)は、この仕様ではフラグメントの処理方法については言及していないことに注意してください。具体的には、RDFa処理は主にコンテキストに関するものであるため、完全なドキュメントの「外部」にあるフラグメントの処理は定義していません。この仕様や関連する仕様の将来のバージョンでは、この動作を定義するためにより多くの対応を行う可能性があります。

フラグメントを処理するツールの開発者やフラグメントを手動で記述する人は、そのフラグメントが完全なドキュメントに含まれた場合に何が起こるのかにも留意する必要があります。フラグメントの正しい解釈を保証するために必要となる「コンテキスト」情報の量を注意深く考慮する必要があります。

3.10 RDF用語でのRDFaの記述

下記は、ここで紹介しているRDF用語の観点でのRDFaの簡単な説明です。RDFに関する予備知識を有する読者にとっては、下記が有用でありえます。

RDFグラフには、関係によってリンクされたノードが含まれます。RDFaの目的は、一つのRDFグラフをさまざまな種類のドキュメントのマークアップに含めることができるようにすることです。RDFグラフの基本単位はトリプルで、その中では、主語ノード述語によって目的語ノードにリンクされています。主語ノードは常にIRI参照または空白ノード(またはbノード)のいずれかであり、述語常にIRI参照であり、ステートメントの目的語はIRI参照リテラルまたはbノードでありえます。

RDFaでは、一般的に主語のIRI参照@aboutで示し、述語は@property@rel@revのいずれかで表します。IRI参照である目的語は、@resource@src、または@hrefで表しますが、リテラルである目的語は@contentか、問題の要素のコンテンツのいずれかで表します(オプションのデータ型は@datatypeで表し、オプションの言語は@xml:langなどのホスト言語が定義するメカニズムを用いて表します)。

4. 適合性

非規範的と記している項と同じく、この仕様のすべての作成ガイドライン、図、例、注は、非規範的です。この仕様のその他の部分はすべて規範的ですこの仕様のその他の部分はすべて規範的です。

「することができる/してもよい(MAY)」、「しなければならない(MUST)」、「してはならない(MUST NOT)」、「推奨される(RECOMMENDED)」、「すべきである/する必要がある(SHOULD)」、「すべきでない/する必要がない(SHOULD NOT)」というキーワードは、[RFC2119]で記述されているように解釈されるべきです。

4.1 RDFaプロセッサの適合性

この仕様では、出力グラフという用語を、処理モデルの項に従ってドキュメントが言明するすべてのトリプルを意味するために用います。適合するRDFaプロセッサは、処理モデルの項の規則を用いて生成されたすべての可能なトリプルを含む一つのRDFグラフを、それを利用するアプリケーションに提供しなければなりません(MUST)。プロセッサ・グラフという用語は、RDFaプロセッサがそのステータスを報告するために生成しえる(MAY)すべての参考情報、警告、エラーのトリプルのコレクションを示すために用いられます。出力グラフプロセッサ・グラフは別々のグラフであり、RDFaプロセッサによって同じグラフに格納されてはなりません(MUST NOT)。しかし、プロセッサは、2つのグラフが一緒に取得されることを許すことができます。詳細は7.6.1項を参照してください。

適合するRDFaプロセッサは、ここで記載していない規則を用いて生成された追加のトリプルを提供できますが(MAY)、そのトリプルを出力グラフで提供してはなりません(MUST NOT)。(この追加のトリプルが1つ以上の追加のRDFグラフで提供されるかどうかは、実装固有であるため、ここでは定義していません。)

適合するRDFaプロセッサは、プレーン・リテラルXMLリテラルの両方で空白を保持しなければなりません(MUST)。しかし、プロセッサが動作するアーキテクチャが、ドキュメントがRDFaプロセッサに到達する前にドキュメント内の空白を変更したというケースもありえます(例えば、[XMLSCHEMA11-1]プロセッサは属性値の空白を「正規化する」ことが許されています - 3.1.4項を参照してください)。処理環境間の整合性が最大限に確保されるように、著者はプレーン・テキストやXMLリテラル内の不要な空白を削除すべきです(SHOULD)。

適合するRDFaプロセッサは、ドキュメントのホスト言語を決定するために、処理中のドキュメントのメディア・タイプを検証しなければなりません(MUST)。RDFaプロセッサがメディア・タイプを決定できない場合や、そのメディア・タイプをサポートしていない場合は、RDFaプロセッサは、そのドキュメントを、application/xmlというメディア・タイプであるかのように処理しなければなりません(MUST)。XML+RDFaドキュメントの適合性を参照してください。ホスト言語は、追加の通知メカニズムを指定できます(MAY)。

適合するRDFaプロセッサは、メディア・タイプが利用できない場合にホスト言語の決定を試みるために、追加のメカニズム(例えば、DOCTYPE、ファイル拡張子、ルート要素、ユーザ定義パラメータの上書き)を使用できます(MAY)。これらのメカニズムはまだ規定していません。

4.2 RDFaホスト言語の適合性

RDFaを組み込んだホスト言語は、下記に準拠しなければなりません。

4.3 XML+RDFaドキュメントの適合性

この仕様では、単独の文書型は定義していません。ここの属性は、他のホスト言語(例えば、HTML+RDFaやXHTML+RDFa)に統合されることを意図しています。ただし、この仕様では、汎用的なXMLドキュメント - つまり、text/xmlまたはapplication/xmlのメディア・タイプとして配信されるドキュメント - の処理規則を定義しています。そのようなドキュメントは、次のすべての基準を満たさなければなりません。

  1. ドキュメントは、[XML10-4e]で定義されている整形式でなければならない(MUST)。
  2. ドキュメントでは、この仕様で定義されている属性を「名前空間なし」で用いる(例えば、要素で属性を用いる場合、修飾接頭辞: <myml:myElement property="license">なしに用いる)べきである(SHOULD)。

    XML文法は、この仕様の属性と衝突するネイティブな属性を持つことができます。その結果、RDFaプロセッサにより、予期しないトリプルが生成される可能性があります。

RDFaプロセッサがXML+RDFaドキュメントを処理する場合は、次の初期コンテキストを用いてそれを行います。

  1. デフォルトの用語(例えば、describedbylicenserole)があり、http://www.w3.org/2011/rdfa-context/rdfa-1.1で定義されている。
  2. デフォルトの接頭辞マッピング(例えば、dc)があり、http://www.w3.org/2011/rdfa-context/rdfa-1.1で定義されている。
  3. デフォルトの語彙IRIがない。
  4. 基底は、[XML10-4e]で定義されている@xml:base属性を用いて設定できる。
  5. 現在の言語は、@xml:lang属性を用いて設定できる。

5. 属性と構文

この仕様では、多くの属性と、それらの属性の値がRDFトリプルの生成時にどのように解釈されるべきかを定義しています。この項では、属性とその値の構文を定義します。

about
SafeCURIEorCURIEorIRI。データが何に関するものであるかを示すために用いる(RDF用語では「主語」)。
content
CDATA文字列。リテラルに対する機械可読コンテンツを提供するためのもの(RDF用語では「リテラルの目的語」)。
datatype
データ型を表すTERMorCURIEorAbsIRI。リテラルのデータ型を表現するためのもの。
href (オプション)
関係のパートナー資源を表すための従来のナビゲート可能なIRI(RDF用語では「資源の目的語」)。
inlist
同じ要素のrelまたはpropertyの属性に関連付けられている目的語がその述語のリストに追加されていることを示すために用いる属性。この属性の値は無視しなけらばならない(MUST)。この属性が存在している場合、リストがまだ存在していなければ、作成される。
prefix
下記の形式の接頭辞名IRIの対の空白区切りのリスト。
NCName ':' ' '+ xsd:anyURI
property
TERMorCURIEorAbsIRIsの空白区切りのリスト。主語と、(与えられた場合には)資源の目的語か何らかのリテラルのテキストのいずれかとの間の関係を表すために用いる(「述語」でもある)。
rel
TERMorCURIEorAbsIRIsの空白区切りのリスト。2つの資源間の関係を表すために用いる(RDF用語では「述語」)。
resource
ナビゲート可能であることを意図しない関係のパートナー資源(例えば、「クリッカブルな」リンク)を表すためのSafeCURIEorCURIEorIRI(「目的語」でもある)。
rev
TERMorCURIEorAbsIRIsの空白区切りのリスト。2つの資源間の逆方向の関係を表すために用いる(「述語」でもある)。
src (オプション)
資源が組み込まれている場合に関係のパートナー資源を表すためのIRI(「資源の目的語」でもある)。
typeof
主語に関連付けるRDFの型を示すTERMorCURIEorAbsIRIsの空白区切りのリスト。
vocab
TERMが属性値で参照されているときに用いるマッピングを定義するIRI属性における用語の一般的な使用語彙拡張に関する項を参照。

どのケースにおいても、これらの属性は、値なし(例えば、@datatype="")で用いたり、CURIEとIRIの処理の規則を用いて評価した後に値なしになる値(例えば、@datatype="[noprefix:foobar]")で用いたりすることができます。

5.1 属性の役割

RDFa属性は、セマンティックがリッチなドキュメントでは異なる役割を果たします。その役割とは、簡単に言えば次のとおりです。

5.2 属性値内の空白

多くの属性は、空白区切りのトークンのリストを受け入れます。この仕様では、空白を次のように定義しています。

whitespace      ::=  (#x20 | #x9 | #xD | #xA)+ 

属性が空白区切りのトークンのリストを受け入れる場合、RDFaプロセッサは先頭または末尾の空白を無視しなければなりません(MUST)。

この定義は[XML10]の定義と整合性があります。

6. CURIE構文定義

現在、ワーキンググループは、RDFワーキンググループとRDFaワーキンググループのメンバーから受け取った最近のコメントを考慮して、下記のCURIEの生成規則を検証しています。近い将来、下記の生成規則に軽微な変更が加えられ、これらの変更には後方互換性がない可能性があります。ただし、このような非互換性は、極端なケース(edge case)に限られます。

RDFの主要な要素はIRIですが、通常は長くて扱いにくいです。したがって、RDFaは、IRIを短縮できるメカニズムをサポートしており、「短縮URI表現」または単にCURIEと呼ばれます。

展開時に得られるIRIは、構文的に有効なIRIでなければなりません(MUST)[RFC3987]。より詳細な説明については、CURIEとIRIの処理を参照してください。CURIEの字句空間は、下記のcurieで定義されているとおりです。値空間はIRIの集合です。

CURIEは、接頭辞参照という2つの要素で構成されています。接頭辞は、コロン(:)で参照と区切られています。一般的な利用では接頭辞を省略できるため、「デフォルトの接頭辞」マッピングを用いたCURIEを作成することができます。RDFaでは、「デフォルトの接頭辞」マッピングはhttp://www.w3.org/1999/xhtml/vocab#です。接頭辞コロンの両方を省略することもできるため、「接頭辞なし」マッピングを用いた参照のみを含むCURIEを作成することができます。この仕様では、「接頭辞なし」マッピングは定義していません。RDFaホスト言語は、「接頭辞なし」マッピングを定義してはなりません(MUST NOT)。

RDFaの「デフォルトの接頭辞」を[XML-NAMES]で定義されている「デフォルトの名前空間」と混同すべきではありません。RDFaプロセッサは、XML-NAMESの「デフォルトの名前空間」宣言を、「デフォルトの接頭辞」を設定しているものとして扱ってはなりません(MUST NOT)。

CURIEの一般構文は、次のように要約できます。

prefix      ::=   NCName

reference   ::=   ( ipath-absolute / ipath-rootless / ipath-empty ) 
                     [ "?" iquery ] [ "#" ifragment ] (as defined in [[!RFC3987]])

curie       ::=   [ [ prefix ] ':' ] reference

safe_curie  ::=   '[' [ [ prefix ] ':' ] reference ']'

属性値がCURIEやIRIであることを許されている場合でも、生成規則safe_curieは必須ではありません。対象とする(in-scope)マッピングではないスキームを用いているIRIをCURIEと混同することはできません。safe_curieの概念は、下位互換性のために残されています。

定義されているIRIスキームを覆い隠すような方法でCURIE接頭辞マッピングを定義することができす。例えば、ドキュメントでは、接頭辞「mailto」を「http://www.example.com/addresses/」にマッピングできます。すると、「mailto:user@example.com」が含まれている@resourceは、「http://www.example.com/addresses/user@example.com」という目的語を持つトリプルを作成するかもしれません。さらに、ドキュメントで定義されている接頭辞マッピングと競合するスキームが今後導入される可能性もあります(ただし、高くありません)(例えば、新しく提案された「ウィジェット」スキーム[WIDGETS-URI])。いずれのケースにおいても、この基本的なスキームを覆い隠すRDFaは、IRIの他の利用者がIRIを扱う方法を変えるものではありません。しかし、それは、ドキュメントの著者が意図したCURIEの使用が、IRIであると別の利用者に誤解されることを意味しえます。ワーキンググループは、このリスクは最小限であると考えています。

CURIEの通常の評価では、次のコンテキスト情報が提供される必要があります。

RDFaでは、これらの値は次のように定義されています。

CURIEは完全なIRIの1つの表現です。そのIRIを決定するための規則は次のとおりです。

RDFaプロセッサによって、コロンのない項目が、一部のデータ型でどのように解釈されるかについては、属性における用語の一般的な使用を参照してください。

6.1 なぜQNameではなくCURIEなのか?

この項は非規範的です。

多くの場合、言語の設計者は、展開メカニズム[XMLSCHEMA11-2]にQNameを用いることを試みてきました。QNameは、名前のコレクションの独自管理を認めており、名前を資源にマッピングすることができます。残念なことに、QNameはほとんどの場合に適切ではありません。なぜなら、1) [QNAMES]で論じられているとおり、属性値と要素コンテンツにおける識別子としてのQNameの使用には問題があり、2) QNameの構文は、あまりも制限が多く、あらゆる可能なIRIを表現することは可能ではありません。

これが引き起こす問題の具体例は、書籍の名前のコレクションを定義しようとしたときに発生します。QNameでは、コロンの後の部分は有効な要素名でなければならず、isbn:0321154991のような例は無効になります。

「0321154991」は有効な要素名ではないというシンプルな理由により、これは有効なQNameではありません。しかし、示した例では、いずれにせよ、我々は有効な要素名の定義を本当に望んでいるわけではありません。QName使用の理由は、プライベートなスコープの項目(ISBNの項目)を参照するということに尽きます。さらに、この例では、我々はそのスコープの名前を、そのISBNの意味を示すIRIにマッピングしたいと考えています。ご覧のとおり、QNameの定義とこの(比較的一般的な)ユースケースは互いに矛盾しています。

この仕様では、CURIEを定義することによってこの問題に対処しています。構文上、CURIEはQNameの上位集合です。

この仕様は、ドキュメントの著者ではなく、言語の設計者を対象としています。IRIまたは一意のトークンを表す手段としてQNameの使用を検討している言語の設計者は、代わりにCURIEを用いることを検討すべきです。

7. 処理モデル

この項では、RDFaドキュメントに存在している構造化データを表すトリプルを作成するための汎用的な処理規則に目を向けます。処理は、ここで概説しているDOMトラバーサル技術に従う必要はありませんが、何らかの他の処理方法に従った場合の効果は、ここで概説している処理に従った場合と同じでなければなりません。処理モデルは、(特に評価のコンテキストに関連して)記述を容易にするDOMトラバーサルという概念を用いて説明します。

この項では、処理モデルの説明や実装者に対する助言は、このような欄の中で記述しています。

7.1 概要

RDFaトリプルのドキュメントの評価は、ドキュメントの目的語から始まり、次に、ドキュメント順に個々の子要素を訪問し、処理規則を適用することで実行します。処理は、子要素ごとに、プロセッサがその子要素をそれぞれ訪問し、同じ処理規則を適用するという点で再帰的です。

ドキュメントのルート要素から始めてもドキュメントの目的語自体から始めてもほとんど違いがない場合もあります。ルート要素には存在しない重要な情報がドキュメントの目的語レベルに存在している場合もあるため、このような定義になっています。

処理が続行されると、トリプルを生成する規則が適用され、その後に子孫要素を処理するときに用いられる評価コンテキストの情報も変わる可能性があります。

この仕様では、生成されるトリプルがどうなるかや、ここで概説しているよりも多いトリプルが処理中に生成される可能性があるかどうかについては何も言及していません。しかし、RDFaプロセッサが適合するためには、最低限この項の規則が適用され、1つのRDFグラフが生成されたかのように動作しなければなりません(MUST)。RDFaプロセッサの適合性の項で説明したように、生成されたいかなる追加のトリプルも出力グラフに表示されてはなりません(MUST NOT)。それらをプロセッサ・グラフに含むことはできます(MAY)。

7.2 評価のコンテキスト

処理中に、評価のコンテキストによって提供される情報を用いて各規則が適用されます。初期コンテキストは、処理の開始時に作成されます。そのコンテキストには次のメンバーが含まれています。

処理の過程で、各子要素に渡される新しい評価のコンテキストが作成されます。下記で記述している最初の規則は、そのコンテキストにおける項目の値を決定します。次に、このコアな規則により、要素によって提供される情報と、評価のコンテキストの情報を組み合わせて新しいトリプルが作成されます。

処理の過程で、次のような、多くのローカルな範囲の値が必要になります。

7.3 連鎖

ステートメント連鎖は、著者が、不要なマークアップの反復を避けながら、RDFステートメントどうしをリンクさせることができるRDFaの機能です。例えば、著者が、資源であった目的語の子としてステートメントを追加する場合、これらのステートメントはその資源に関するものと解釈されるべきです。

例24
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <span property="foaf:name">Albert Einstein</span>
  <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  <div rel="dbp:birthPlace" resource="http://dbpedia.org/resource/German_Empire">
    <span property="dbp:conventionalLongName">the German Empire</span>
  </div>
</div>

この例では、目的語資源(「German_Empire」)が、入れ子のステートメントの主語になっていることがわかります。このマークアップは、「AはCを持つBを持つ」という基本的な連鎖パターンも示しています(つまり、Einsteinはドイツ帝国という出生地を持ち、それは「the German Empire」という長い名前を持っている)。

入れ子のステートメントの主語は、含んでいるステートメントに目的語を提供することもできます — 実質的に、先ほど見た例の逆です。説明のために、今述べた種類の連鎖の例を取り上げ、より効率的にマークアップする方法を示します。まず、Albert Einsteinは、彼の人生のある時点において、ドイツ帝国とスイスの両方に住居を持っていたという事実をマークアップします。

例25
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <div rel="dbp-owl:residence" resource="http://dbpedia.org/resource/German_Empire"></div>
  <div rel="dbp-owl:residence" resource="http://dbpedia.org/resource/Switzerland"></div>
</div>

ここで、同じ情報を示しますが、今度は住居の部分から不完全なトリプルを作成し、その後に、トリプルを「完全にする」するために、さらに任意の数の主語を用います。

例26
<div about="http://dbpedia.org/resource/Albert_Einstein" rel="dbp-owl:residence">
  <span about="http://dbpedia.org/resource/German_Empire"></span>
  <span about="http://dbpedia.org/resource/Switzerland"></span>
</div>

この例では、不完全なトリプルは、実際に2回完全になり(1度はドイツ帝国に関して、1度はスイスに関して)、これは先の例とまったく同じ情報を示します。

例27
<http://dbpedia.org/resource/Albert_Einstein>
  dbp-owl:residence <http://dbpedia.org/resource/German_Empire> .
<http://dbpedia.org/resource/Albert_Einstein>
  dbp-owl:residence <http://dbpedia.org/resource/Switzerland> .

連鎖には、比較的小さなマークアップが含まれている要素が伴うことがありえます(例えば、1つの資源のみ、または1つの述語のみ示しているものなど)。ここでは、Einsteinの写真を掲載するためにimg要素を用いています。

例28
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <div rel="foaf:depiction">
    <img src="http://en.wikipedia.org/wiki/Image:Albert_Einstein_Head.jpg" />
  </div>
</div>

このような小さなマークアップが用いられると、資源に関連する属性のいずれかが、連鎖において主語または目的語として機能する可能性があります。

例29
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <div rel="dbp-owl:residence">
    <span about="http://dbpedia.org/resource/German_Empire"></span>
    <span about="http://dbpedia.org/resource/Switzerland"></span>
  </div>
</div>

上記のように、@property@relは交換可能である場合が多いことに注意してください。これは連鎖には当てはまりません。最初の例で考えてみると、その例を次のように用いた場合、

例30
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <span property="foaf:name">Albert Einstein</span>
  <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  <div property="dbp:birthPlace" resource="http://dbpedia.org/resource/German_Empire">
    <span property="dbp:conventionalLongName">the German Empire</span>
  </div>
</div>

「the German Empire」の主語は、Albert Einsteinのままとなるでしょう(そして、それはもちろん間違いでしょう)。これが@property@relの主な違いで、後者は連鎖を導きますが、前者は通常は導きません。

7.4 CURIEとIRIの処理

RDFaは究極的にはRDFを転送する手段であるため、重要な概念は資源と、IRIとしてのその明示(manifestation)です。RDFは完全なIRI(相対パスではない)を処理します。RDFaをトリプルに変換する場合、任意の相対IRIは、RFC 3987[RFC3987]の6.5項、リファレンス解決で定義されているアルゴリズムを用いて、基底IRIに応じて解決されなければなりません(MUST)。IRIを参照するRDFa属性の値は、IRISafeCURIEorCURIEorIRI、またはTERMorCURIEorAbsIRIという3つの異なるデータ型を用います。これらの属性はすべて、処理後にIRIにマッピングされます。これらの属性の処理は次のとおりです。

IRI
コンテンツはIRIであり、そのまま用いられる。
SafeCURIEorCURIEorIRI
  • 値が角括弧で囲まれていれば、角括弧内のコンテンツは、CURIE構文定義に従ってCURIEとして評価される。有効なCURIEでない場合は、値を無視しなれけばならない(MUST)。
  • そうでない場合、値はCURIEとして評価される。それが有効なCURIEであれば、その結果のIRIが用いられる。そうでない場合、値はIRIとして処理される。

この結果、このデータ型の属性の値が空の文字列(例えば、@about="")であれば、その値がIRIに解決されることになります。""というIRIは、基底と同じであると解釈される相対IRIです。言い換えれば、 ""の値は通常、現在のドキュメントのIRIに解決されます。

これに関連する結果は、このデータ型の属性の値が空のSafeCURIE(例えば、@about="[]")であれば、その値はIRIにならず、したがって、その値は無視されることになります。

TERMorCURIEorAbsIRI
  • 値が用語であれば、それは属性における用語の一般的な使用に従って用語として評価される。このステップは、値が無視されることを意味することに注意。
  • 値が有効なCURIEであれば、その結果のIRIが用いられる。
  • 値が絶対IRIであれば、その値が用いられる。
  • そうでない場合、値は無視される。

属性のすべての値が無視される可能性があることに注意してください。そうなった場合には、属性は、空であるかのように扱わなければなりません(MUST)。

例えば、DBPedia上のAlbert Einsteinの完全なIRIは次のとおりです。

例31
http://dbpedia.org/resource/Albert_Einstein

著者は、情報を扱いやすくするためにCURIEを用いてこれを短縮できます。最初のステップは、著者がIRIの先頭セグメントに接頭辞をリンクさせた接頭辞マッピングを作成することです。RDFaでは、このマッピングは@prefixを用いて表されます。

例32
<div prefix="db: http://dbpedia.org/">
  ...
</div>

接頭辞が確立されると、著者はそれを用いて次のようにIRIを短縮できます。

例33
<div prefix="db: http://dbpedia.org/">
  <div about="db:resource/Albert_Einstein">
    ...
  </div>
</div>

著者はIRIをいつでも自由に分割できます。しかし、CURIEの一般的な使用方法は用語と値の利用可能なライブラリを作ることであるため、接頭辞は通常、最も再利用されるものを提供する共通セグメントにマッピングされ、用語のライブラリの管理人によって提供されることが多いです。例えば、DBPediaには膨大な資源のリストが含まれているため、資源の基底位置を用いた接頭辞マッピングを作成する方が効率的です。

例34
<div prefix="dbr: http://dbpedia.org/resource/">
  <div about="dbr:Albert_Einstein">
    ...
  </div>
  <div about="dbr:Baruch_Spinoza">
    ...
  </div>
</div>
接頭辞宣言に相対パスを用いることは、一般的には良くないと考えられていることに注意してください。著者がこの助言を無視する可能性があるため、CURIEから得られるIRIが相対的である可能性もさらにあります。しかし、トリプルを作成する前にすべてのIRIを基底に応じて解決しなければならないため、相対パスの使用は処理に影響すべきではありません。

7.4.1 接頭辞マッピングのスコープ

CURIE接頭辞マッピングは、現在の要素とその子孫で定義されます。与えられた接頭辞に対して最も内側のマッピングが優先されます。例えば、次の2つのCURIEで表されているIRIは、接頭辞のマッピングのスコープがローカルであるため、接頭辞が共通しているにも関わらず、異なります。

例35
<div prefix="dbr: http://dbpedia.org/resource/">
  <div about="dbr:Albert_Einstein">
    ...
  </div>
</div>
<div prefix="dbr: http://someotherdb.org/resource/">
  <div about="dbr:Albert_Einstein">
    ...
  </div>
</div>

一般的に、ドキュメント内の接頭辞マッピングを再定義することは良い習慣ではありません。特に、ドキュメント内の異なる場所で1つの接頭辞を別の値にマッピングすることは、許されているものの、混乱が生じる可能性があります。ワーキンググループは、ドキュメントの著者が、ドキュメントの全体において、同じ語彙に同じ接頭辞を用いてマッピングすることを推奨しています。多くの語彙には、推奨される接頭辞名があります。ワーキンググループは、可能な限りこれらの名前を用いることを推奨します。

7.4.2 属性におけるCURIEの一般的な使用

属性がCURIEを利用する方法は多く存在しており、それらは別々に処理する必要があります。それは、次のとおりです。

  1. 属性は、TERM、CURIE、絶対IRIが混在する1つ以上の値を認めることができる。
  2. 属性は、CURIEとIRIが混在する1つ以上の値を認めることができる。この場合、CURIE構文定義の項で概説しているように、CURIEでない値はIRIとして処理される。
  3. 値が角括弧で囲まれていれば、角括弧内のコンテンツは常にCURIE構文定義の規則に従って評価され、そのコンテンツがCURIEでなければ、そのコンテンツを無視しなければならない(MUST)。

空の属性値(例えば、typeof='')は、依然としてCURIEであり、そういうものとして処理されます。この処理の規則は、順序で定義しています。しかし、具体的には、空の属性値は、この仕様では決して相対IRIとして扱いません。

CURIEorIRIを含むことができる属性の例は@aboutです。IRIを直接表すために、著者は次のように記述するかもしれません。

例36
<div about="http://dbpedia.org/resource/Albert_Einstein">
  ...
</div>

一方で、上記のIRIをCURIEとして表すためには、著者は次のように記述するでしょう。

例37
<div about="dbr:Albert_Einstein">
  ...
</div>

著者は、次のように安全なCURIEを用いることもできます。

例38
<div about="[dbr:Albert_Einstein]">
  ...
</div>

CURIEではない値は無視しなければならない(MUST)ため、@aboutTERMの使用を認めておらず、CURIEには接頭辞の区切り文字がないため、次の@aboutの値は新しい主語を設定しません

例39
<div about="[Albert_Einstein]">
  ...
</div>

しかし、次のマークアップは、CURIEではなく有効な相対IRIであるため、主語を設定するでしょう

例40
<div about="Albert_Einstein">
  ...
</div>

いくつかのRDFa属性は、TERMSをその値として取ることもできることに注意してください。これは、次の項で論じます。

7.4.3 属性における用語の一般的な使用

一部のRDFa属性には、用語の参照を認めるデータ型があります。RDFaは、用語の構文を次のように定義しています。

term     ::=  NCNameStartChar termChar*
termChar ::=  ( NameChar - ':' ) | '/'

誤解を避けるために、この生成規則は、RDFaの「用語」が、先頭ではない文字としてスラッシュも認めているXML NCNameであることを意味します。

RDFa属性が用語の使用を認めていて、評価中の値が上記の用語の生成規則と一致する場合、それは以下のロジックを用いてIRIに変換されます。

  • ローカルなデフォルトの語彙があれば、IRIはその値とtermを連結させることで得られる。
  • そうでない場合、termローカルな用語マッピングのリスト内の項目と一致するかどうかを確認する。まず、大文字・小文字を区別してリストとの比較を行い、一致しなければ、大文字・小文字を区別しないで比較する。一致すればその関連するIRIを用いる。
  • そうでない場合、termには関連するIRIがなく、無視しなければならない(MUST)。

ローカルなデフォルトの語彙は、初期コンテキストの一部としてホスト言語で定義することができ、@vocabを用いて現在の要素とその子を上書きできます。

7.4.4 特定の属性におけるCURIEの使用

前項で論じた一般的な規則は、次の方法でRDFa属性に適用されます。

  • @aboutおよび@resourceSafeCURIEorCURIEorIRIというデータ型をサポートする。 - SafeCURIE、CURIE、またはIRIが可能となる。
  • @hrefおよび@srcは、ホスト言語(例えば、XHTML)で定義されている通りであり、IRIのみをサポートする。
  • @vocabがIRIをサポートする。
  • @datatypeTERMorCURIEorAbsIRIというデータ型をサポートする。 - 1つの用語、CURIE、または絶対IRIが可能となる。
  • @property@typeof@rel、および@revTERMorCURIEorAbsIRIsというデータ型をサポートする。 - 1つ以上の用語、CURIE、または絶対IRIが可能となる。

定義済みの用語と一致する値は、対応するIRIに対する参照に展開されなければなりません(MUST)。例えば、次の例は、

例41
<link rel="license" href="http://example.org/license.html" />
<link rel="xhv:license" href="http://example.org/license.html" />

それぞれ、次のトリプルを生成します。

例42
<> <http://www.w3.org/1999/xhtml/vocab#license> <http://example.org/license.html> .

7.4.5 空白ノードの参照

RDFaでは、bノードを含む様々な種類の資源参照を用いて関係を確立できます。主語または目的語がCURIEを用いて定義されており、そのCURIEが明示的にbノードを指定していれば、適合するプロセッサは、解析中にそれに遭遇したときにbノードを作成しなければなりません(MUST)。また、RDFaプロセッサは、自動的に生成されたbノードが、CURIE内の明示的な参照で定義されているbノードと衝突する名前を(例えば、連鎖の結果として)持つことがないようにしなければならない(MUST)。

次の例を検討してみましょう。

例43
<link about="_:john" rel="foaf:mbox"
  href="mailto:john@example.org" />
<link about="_:sue" rel="foaf:mbox"
  href="mailto:sue@example.org" />
<link about="_:john" rel="foaf:knows"
  resource="_:sue" />

上記のフラグメントでは、2つのbノードがトリプルの主語として明示的に作成されています。次に、これらのbノードが、当事者間の関係を示すために参照されます。処理後に、次のトリプルが生成されます。

例44
_:john foaf:mbox <mailto:john@example.org> .
_:sue foaf:mbox <mailto:sue@example.org> .
_:john foaf:knows _:sue .

RDFaプロセッサは、内部的に、実装依存の識別子をbノードに用います。トリプルが取得されると、新しいbノードの識別子が用いられ、通常、これは元の識別子とは関係がありません。しかし、実装は、これらの生成されたbノードの識別子に整合性があることを保証します。各bノードは独自の識別子を持ち、特定のbノードに対する参照はすべて同じ識別子を用い、異なるbノードは異なる識別子を持つでしょう。

特殊なケースとして、_:1つの特定のbノードに対する有効な参照です。

7.5 順序

処理は通常、解析対象のドキュメントが完全にロードされた後に開始されます。しかし、そうである必要はなく、SAX[SSAX]などのストリーム・ベースのアプローチを用いてRDFa情報を抽出することも確かに可能です。しかし、ここで定義しているDOMトラバーサルの技術以外のアプローチを用いる場合は、ホスト言語固有の処理規則を確実に適用することが重要です(例えば、XHTML+RDFa[XHTML-RDFA]では、base要素を使用できることが示されており、baseは、たとえmetalinkの要素がストリームのbase要素の前にあっても、それらの要素内のIRIの解釈に影響を与えるでしょう)。

この項では、「資源」という用語を「IRIまたはbノード」を意味するために用いています。この用語は、他のグループと相談した後に、何らかの他のより正式な用語に置き換えることができます。この用語を変更することは決してこの処理順序を変更するものではありません。

処理の開始時に初期評価コンテキストが次のように作成されます。

処理は、この初期評価コンテキストのコンテキストにおいて、以下の処理規則をドキュメントの目的語に適用することによって開始されます。各規則集合に用いられている評価コンテキストは、適用されている可能性のある以前の規則に基づいていますが、ツリーのすべての要素は、深さ優先(depth-first)で、下記で説明する規則に従っても処理されます。

この仕様では、すべてのホスト言語には存在していない可能性のあるオプション属性の処理規則を定義しています(例えば、@href)。これらの属性がホスト言語でサポートされていなければ、対応する処理規則はその言語には適していません。

処理規則は次のとおりです。

  1. まず、ローカルな値が次のように初期化される。
    一部のローカルな変数は、評価コンテキストを介して子孫要素に渡される値の一時的なコンテナであることに注意してください。コンテナの名前が同じである場合もあるため、次の手順でどちらが処理されているかを明確にするため、項目のローカルなバージョンは一般的にそのような名前で呼ばれます。
    ローカルな用語マッピングは、初期コンテキストによって提供され、常にグローバルな値にリセットされることに注意してください。この仕様の将来のバージョンでは、ローカルな用語マッピングを動的に設定できるメカニズムが導入されるかもしれません。その場合、ローカルな用語マッピングは親の値から継承されるでしょう。
  2. 次に、@vocabによりデフォルトの語彙への変更に対して現在の要素が検証される。@vocabが存在し、値を含んでいれば、ローカルなデフォルトの語彙は、CURIEとIRIの処理の項に従って更新される。値が空であれば、ローカルなデフォルトの語彙は、デフォルトに定義されている(存在する場合)ホスト言語にリセットされなければならない(MUST)。
    @vocabの値は、次のようにトリプルを生成するために用いられます。
    主語
    基底
    述語
    http://www.w3.org/ns/rdfa#usesVocabulary
    目的語
    @vocabの値
    ホスト言語ではデフォルトの語彙を定義する必要はありません。そのような場合には、@vocabを空の値に設定すると、ローカルなデフォルトの語彙をヌルに設定する効果があります。
  3. 次に、現在の要素IRIマッピングに対して検証され、これらがIRIマッピングのローカルなリストに追加される。IRIマッピングは、同じ名前を持つリスト内の現在のマッピングを単純に上書きすることに注意。
    マッピングは@prefixで定義されます。この属性の値は、最初から最後まで評価されます(例えば、通常のドキュメントでは左から右へと)。下位互換性のため、RDFaプロセッサは@xmlnsによるマッピングの定義も認めるべきです(SHOULD)。この場合、マッピングされる値は、XML名前空間接頭辞で設定され、マッピングする値は属性の値 — IRI — です。(@xmlnsによる接頭辞マッピングは非推奨であり、この仕様の将来のバージョンでは削除されるかもしれないことに注意してください。)xmlnsがサポートされていれば、そのマッピングは、同じ要素の@prefixのマッピングを処理する前に処理しなければなりません(MUST)。マッピングの宣言方法に関わらず、マッピングする値は、小文字に変換しなければならず(MUST)、そのIRIは決して処理されません。特にそれが相対パスであれば、現在の基底に対して解決してはなりません(MUST NOT)。著者は、相対パスをIRIとして用いるべきではありません(SHOULD NOT)。
  4. 現在の要素は、任意の言語情報に対しても解析が行われ、存在していれば、それに応じて現在の言語が設定される。
    RDFaを組み込んだホスト言語は、要素とそのコンテンツの自然言語を指定するメカニズムを提供できます(MAY)(例えば、XMLは汎用のXML属性である@xml:langを提供している)。
  5. 現在の要素@rel属性または@rev属性が含まれていなければ、次のステップは新しい主語の値を確立することである。このステップには2つの選択肢がある。
    1. 現在の要素@property属性が含まれているけれども、@content@datatypeの属性のいずれも含まれていなければ
      新しい主語は、次の規則の最初の一致から得られた資源に設定されます。
      • CURIEとIRIの処理の項に従って得られた@aboutの資源(存在していれば)を用いることによる。
      • そうでない場合、その要素がドキュメントのルート要素であれば、空の@aboutが存在しているかのように動作し、上記の@aboutの規則に従って処理する。
      • そうでない場合親の目的語が存在していれば、新しい主語は、親の目的語の値に設定される。

      @typeofが存在していれば、型付き資源は、次の規則の最初の一致から得られた資源に設定されます。

      • CURIEとIRIの処理の項に従って得られた@aboutの資源(存在していれば)を用いることによる。
      • そうでない場合、その要素がドキュメントのルート要素であれば、空の@aboutが存在しているかのように動作し、前の規則に従って処理する。
      • そうでない場合
    2. そうでない場合:
      • 要素に@about@href@src、または@resource属性が含まれていれば、新しい主語は、次のようにして得られた資源に設定される。
      • そうでない場合、資源属性で資源が提供されていなければ、次の規則の最初の一致が適用される。
      • 最後に、@typeofが存在していれば、型付き資源新しい主語の値に設定する。

  6. 現在の要素@relまたは@revの属性が含まれていれば、次のステップは、新しい主語の値と現在の目的語資源の値の両方を確立することである。
    新しい主語は、下記の規則の最初の一致から得られた資源に設定されます。

    @typeof属性が存在していれば、型付き資源新しい主語に設定します。

    資源が提供されていなければ、次の規則の最初の一致が適用されます。

    • 要素がドキュメントのルート要素であれば、空の@aboutがあるかのように動作し、上記の@aboutの規則に従って処理する。
    • そうでない場合親の目的語が存在していれば、新しい主語がそれに設定される。

    次に、現在の目的語資源は、次の規則の最初の一致から得られた資源に設定されます。

    • CURIEとIRIの処理の項に従って得られた@resourceの資源(存在していれば)を用いることによる。
    • そうでない場合CURIEとIRIの処理の項に従って得られた@hrefのIRI(存在していれば)を用いることによる。
    • そうでない場合CURIEとIRIの処理の項に従って得られた@srcIRI(存在していれば)を用いることによる。
    • そうでない場合@typeofが存在しており、@aboutが存在していなければ、新しく作成されたbノードを用いる。

    @typeofが存在しており、@about存在していなければ、型付き資源現在の目的語資源に設定します。

    現在の目的語資源の最終的な値は、ヌル(初期化からの)か完全なIRIかbノードのいずれかになることに注意してください。

  7. 前のいずれかのステップにおいて、型付き資源が、ヌルでない値に設定されていれば、それは今度は主語を型の値に提供するために用いられる。
    型付き資源に対する1つ以上の「型」は、@typeofを用いて設定できます。存在していれば、属性は、CURIEとIRIの処理の項に従って得られた1つ以上のIRIを含むことができ、それぞれは次のようにトリプルを生成するために用いられます。
    主語
    型付き資源
    述語
    http://www.w3.org/1999/02/22-rdf-syntax-ns#type
    目的語
    型付き資源の「型」の現在の完全なIRI
  8. 前のいずれかのステップにおいて、新しい主語親の目的語とは異なるヌルでない値に設定されていれば、
    評価コンテキストから得られたリスト・マッピングは、新しい空のマッピングに設定されます。
  9. 前のいずれかの手順において、現在の目的語資源がヌルではない値に設定されていれば、それは今度はトリプルを生成してローカルなリスト・マッピングにエントリを追加するために用いられます。
    要素に@inlist@relの属性の両方が含まれていれば、@relには、CURIEとIRIの処理の項に従って得られた1つ以上の資源を含むことができ、それぞれは次のようにリスト・マッピングにエントリを追加するために用いられます。
    現在の目的語資源に対する述語は、@rel@revの属性の一方または両方を用いて設定できますが、@rel属性の場合は@inlistが存在しない場合に限られます。
  10. 現在の目的語資源はヌルに設定されたけれども、述語が存在している場合は、目的語として使用できる主語が発見されるまでそれを不完全なトリプルとして格納しなければならない。また、現在の目的語資源は、新しく作成されたbノードに設定すべきである(不完全なトリプルが最終的にトリプルになった場合に接続する主語が存在しているように)。
    不完全なトリプルに対する述語は、@rel@revの属性の一方または両方を用いて設定できます。
  11. 繰り返しの次のステップは、現在のプロパティー値を確立することである。
    現在のプロパティー値に対する述語は@propertyを用いて設定できます。存在していれば、CURIEとIRIの処理の項に従って1つ以上の資源が得られ、実際のリテラル値は次のように得られます。
    • @datatypeが存在していれば、型付きリテラルとして、CURIEとIRIの処理の項に従った空の値はなく、http://www.w3.org/1999/02/22-rdf-syntax-ns#という語彙のXMLLiteralには設定されない。

      実際のリテラルは、現在の要素のうち、順に、@contentの値(存在していれば)、またはすべての子孫テキスト・ノードの値を連結して作成された文字列のいずれかである。最後の文字列には、[RDF-SYNTAX-GRAMMAR]で記述されているデータ型IRIが含まれており、それはCURIEとIRIの処理の項に従って得られる。

    • そうでない場合@datatypeは存在しているがCURIEとIRIの処理の項に従った空の値があれば、プレーン・リテラルとして。

      実際のリテラルは、現在の要素のうち、順に、@contentの値(存在していれば)、またはすべての子孫テキスト・ノードの値を連結して作成された文字列のいずれかである。

    • そうでない場合@datatypeが存在しており、http://www.w3.org/1999/02/22-rdf-syntax-ns#という語彙のXMLLiteralに設定されていれば、XMLリテラルとして。

      XMLリテラルの値は、テキストへのシリアル化を行い、すべてのノードが現在の要素の子孫である、つまり要素自体を含まず、http://www.w3.org/1999/02/22-rdf-syntax-ns#という語彙でXMLLiteralのデータ型を付与して作成される文字列である。その結果のシリアル化されたコンテンツの形式は、排他的XML正規化バージョン1.0[XML-EXC-C14N]で定義されているとおり。

      このリテラルのポータビリティを最大限に維持するために、要素である現在のノードの子要素には、シリアル化された要素で宣言されている現在のXML名前空間宣言(存在していれば)がなければなりません(MUST)。子要素ノードは、新しいXML名前空間も宣言できるため、RDFaプロセッサは、シリアル化された要素の定義を生成する際にそれを注意深く統合しなければなりません(MUST)。誤解を避けるために、現在のノードでアクティブだった宣言よりも子ノードの再宣言を優先させなければなりません(MUST)。

    • そうでない場合@contentが存在していれば、@contentの値を用いてプレーン・リテラルとして。
    • そうでない場合@rel@rev、および@contentの属性が存在していなければ、次の資源のうちの1つから得られた資源として。
    • そうでない場合@typeofが存在していて@aboutが存在していなければ、型付き資源の値。
    • そうでない場合プレーン・リテラルとして。

    さらに、現在の言語に値があれば、[RDF-SYNTAX-GRAMMAR]で記述しているとおり、プレーン・リテラルの値にこの言語情報を含めるべきです。実際のリテラルは、@contentの値(存在していれば)または現在の要素の各子孫要素のテキストのコンテンツをドキュメント順に連結して作成された文字列です。

    次に、現在のプロパティー値は、次のように各述語とともに用いられます。

  12. スキップ要素フラグが「偽」であり、かつ新しい主語がヌルでない値に設定されていれば、現在のコンテキスト内不完全なトリプルを完全にすべきである。
    現在の評価コンテキスト不完全なトリプルのリスト(不完全なトリプルのローカルなリストではなく)には、0以上の述語IRIが含まれるでしょう。このリストは繰り返され、各述語は親の主語および新しい主語とともに用いられ、トリプルを生成するか、ローカルなリスト・マッピングに新しい要素を追加します。各レベルに不完全なトリプルのリストが2つあることに注意してください。1つは現在の処理レベル(前のステップでは各子要素に渡されるもの)で、もう1つは評価コンテキストの一部として受け取られたものです。このステップの処理で用いられるのは後者です。
    不完全なトリプルにはそれぞれ、生成される各トリプルのうち、何が主語になるのか、何が目的語になるのかを決定するために用いられる方向の値があることに注意してください。
  13. 次に、現在の要素の子であるすべての要素が、ここで記述している規則を用いて処理され、新しい評価コンテキストを用いて、次のように初期化される。
  14. 最後に、ローカルなリスト・マッピングに1つ以上のマッピングがあれば、リストのトリプルは下記のように生成される。
    ローカルなリスト・マッピングのIRIごとに、同等のリストが評価コンテキストに存在していなければ、それはそのリストが元々現在の要素でインスタンス化されたことを示し、次のようにリストを用います。
    • IRIに関連付けられているリストに項目がなければ、次のトリプルを生成する。
      主語
      現在の主語
      述語
      このリストに関連付けられているローカルなリスト・マッピングの完全なIRI
      目的語
      http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
    • そうでない場合、
      • 新しく作成されたbノードを含んでいる新しい「bノード」配列を作成する(リストの項目ごとに1つ)。
      • リストのbノード-(IRIまたはリテラル)の対ごとに、次のトリプルが生成される。
        主語
        bノード
        述語
        http://www.w3.org/1999/02/22-rdf-syntax-ns#first
        目的語
        完全なIRIまたはリテラル
      • 「bノード」配列の項目ごとに、次のトリプルが生成される。
        主語
        bノード
        述語
        http://www.w3.org/1999/02/22-rdf-syntax-ns#rest
        目的語
        「bノード」配列の次の項目、またはそれが存在していなければ、http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
      • 1つの追加のトリプルが生成される。
        主語
        現在の主語
        述語
        このリストに関連付けられているローカルなリスト・マッピングの完全なIRI
        目的語
        「bノード」配列の最初の項目

7.6 プロセッサのステータス

前項でカバーした処理規則は、ドキュメントからできる限り多くのトリプルを抽出するように設計されています。RDFaプロセッサは、エラーが発生した場合にも処理を続行するように設計されています。例えば、接頭辞マッピングや用語の解決に失敗すると、RDFaプロセッサはトリプルの生成をスキップし、ドキュメントの処理を続行します。個々のRDFaプロセッサの警告やエラーを知ることは、著者にとって有益な場合があります。プロセッサ・グラフは、すべての参考情報、警告、およびエラー・メッセージをRDFaプロセッサからのトリプルとして捕捉するメカニズムとして設計されています。これらのステータスのトリプルは、RDFaのオーサリングや自動エラー検出を助けるために取得され、使用できます。

RDFaプロセッサがプロセッサ・グラフの生成をサポートしている場合、次の処理の問題が発生したときは、トリプルの集合を生成しなければなりません(MUST)。

RDFaによって、その他の実装固有のrdfa:Infordfa:Warning、またはrdfa:Errorのトリプルが生成されることがあります(MAY)。

7.6.1 プロセッサ・グラフへのアクセス

プロセッサ・グラフへのアクセスは、様々な方法で達成され、RDFaプロセッサの種類や開発者が利用しているアクセス方法に依存します。

SAXベースのプロセッサ、または関数やメソッドのコールバックを用いてトリプルの生成を報告するプロセッサは、イベント・ベースのRDFaプロセッサであると分類されます。イベント・ベースのRDFaプロセッサでは、ソフトウェアは、プロセッサ・グラフに対してトリプルが生成されたときに呼び出される関数やコールバックを開発者が登録できるようにしなければなりません(MUST)。コールバックは、生成されたトリプルがプロセッサ・グラフまたは出力グラフに属しているかどうかを判断できる限り、出力グラフに用いるものと同じでもかまいません(MAY)。

全グラフRDFaプロセッサ(whole-graph RDFa Processor)は、ドキュメント全体を処理し、処理完了後にのみトリプルへのアクセスを開発者に提供するRDFaプロセッサであると定義されます。このカテゴリに通常属するRDFaプロセッサは、RDF/XML、N3、TURTLE、またはN-Triplesの表記法を用いて1回の呼び出しで出力を表現します。全グラフRDFaプロセッサでは、RDFaプロセッサから出力グラフを取得したいのか、プロセッサ・グラフを取得したいのか、両方のグラフを1つの結合グラフとして取得したいのかを開発者が指定できなければなりません(MUST)。グラフの設定が指定されていない場合には、出力グラフを返さなければなりません(MUST)。

ウェブ・サービスRDFaプロセッサ(web service RDFa Processor)は、HTTP GET、POST、またはRDFaプロセッサのIRI上で同様のアクションを実行することによってドキュメントを処理できる任意のRDFaプロセッサであると定義されています。このクラスのRDFaプロセッサでは、ソフトウェアは、ウェブ・サービスから出力グラフを取得したいのか、プロセッサ・グラフを取得したいのか、両方のグラフを1つの結合グラフとして取得したいのかを呼び出し側が指定できなければなりません(MUST)。値を指定するためにrdfagraphクエリ・パラメータを用いなければなりません(MUST)。許容値は、任意の順序のoutputprocessor、または両方の値で、コンマで区切られています。グラフの設定が指定されていない場合には、出力グラフを返さなければなりません(MUST)。

7.6.2 プロセッサ・グラフの用語

相互運用性を確保するために、プロセッサ・グラフのコンテンツに対してコアな階層のクラスが定義されています。別々のエラーや警告は、個別の種類の資源(通常は、空白ノード)で、付加的なプロパティーによりエラーの条件や警告の詳細を示します。この仕様では、最上位レベルのクラスと、このドキュメントで明示的に定義しているエラーと警告の条件を参照するクラスのみを定義しています。RDFaプロセッサによって、その他の実装固有のサブクラスが定義されることがあります。

最上位レベルのクラスは、rdfa:Errorrdfa:Warning、およびrdfa:Infoであり、RDFa語彙の一部として定義しています。さらに、これらのクラスには1つのプロパティー、すなわちrdfa:contextが定義されており、それは、例えば、http応答、XPath情報、またはシンプルにRDFa資源に対するIRIなど、エラーに関する追加のコンテキストを提供します。このプロパティーの使用はオプションであり、この述語を用いて複数のトリプルを同じ主語に使用できます。最後に、エラーと警告のインスタンスは、dc:descriptiondc:dateのプロパティーを用いるべきです(SHOULD)。dc:descriptionは、短くて人間が読めるけれども実装依存のエラーの記述を提供すべきす。dc:dateは、エラーが検出された時刻を示すべきであり、可能な限り正確に、ありえるネットワーク・エラーなどの検出を可能にすることが推奨されます。

下記の例は、エラーの結果としてプロセッサ・グラフに最小限に表すべきトリプルを示しています(dc:description述語に対するリテラルのコンテンツは実装に依存します)。

例45
@prefix rdfa:    <http://www.w3.org/ns/rdfa#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix dc:      <http://purl.org/dc/terms/> .
[] a rdfa:DocumentError ;
   dc:description "The document could not be parsed due to parsing errors." ;
   dc:date "2010-06-30T13:40:23"^^xsd:dateTime .

少し複雑な例では、rdfa:contextプロパティーを利用して詳細情報を提供し、外部語彙を用いてHTTPのヘッダーやXPointerの情報を表します(プロセッサは、いかなる場合でもこれらの情報を持っているわけではない。つまり、これらのrdfa:contextの情報は必須ではないことに注意)。

例46
@prefix rdfa:    <http://www.w3.org/ns/rdfa#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix dc:      <http://purl.org/dc/terms/> .
@prefix ptr:     <http://www.w3.org/2009/pointers#> .
@prefix ht:      <http://www.w3.org/2006/http#> .
 
[] a rdfa:DocumentError ;
   dc:description "The document could not be parsed due to parsing errors." ;
   dc:date "2010-06-30T13:40:23"^^xsd:dateTime ;
   rdfa:context <http://www.example.org/doc> ;
   rdfa:context [
      a ptr:Pointer ;
      # Detailed xpointer/xpath information provided here to locate the error.
   ] ;
   rdfa:context [
      a ht:Response ;
      ht:responseCode <http://www.w3.org/2006/http#404>
      # The HTTP response headers on the request for the source file.
   ].

7.7 語彙拡張

プロセッサは、RDFa語彙拡張で記述しているとおり、制限されたRDFSとOWLの含意規則を利用して語彙拡張を行うことができます(MAY)。

8. RDFa処理の詳細

この項は非規範的です。

この項では、前項で説明した処理ステップの詳細な検証を行います。また、関連する一部のステップを明確にするのに役立ちえる例を含んでいます。

処理の鍵は、述語/目的語の組み合わせが検出されるたびにトリプルが生成されることです。生成される実際のトリプルには、以前に設定された可能性のある主語が含まれるため、これを現在の評価コンテキストで追跡し、親の主語と呼びます。明示的に設定されていなければ、その主語が現在のドキュメントのデフォルトになるため、述語/目的語の組み合わせは常に1つ以上のトリプルを生成するのに十分です。

述語を設定するための属性は、@rel@revおよび@propertyで、目的語を設定するための属性は、@resource@href@contentおよび@srcです。そして、@typeofは、述語と目的語の両方を同時に(主語を設定する他の属性がない場合に表示されている場合には主語も)設定するという点でユニークです。@contentが存在しないけれども@propertyが存在している場合には、インライン・コンテンツも目的語を設定することがあります。

この項には多くの例があります。例はすべてXHTML+RDFaで記述されています。しかし、説明はホスト言語に関係なく妥当です。

8.1 評価コンテキストの変更

8.1.1 現在の主語の設定

トリプルが作成されると、それは、評価コンテキストにより渡される新しい主語(主語を設定した現在の要素に規則がある場合)か親の主語のいずれかによって提供される主語資源に常に関連するでしょう。この項では、これらの値が設定される特定の方法に目を向けます。主語を設定する方法は関係ないため、この項では、新しい主語親の主語いずれかでありえる現在の主語という概念を用います。

8.1.1.1 現在のドキュメント

解析が始まると、現在の主語は、解析中のドキュメントのIRI、またはホスト言語が提供するメカニズム(例えば、(X)HTMLのbase要素)によって設定された値となります。これは、デフォルトで、ドキュメント内に含まれているあらゆるメタデータがドキュメント自体に関係していることを意味します。

例47
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Jo's Friends and Family Blog</title>
    <link rel="foaf:primaryTopic" href="#bbq" />
    <meta property="dc:creator" content="Jo" />
  </head>
  <body>
    ...
  </body>
</html>

これは次のトリプルを生成するでしょう。

例48
<> foaf:primaryTopic <#bbq> .
<> dc:creator "Jo" .

データがドキュメント内の別の場所に出現する可能性があります。

例49
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Jo's Blog</title>
  </head>
  <body>
    <h1><span property="dc:creator">Jo</span>'s blog</h1>
    <p>
      Welcome to my blog.
    </p>
  </body>
</html>

これによって、引き続き次のトリプルが生成されます。

例50
<> dc:creator "Jo" .

(X)HTMLでは、baseの値によって現在の主語の初期値が変わる可能性があります。

例51
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <base href="http://www.example.org/jo/blog" />
    <title>Jo's Friends and Family Blog</title>
    <link rel="foaf:primaryTopic" href="#bbq" />
    <meta property="dc:creator" content="Jo" />
  </head>
  <body>
    ...
  </body>
</html>

これで、ドキュメントが提供されているIRIに関わらず、RDFaプロセッサは次のトリプルを生成します。

例52
<http://www.example.org/jo/blog> foaf:primaryTopic <http://www.example.org//jo/blog#bbq> .
<http://www.example.org/jo/blog> dc:creator "Jo" .
8.1.1.2 @aboutの使用

処理が進むにつれ、任意の@aboutによって現在の主語が変わります。@aboutの値はIRIかCURIEです。それが相対IRIであれば、現在の基底の値に応じて解決する必要があります。これがステートメントにどのように影響を及ぼすかを説明するために、ドキュメントの先頭で行うのと同じようにドキュメントを参照するのではなく、このマークアップにおいてどのように(X)HTMLのbody要素内のプロパティーが新しいカレンダーのイベント・オブジェクトの一部になるかに注意してください。

例53
<html xmlns="http://www.w3.org/1999/xhtml"
      prefix="cal: http://www.w3.org/2002/12/cal/ical#">
  <head>
    <title>Jo's Friends and Family Blog</title>
    <link rel="foaf:primaryTopic" href="#bbq" />
    <meta property="dc:creator" content="Jo" />
  </head>
  <body>
    <p about="#bbq" typeof="cal:Vevent">
      I'm holding
      <span property="cal:summary">
        one last summer barbecue
      </span>,
      on
      <span property="cal:dtstart" content="2015-09-16T16:00:00-05:00" 
            datatype="xsd:dateTime">
        September 16th at 4pm
      </span>.
    </p>
  </body>
</html>

このマークアップにより、RDFaプロセッサは次のトリプルを生成します。

例54
<> foaf:primaryTopic <#bbq> .
<> dc:creator "Jo" .
<#bbq> rdf:type cal:Vevent .
<#bbq> cal:summary "one last summer barbecue" .
<#bbq> cal:dtstart "2015-09-16T16:00:00-05:00"^^xsd:dateTime .

現在の主語を設定するために、ウェブ・ページへの参照のみでなく、他の種類の資源を用いることもできます。お勧めはできませんが、電子メールのアドレスを用いて人を表すことができます。

例55
John knows
<a about="mailto:john@example.org"
  rel="foaf:knows" href="mailto:sue@example.org">Sue</a>.

Sue knows
<a about="mailto:sue@example.org"
  rel="foaf:knows" href="mailto:jim@example.org">Jim</a>.

これにより、次のトリプルが生成されます。

例56
<mailto:john@example.org> foaf:knows <mailto:sue@example.org> .
<mailto:sue@example.org> foaf:knows <mailto:jim@example.org> .

同様に、著者は画像に関するステートメントを出すことができます。

例57
<div about="photo1.jpg">
  this photo was taken by
  <span property="dc:creator">Mark Birbeck</span>
</div>

これにより、次のトリプルが生成されます。

例58
<photo1.jpg> dc:creator "Mark Birbeck" .
8.1.1.3 @typeofを用いた資源の型付け

@typeofは、トリプルの型付けを定義します。@typeofは、述語が常にrdf:typeであるため、述語を設定する他の方法とは異なる働きをします。つまり、プロセッサには型の値のみが必要です。問題は、これらの型付け情報をどの資源で取得するかです。

要素に@aboutがあれば、ステートメントに新しいコンテキストが作成され、その資源に型付け関係が定義されます。例えば、

例59
<div about="http://dbpedia.org/resource/Albert_Einstein" typeof="foaf:Person">
  <span property="foaf:name">Albert Einstein</span>
  <span property="foaf:givenName">Albert</span>
</div>

は、次のトリプルも作成します。

例60
<http://dbpedia.org/resource/Albert_Einstein> rdf:type foaf:Person .

@about属性は主要な型付けの資源です。それが要素に存在していれば、最優先度で@typeofの効果が決定されます。@aboutないけれども、例えば@resourceにより、可能な主語資源を定義するためにのみその要素が用いられている(つまり、@rel@rev@propertyない)場合、その資源が@aboutとまったく同じように、型付き資源に用いられます。

@relがあれば(そして、依然として@aboutがなければ)、@relによって定義されているトリプルの明示的な目的語が型付けされます。例えば、次の場合、

例61
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <div rel="dbp:birthPlace" 
      resource="http://dbpedia.org/resource/German_Empire"
      typeof="http://schema.org/Country">
  </div>
</div>

生成されるトリプルには、次も含まれます。

例62
<http://dbpedia.org/resource/German_Empire> rdf:type <http://schema.org/Country> .

最後に、他の属性が何も定義しない場合に備えて@typeofにはステートメントに新しいコンテキストを作成するという追加機能もあります。これには、新しいbノードの生成が含まれます(bノードの詳細については、下記を参照してください)。例えば、次のように、著者がFOAF語彙を用いて人に関するマークアップを作成したいけれども、その項目に対する明確な識別子がない場合、

例63
<div typeof="foaf:Person">
  <span property="foaf:name">Albert Einstein</span>
  <span property="foaf:givenName">Albert</span>
</div>

このマークアップは、次のような、foaf:Personという「型」と、名前(name)と名(given name)のプロパティーを持つbノードを作成します。

例64
_:a rdf:type foaf:Person .
_:a foaf:name "Albert Einstein" .
_:a foaf:givenName "Albert" .

この「分離型」の@typeofの使い方は、次の場合の省略形と見ることができます。

例65
<div resource="_:a" typeof="foaf:Person">
  <span property="foaf:name">Albert Einstein</span>
  <span property="foaf:givenName">Albert</span>
</div>

同様に、

例66
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <div rel="dbp:birthPlace" typeof="http://schema.org/Country">
    <span property="dbp:conventionalLongName">the German Empire</span>
  </div>
</div>

により、次が生成されます。

例67
<http://dbpedia.org/resource/Albert_Einstein"> dbp:birthPlace _:b .
_:b dbp:conventionalLongName "the German Empire" .
bノードは、プロセッサにのみ使用でき、外部のソフトウェアには使用できない一意の識別子です。内部で値を生成することにより、_:aのプロパティーを_:bとは異なるものとして追跡できます。しかし、これらの値を外部のソフトウェアに公開しないことで、その識別子を完全に制御できるだけでなく、項目に記述が追加作成されるのを防ぐことができます。
8.1.1.3.1 @property@typeofを用いた連鎖

連鎖に関する項で強調しているように、@property@rel(または@rev)の主な違いの1つは、前者は連鎖を導かないということです。この規則の唯一の例外は、要素に@typeofも存在している場合です。その場合、@propertyの効果は@relと同じです。例えば、前の例は、次のように記述できました。

例68
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <div property="dbp:birthPlace" typeof="http://schema.org/Country">
    <span property="dbp:conventionalLongName">the German Empire</span>
  </div>
</div>

これにより、以前と同じトリプルが生成されます。ここでもまた、@about@resourceのない@typeofは、新しいbノードの識別子を参照する追加の@resource属性の省略形と見ることができます。

8.1.1.4 @about@typeofも用いない主語の決定

前の2つの項で説明したように、@aboutは常に優先され、新しい主語がマークアップされますが、@aboutの値が提供されていない場合は、暗黙の識別子、つまりbノードが用いられますが、@typeofが同じ働きを行います。

しかし、@about@typeofのどちらも存在しない場合に、主語に到達できる方法はいくつかあります。そのうちの1つは、継承する値を明示的または暗黙的に設定し、包含しているステートメントから主語を「継承」することです。

8.1.1.4.1 @resourceからの主語の継承

継承される主語を設定する最も一般的な方法は、資源である目的語を親ステートメントに持つことです。German_Empireの長い名前が追加された前述の例に戻すと、そこでは次のマークアップを用いました。

例69
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <span property="foaf:name">Albert Einstein</span>
  <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  <div rel="dbp:birthPlace" resource="http://dbpedia.org/resource/German_Empire" />
  <span about="http://dbpedia.org/resource/German_Empire"
    property="dbp:conventionalLongName">the German Empire</span>
</div>

以前の例では、ドイツ帝国の主語と目的語は、目的語を設定する@aboutに依存し、@resourceを削除することで接続されていました。

例70
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <span property="foaf:name">Albert Einstein</span>
  <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  <div rel="dbp:birthPlace">
    <span about="http://dbpedia.org/resource/German_Empire"
      property="dbp:conventionalLongName">the German Empire</span>
  </div>
</div>

しかし、著者は、@aboutを削除し@resourceを残すことで同じ効果を達成することもできます。

例71
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <span property="foaf:name">Albert Einstein</span>
  <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  <div rel="dbp:birthPlace" resource="http://dbpedia.org/resource/German_Empire">
    <span property="dbp:conventionalLongName">the German Empire</span>
  </div>
</div>

この状況では、ドイツ帝国(@resource内の値)を表す目的語資源によって「含まれている」すべてのステートメントが同じ主語を持つことになり、著者がステートメントを簡単に追加できるようになります。

例72
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <span property="foaf:name">Albert Einstein</span>
  <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  <div rel="dbp:birthPlace" resource="http://dbpedia.org/resource/German_Empire">
    <span property="dbp:conventionalLongName">the German Empire</span>
    <span rel="dbp-owl:capital" resource="http://dbpedia.org/resource/Berlin" />
  </div>
</div>

RDFaプロセッサが生成するトリプルを見ると、実際にはステートメントのグループが2つあることがわかります。最初のグループは、それらを含む@aboutを参照するように設定されています。

例73
<http://dbpedia.org/resource/Albert_Einstein> foaf:name "Albert Einstein" .
<http://dbpedia.org/resource/Albert_Einstein> dbp:dateOfBirth "1879-03-14"^^xsd:date .
<http://dbpedia.org/resource/Albert_Einstein> dbp:birthPlace <http://dbpedia.org/resource/German_Empire> .

一方で、2番目のグループは、それらを含む@resourceを参照しています。

例74
<http://dbpedia.org/resource/German_Empire>
  dbp:conventionalLongName "the German Empire" .
<http://dbpedia.org/resource/German_Empire>
  dbp-owl:capital <http://dbpedia.org/resource/Berlin> .

ここで記述している同じ原理が@src@hrefに適用されることにも注意してください。

8.1.1.4.2 匿名の主語の継承

上記のように、著者は、主語と目的語を接続したいけれども、2つのステートメントに共通する資源(つまり、2番目のステートメントの主語である、最初のステートメントのオブジェクト)に指定することには関心がない場合があります。例えば、EinsteinがSpinoza(スピノザ)の影響を受けたことを示すために、次のマークアップを使用できます。

例75
<div about="http://dbpedia.org/resource/Baruch_Spinoza" rel="dbp-owl:influenced">
  <div about="http://dbpedia.org/resource/Albert_Einstein">
    <span property="foaf:name">Albert Einstein</span>
    <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  </div>
</div>

RDFaプロセッサは次のトリプルを生成するでしょう。

例76
<http://dbpedia.org/resource/Baruch_Spinoza>
  dbp-owl:influenced <http://dbpedia.org/resource/Albert_Einstein> .
<http://dbpedia.org/resource/Albert_Einstein> foaf:name "Albert Einstein" .
<http://dbpedia.org/resource/Albert_Einstein> dbp:dateOfBirth "1879-03-14"^^xsd:date .

しかし、著者は、Spinozaが1879年3月14日に生まれた、Albert Einsteinと称する何かに影響を与えたと簡単に述べることができます。

例77
<div about="http://dbpedia.org/resource/Baruch_Spinoza" rel="dbp-owl:influenced">
  <div>
    <span property="foaf:name">Albert Einstein</span>
    <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  </div>
</div>

Einsteinを「表す」項目は、それを識別するIRIがないため、RDF用語では匿名です。しかし、項目には自動的に生成されたbノードが付与され、すべての子ステートメントが帰属するのはこの識別子に対してです。

RDFaプロセッサは、次のトリプルを生成するでしょう。

例78
<http://dbpedia.org/resource/Baruch_Spinoza> dbp-owl:influenced _:a .
_:a foaf:name "Albert Einstein" .
_:a dbp:dateOfBirth "1879-03-14"^^xsd:date .

divは不要であり、この要素が削除されても、RDFaプロセッサは中間の目的語を作成することに注意してください。

例79
<div about="http://dbpedia.org/resource/Baruch_Spinoza" rel="dbp-owl:influenced">
  <span property="foaf:name">Albert Einstein</span>
  <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
</div>

別のパターンは、div保持して@relをこれに移動させることです。

例80
<div about="http://dbpedia.org/resource/Baruch_Spinoza">
  <div rel="dbp-owl:influenced">
    <span property="foaf:name">Albert Einstein</span>
    <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  </div>
</div>

マークアップの観点から見ると、この後者のレイアウトは、「未決のrel(hanging rel)」が目立つため、好ましいです。しかし、RDFaプロセッサの観点から見ると、これらのすべての順列(permutation)をサポートする必要があります。

8.2 不完全なトリプルの完全化

新しい主語の演算が行われると、未決の不完全なトリプルを完全にするためにもそれが用いられます。この状況は、著者が複数のステートメントを一緒に「連鎖」させたいときに発生します。例えば、著者は、Albert Einsteinがドイツ帝国で生まれたという次ようなステートメントを持っている可能性があります。

例81
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <span property="foaf:name">Albert Einstein</span>
  <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  <div rel="dbp:birthPlace" resource="http://dbpedia.org/resource/German_Empire" />
</div>

そして、この国の「長い名前」がドイツ帝国であるという追加のステートメントを持つことができます。

例82
<span about="http://dbpedia.org/resource/German_Empire"
  property="dbp:conventionalLongName">the German Empire</span>

RDFaにより、著者はこのステートメントを内蔵ユニットとして他のコンテキストに挿入できます。

例83
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <span property="foaf:name">Albert Einstein</span>
  <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  <div rel="dbp:birthPlace" resource="http://dbpedia.org/resource/German_Empire" />
  <span about="http://dbpedia.org/resource/German_Empire"
    property="dbp:conventionalLongName">the German Empire</span>
</div>

しかし、これによって、著者が不必要な繰り返しを避け、重複する識別子を「正規化する」ことも可能となります。この場合、それはドイツ帝国に関するものです。

例84
<div about="http://dbpedia.org/resource/Albert_Einstein">
  <span property="foaf:name">Albert Einstein</span>
  <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  <div rel="dbp:birthPlace">
    <span about="http://dbpedia.org/resource/German_Empire"
      property="dbp:conventionalLongName">the German Empire</span>
  </div>
</div>

これが生じた場合、「出生地」に対する@relはまだトリプルを生成していないため、「未決のrel」とみなされますが、これらの「不完全なトリプル」は次の行に出現する@aboutによって完全になります。したがって、最初のステップは、RDFaプロセッサが持つトリプルの2つの部分を格納することですが、目的語がありません。

例85
<http://dbpedia.org/resource/Albert_Einstein> dbp:birthPlace ? .

その後、処理が進むにつれて、RDFaプロセッサはドイツ帝国の長い名前に関するステートメントの主語に遭遇し、これを2つの方法で用います。まず、「不完全なトリプル」を完全にするために用います。

例86
<http://dbpedia.org/resource/Albert_Einstein> 
      dbp:birthPlace <http://dbpedia.org/resource/German_Empire> .

次に、独自のトリプルを生成するために用います。

例87
<http://dbpedia.org/resource/German_Empire> 
      dbp:conventionalLongName "the German Empire" .

@aboutが個々に出現することにより、不完全なトリプルが完全になることに注意してください。例えば、Albert Einsteinがドイツ帝国とスイスの両方に住居を持っていたという事実をマークアップするには、著者は@relの値を1つ指定し、その後で複数の@aboutの値とともに用いればよいだけです。

例88
<div about="http://dbpedia.org/resource/Albert_Einstein" rel="dbp-owl:residence">
  <span about="http://dbpedia.org/resource/German_Empire" />
  <span about="http://dbpedia.org/resource/Switzerland" />
</div>

この例には、不完全なトリプルが1つあります。

例89
<http://dbpedia.org/resource/Albert_Einstein> dbp-owl:residence ? .

プロセッサが@aboutの個々の値に遭遇すると、このトリプルは完全となり、次のようになります。

例90
<http://dbpedia.org/resource/Albert_Einstein>
  dbp-owl:residence <http://dbpedia.org/resource/German_Empire> .
<http://dbpedia.org/resource/Albert_Einstein>
  dbp-owl:residence <http://dbpedia.org/resource/Switzerland> .

これらの例は、@aboutでトリプルを完全にする方法を示していますが、同じ効果を持つ可能性のある他の状況もあります。例えば、@typeofで新しいbノードが作成されると(上記のように)、それは「不完全なトリプル」を完全にするために用いられます。SpinozaがEinsteinとSchopenhauer(ショーペンハウアー)の両方に影響を与えたことを示すために、次のマークアップを使用できます。

例91
<div about="http://dbpedia.org/resource/Baruch_Spinoza">
  <div rel="dbp-owl:influenced">
    <div typeof="foaf:Person">
      <span property="foaf:name">Albert Einstein</span>
      <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
    </div>
    <div typeof="foaf:Person">
      <span property="foaf:name">Arthur Schopenhauer</span>
      <span property="dbp:dateOfBirth" datatype="xsd:date">1788-02-22</span>
    </div>          
  </div>
</div>

まず、次の不完全なトリプルが格納されます。

例92
<http://dbpedia.org/resource/Baruch_Spinoza> dbp-owl:influenced ? .

次に、RDFaプロセッサが@typeofの2つの出現を処理するときに、それぞれにbノードが生成され、それは「不完全なトリプル」を完全にするためと、追加のステートメントの主語を設定するための両方に用います。

例93
<http://dbpedia.org/resource/Baruch_Spinoza"> dbp-owl:influenced _:a .
_:a rdf:type foaf:Person .
_:a foaf:name "Albert Einstein" .
_:a dbp:dateOfBirth "1879-03-14"^^xsd:date .
<http://dbpedia.org/resource/Baruch_Spinoza"> dbp-owl:influenced _:b .
_:b rdf:type foaf:Person .
_:b foaf:name "Arthur Schopenhauer" .
_:b dbp:dateOfBirth "1788-02-22"^^xsd:date .

@property@rel@revのいずれかが存在している場合も、トリプルは「完全」になります。しかし、@about@typeofが存在している状況とは異なり、すべての述語が1つのbノードに帰属します。

例94
<div about="http://dbpedia.org/resource/Baruch_Spinoza" rel="dbp-owl:influenced">
  <span property="foaf:name">Albert Einstein</span>
  <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span>
  <div rel="dbp-owl:residence">
    <span about="http://dbpedia.org/resource/German_Empire" />
    <span about="http://dbpedia.org/resource/Switzerland" />
  </div>
</div>

この例には2つの「未決のrel」があるため、「不完全なトリプル」が作成される状況も2つあります。処理は次のように進みます。最初に不完全なトリプルが格納されます。

例95
<http://dbpedia.org/resource/Baruch_Spinoza> dbp-owl:influenced ? .

次に、RDFaプロセッサは、foaf:namedbp:dateOfBirth、およびdbp-owl:residenceに対する述語の値を処理しますが、最初のものだけが「未決のrel」を「完全にする」必要があることに注意してください。そのため、foaf:nameを処理すると、次の2つのトリプルが生成されます。

例96
<http://dbpedia.org/resource/Baruch_Spinoza> dbp-owl:influenced _:a .
_:a foaf:name "Albert Einstein" .

しかし、dbp:dateOfBirthを処理すると、次の1つのみが生成されます。

例97
_:a dbp:dateOfBirth "1879-03-14"^^xsd:date .

dbp-owl:residenceの処理も同じbノードを用いますが、独自の「不完全なトリプル」も生成されることに注意してください。

例98
_:a dbp-owl:residence ? .

これまでのように、@aboutの2つの出現は、「不完全なトリプル」をそれぞれ1度完全にします。

例99
_:a dbp-owl:residence <http://dbpedia.org/resource/German_Empire> .
_:a dbp-owl:residence <http://dbpedia.org/resource/Switzerland> .

RDFaプロセッサが生成すべき一連のトリプルは、次のとおりです。

例100
<http://dbpedia.org/resource/Baruch_Spinoza> dbp-owl:influenced _:a .
_:a foaf:name "Albert Einstein" .
_:a dbp:dateOfBirth "1879-03-14"^^xsd:date .
_:a dbp-owl:residence <http://dbpedia.org/resource/German_Empire> .
_:a dbp-owl:residence <http://dbpedia.org/resource/Switzerland> .

8.3 目的語の解決

目的語に関しては、主語の解決、連鎖、評価コンテキストなどの説明の一部として前項で論じていますが、この項では、目的語についてより詳細に考察します。

IRI資源リテラルという2種類の目的語があります。

@property述語を表す場合、リテラルの目的語は、@contentまたは要素のインライン・テキストで設定できます。@contentの使用においては、リテラルにリッチなマークアップを含めることは禁じられています。要素のインライン・コンテンツが目的語を正確に表している場合は、ドキュメントは、@contentを用いてそのデータを複製するのではなく、それに依存すべきです。

IRI資源の目的語は、@rel@revの一方を用いて述語を表した後に、@href@resourceまたは@srcのうちの1つを用いて目的語資源を明示的に提供する、上記の連鎖技術を用いて入れ子の主語から、またはbノードから目的語を取得するかのいずれかで設定できます。あるいは@propertyを用いてIRI資源を定義することもできます。これには、@resource@href、または@srcが存在し、かつ@rel@rev@datatype、または@contentが存在していない要があります。

8.3.1 @property属性に対する目的語の解決

@propertyが存在していて、資源属性が存在していなければ、目的語リテラルが生成されます。@propertyは述語を提供し、次の項では、生成される実際のリテラルがどのように決定されるかについて説明します。

8.3.1.1 プレーン・リテラル

@contentを用いて、次のようにプレーン・リテラルを示すことができます。

例101
<meta about="http://internet-apps.blogspot.com/"
      property="dc:creator" content="Mark Birbeck" />

プレーン・リテラルは、要素のコンテンツを用いて指定することもできます。

例102
<span about="http://internet-apps.blogspot.com/"
      property="dc:creator">Mark Birbeck</span>

これらのいずれの例でも次のトリプルが得られます。

例103
<http://internet-apps.blogspot.com/> dc:creator "Mark Birbeck" .

@contentの値はどの要素のコンテンツよりも優先されるため、下記によって、上記と同じトリプルが得られます。

例104
<span about="http://internet-apps.blogspot.com/"
      property="dc:creator" content="Mark Birbeck">John Doe</span>
8.3.1.1.1 言語タグ

[RDF11-TESTCASES]からの次の例で示しているように、RDFでは、プレーン・リテラルは言語タグを持つことが許されています。

例105
<http://example.org/node> 
  <http://example.org/property> "chat"@fr .

RDFaでは、ホスト言語は、言語タグを設定するメカニズムを提供できます。例えば、XHTML+RDFa[XHTML-RDFA]では、プレーン・リテラルが@contentで指定されているか要素のインライン・テキストで指定されているかに関わらず、XMLの言語属性@xml:langまたは属性@langを用いてこの情報を追加します。

例106
<meta about="http://example.org/node"
  property="ex:property" xml:lang="fr" content="chat" />

言語の値は[XML10-4e]で定義されているとおりに継承できるため、次の構文により上記と同じトリプルが得られることに注意してください。

例107
<html xmlns="http://www.w3.org/1999/xhtml" 
      prefix="ex: http://www.example.com/ns/" xml:lang="fr">
  <head>
    <title xml:lang="en">Example</title>
    <meta about="http://example.org/node"
      property="ex:property" content="chat" />
  </head>
  ...
</html>
8.3.1.2 型付きリテラル

@datatypeを用いてリテラルにデータ型を付与できます。

これは、RDFaで次のように表すことができます。

例108
<span property="cal:dtstart" content="2015-09-16T16:00:00-05:00" 
      datatype="xsd:dateTime">
  September 16th at 4pm
</span>.

このマークアップが生成するトリプルでは、リテラルの後にデータ型が含まれます。

例109
<> cal:dtstart "2015-09-16T16:00:00-05:00"^^xsd:dateTime .
8.3.1.3 XMLリテラル

XMLドキュメントは、その属性にXMLマークアップを含めることができず、これは@content内でXMLを表現できないことを意味します(下記では、XMLパーサーにエラーが生じます)。

例110
<head>
  <meta property="dc:title"
    content="E = mc<sup>2</sup>: The Most Urgent Problem of Our Time" />
</head>

したがって、RDFaは@datatypeを用いてXMLリテラルを表すための任意のマークアップの使用をサポートしています。

例111
<h2 property="dc:title" datatype="rdf:XMLLiteral">
  E = mc<sup>2</sup>: The Most Urgent Problem of Our Time
</h2>

これは、XMLをリテラルに保存して、次のトリプルを生成します。

例112
<> dc:title "E = mc<sup>2</sup>: The Most Urgent Problem of Our Time"^^rdf:XMLLiteral .

これには、rdfという接頭辞に対するIRIマッピングが定義されている必要があります。

ここで示した例では、sup要素は実際にはリテラルの意味の一部ですが、余分なマークアップが何も意味せず、それゆえ無視できる場合もあるでしょう。その場合は、@datatype属性を省略するか、空の@datatype値を指定すると、プレーン・リテラルを作成できます。

例113
<p>You searched for <strong>Einstein</strong>:</p>
<p about="http://dbpedia.org/resource/Albert_Einstein">
  <span property="foaf:name" datatype="">Albert <strong>Einstein</strong></span>
  (b. March 14, 1879, d. April 18, 1955) was a German-born theoretical physicist.
</p>

このページが表示されると、ユーザが検索した用語が強調表示されます。@datatypeを無し(nothing)に設定すると、データは確実にプレーン・リテラルとして解釈され、次のトリプルが得られます。

例114
<http://dbpedia.org/resource/Albert_Einstein> foaf:name "Albert Einstein" .

このXMLリテラルの値は、RDFa要素の値の排他的正規化[XML-EXC-C14N]です。

8.3.2 IRIの目的語の解決

資源である目的語の処理を統制する規則のほとんどは、主語の確立に重要であるため、上記で示した処理の記述で見つけることができます。この項は、一般的な概念や欠けていた可能性のある事項を浮き彫りにすることを目的としています。

@relまたは@revが存在していれば、1つ以上のIRIの目的語が必要です。@href@resource@srcとともに用いるか、これらの属性が存在しない場合は、入れ子のステートメントの主語の値とともに用いると、各属性によりトリプルが生成されます。

@relまたは@revが存在しておらず、@datatype@contentも存在していなければ、@property属性を@href@resourceまたは@srcとともに用いるとトリプルが生成されます。(@propertyに関する特殊なケースに関しては、@property@typeofの項も参照してください。)

@rel@revは本質的にお互いの逆です。@relは、主語としての現在の主語と、目的語としての現在の目的語資源の間の関係を確立し、@revはその正反対で、主語としての現在の目的語資源と、目的語としての現在の主語を用います。

8.3.2.1 @resourceを用いた目的語の設定

RDFaは、ステートメントの目的語を設定する方法として@resource属性を提供しています。これは、ナビゲート可能なリンクではない資源を参照する場合に特に有用です。

例115
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>On Crime and Punishment</title>
    <base href="http://www.example.com/candp.xhtml" />
  </head>
  <body>
    <blockquote about="#q1" rel="dc:source" resource="urn:ISBN:0140449132" >
      <p id="q1">
        Rodion Romanovitch! My dear friend! If you go on in this way
        you will go mad, I am positive! Drink, pray, if only a few drops!
      </p>
    </blockquote>
  </body>
</html>

blockquote要素は、次のトリプルを生成します。

例116
<http://www.example.com/candp.xhtml#q1>
  <http://purl.org/dc/terms/source> <urn:ISBN:0140449132> .

上記の例では、@relの代わりに@propertyを用いて、同じトリプルを生成できたことに注意してください。

8.3.2.2 @hrefまたは@srcを用いた目的語の設定

@resourceが存在していなければ、@hrefまたは@srcが目的語の設定に関して次の優先順となります。

述語が@relで表されていれば、RDFaステートメントの要素の@hrefまたは@srcを用いてIRI参照で目的語を識別します。これらの型はIRIです。

例117
<link about="mailto:john@example.org"
      rel="foaf:knows" href="mailto:sue@example.org" />

1つの要素で@rel@revの両方を同時に用いることもできます。これは、例えば、ある写真がMark(マーク)によって撮影されているけれども、その写真は彼を描写したものでもある場合など、2つの事物が互いに2つの異なる関係にある場合に特に便利で、

例118
<img about="http://www.blogger.com/profile/1109404"
    src="photo1.jpg" rev="dc:creator" rel="foaf:img"/>

これは、次の2つのトリプルを生成します。

例119
<photo1.jpg> 
  dc:creator <http://www.blogger.com/profile/1109404> .
<http://www.blogger.com/profile/1109404> 
  foaf:img <photo1.jpg> .
8.3.2.3 不完全なトリプル

@relまたは@revでトリプルの述語が表されているけれども、@href@src、または@resourceが同じ要素に存在していないければ、「未決のrel」が存在します。これにより、現在の主語と可能性のあるすべての述語(それが「正方向(forwards)」、つまり@relの値であるか、そうではない、つまり@revの値であるかを示す指示子が付く)は、「不完全なトリプル」として格納され、それらのトリプルを「完全」にするために使用できる主語の発見が保留されます。

このプロセスの詳細は、「不完全なトリプル」の完全化で記述しています。

8.4 リストの生成

RDFグラフはトリプルのコレクションです。これは、同じ主語と述語を共有する2つのトリプルがそのグラフに含まれている場合も同様です。

例120
<http://www.example.com> <http://www.example.com/predicate> "first object", "second object" ;

例えば、これらのトリプルが含まれているデータベースにクエリを行う場合に、アプリケーションが2つのトリプルの相対的な順序を信頼する方法はありません。ほとんどのアプリケーションやデータ・セットでは、これは問題ありませんが、順序が重要な場合もあります。典型的なケースは出版物です。本や記事に何人かの共著者がいる場合は、著者の順序は重要でありえます。

RDFには、合意されたセマンティックな順序を持つ定義済みの述語の集合があります。例えば、「Ben Adida、Mark Birbeck、Ivan HermanによるSemantic Annotation and Retrieval」という出版物は、この用語を用いて、RDFトリプルで次のように記述できます。

例121
@prefix bibo:  <http://purl.org/ontology/bibo/> .
@prefix dc:    <http://purl.org/dc/terms/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
[ a bibo:Chapter ;
  dc:title "Semantic Annotation and Retrieval" ;
  dc:creator [
    rdf:first <http://ben.adida.net/#me ;
    rdf:rest [
      rdf:first <http://twitter.com/markbirbeck> ;
      rdf:rest [
        rdf:first <http://www.ivan-herman.net/foaf#me> ;
        rdf:rest rdf:nil .
      ] .
    ] .
  ] .
	...
]

これは、3人の著者に対する「順序」の概念を伝えています。確かに、これはあまり読みやすくはありません。しかし、Turtleは、これらの構造に対する構文の省略形を有しています。

例122
@prefix bibo:  <http://purl.org/ontology/bibo/> .
@prefix dc:    <http://purl.org/dc/terms/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
[ a bibo:Chapter ;
  dc:title "Semantic Annotation and Retrieval" ; 
  dc:creator 
  ( <http://ben.adida.net/#me>
    <http://twitter.com/markbirbeck>
    <http://www.ivan-herman.net/foaf#me> 
  ) .
  ...
]

RDFの述語であるrdf:firstrdf:rest、および特殊な資源rdf:nilを用いて、RDFaで同じ構造を再現することももちろん可能です。しかし、これを簡単にするために、RDFaでは@inlistが提供されています。この属性が示すのは、その要素で生成された目的語をリストに入れるべきであるということであり、そのリストは共通する述語と主語で用いられます。以前の構造がRDFaではどのようになるかは次のとおりです。

例123
<p prefix="bibo: http://purl.org/ontology/bibo/ dc: http://purl.org/dc/terms/" typeof="bibo:Chapter">
  "<span property="dc:title">Semantic Annotation and Retrieval</span>" by
   <a inlist="" property="dc:creator" 
                href="http://ben.adida.net/#me">Ben Adida</a>,
   <a inlist="" property="dc:creator" 
                href="http://twitter.com/markbirbeck">Mark Birbeck</a>, and
   <a inlist="" property="dc:creator" 
                href="http://www.ivan-herman.net/foaf#me">Ivan Herman</a>. 
</p>

リスト内の順序は、ドキュメントの順序によって決まることに注意してください。(@inlistの値は関係なく、その存在のみが関係します。)

リストにはリテラルのみでなく、IRIも含めることができます。例えば、3人の共著者のうち2人が、著者のリストでFOAFのアドレスを公表することを決定することができます。

例124
<p prefix="bibo: http://purl.org/ontology/bibo/ dc: http://purl.org/dc/terms/" typeof="bibo:Chapter">
  "<span property="dc:title">Semantic Annotation and Retrieval</span>", by
  <span inlist="" property="dc:creator" resource="http://ben.adida.net/#me">Ben Adida</span>,
  <span inlist="" property="dc:creator">Mark Birbeck</span>, and
  <span inlist="" property="dc:creator" resource="http://www.ivan-herman.net/foaf#me">Ivan Herman</span>.
</p>

これは、次を生成します。

例125
@prefix bibo:  <http://purl.org/ontology/bibo/> .
@prefix dc:    <http://purl.org/dc/terms/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
[ a bibo:Chapter ;
  dc:title "Semantic Annotation and Retrieval" ;
  dc:creator ( <http://ben.adida.net/#me> "Mark Birbeck" <http://www.ivan-herman.net/foaf#me> ) .
  ...
]

上記の例では、@relを用いて同じトリプルに正確に導くことができました。

例126
<p prefix="bibo: http://purl.org/ontology/bibo/ dc: http://purl.org/dc/terms/" typeof="bibo:Chapter">
  "<span property="dc:title">Semantic Annotation and Retrieval</span>", by
  <span inlist="" rel="dc:creator" resource="http://ben.adida.net/#me">Ben Adida</span>,
  <span inlist="" property="dc:creator">Mark Birbeck</span>, and
  <span inlist="" rel="dc:creator" resource="http://www.ivan-herman.net/foaf#me">Ivan Herman</span>.
</p>

不完全なトリプルは、すべてのリスト要素がリテラルではなく資源であれば、リストと組み合わせて用いることもできます。例えば、前回の例は、今回は3人の著者のすべてをFOAFプロファイルに参照すると、次のように記述できます。

例127
<p prefix="bibo: http://purl.org/ontology/bibo/ dc: http://purl.org/dc/terms/" typeof="bibo:Chapter">
  "<span property="dc:title">Semantic Annotation and Retrieval</span>", by
   <span rel="dc:creator" inlist="">
     <a href="http://ben.adida.net/#me">Ben Adida</a>,
     <a href="http://internet-apps.blogspot.com/2008/03/my-profile.html#me">Mark Birbeck</a>, and
     <a href="http://www.ivan-herman.net/foaf#me">Ivan Herman</a>.
   </span>
  </p>

これは、次のような結果となります。

例128
@prefix bibo:  <http://purl.org/ontology/bibo/> .
@prefix dc:    <http://purl.org/dc/terms/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
[ a bibo:Chapter ;
  dc:title "Semantic Annotation and Retrieval" ;
  dc:creator ( <http://ben.adida.net/#me>
               <http://internet-apps.blogspot.com/2008/03/my-profile.html#me>
               <http://www.ivan-herman.net/foaf#me> ) .
  ...
]

@inlistなしに、次を用いて、空のリストを表現することも可能であることに注意してください。

例129
<span rel="prop" resource="rdf:nil"/>

9. RDFa初期コンテキスト

RDFaは、ホスト言語が初期コンテキストを定義することを認めています。そのコンテキストとは、用語、接頭辞マッピング、および/またはデフォルトの語彙宣言のコレクションです。初期コンテキストは、パーサーが本来知っているものであるか、外部ドキュメントとしてロードして処理するかのどちらかです。このドキュメントは、承認済みのRDFaホスト言語(現在は、XML+RDFa、XHTML+RDFa[XHTML-RDFA]、HTML+RDFa[HTML-RDFA)で定義されているものでなければなりません(MUST)。他の形式(例えば、RDF/XML[RDF-SYNTAX-GRAMMAR]やTurtle[TURTLE])で定義することもできます(MAY)。初期コンテキストのドキュメントが処理されると、次のような評価が行われます。

  1. コンテンツを(その文書型の処理規則に従って)解析し、トリプルを抽出してそのIRIに関連付けられているコレクションに含む。注: このトリプルを、他のIRIから抽出されたトリプルと混在させてはならない(MUST NOT)。
  2. 値がrdfa:prefixrdfa:uriである述語の対を持つ主語ごとに、rdfa:prefix目的語リテラル(キー)からrdfa:uri目的語リテラル(値)へのキー-値(key-value)マッピングを作成する。「接頭辞」要素を小文字に変換した後に、このマッピングを初期評価コンテキストIRIマッピングのリストに追加する。
  3. 値がrdfa:termrdfa:uriである述語の対を持つ主語ごとに、rdfa:term目的語リテラル(キー)からrdfa:uri目的語リテラル(値)へのキー-値(key-value)マッピングを作成する。このマッピングを初期評価コンテキスト用語マッピングに追加する。
  4. 述語がrdfa:vocabularyである抽出されたトリプルについては、初期評価コンテキストデフォルトの語彙rdfa:vocabulary述語の目的語リテラルとなるように定義する。

RDFシリアル化を用いてRDFa初期コンテキストを定義する場合は、上記の語彙用語を用いてコンテキストの要素を宣言しなければなりません(MUST)。

このメカニズムにより取得した関連するトリプルをキャッシュすることが推奨されます(RECOMMENDED)。実装には有名で安定したRDFa初期コンテキストの定義を組み込むことが推奨されます(RECOMMENDED)。

  • rdfa:uri述語に対する目的語リテラルは、絶対IRIでなければならない(MUST)。
  • rdfa:term述語に対する目的語リテラルは、用語の生成規則と一致しなければならない(MUST)。
  • rdfa:prefix述語に対する目的語リテラルは、接頭辞の生成規則と一致しなければならない。
  • rdfa:vocabulary述語に対する目的語リテラルは、絶対IRIでなければならない(MUST)。
  • 目的語の1つがリテラルでなく、関連する生成規則と一致しない場合、rdfa:vocabulary述語が複数あれば、または同じ主語を共有する追加のrdfa:uriまたはrdfa:term述語があれば、RDFaプロセッサは、関連するマッピングを作成してはならない(MUST NOT)。

10. RDFa語彙拡張

RDFaはRDFに基づいているため、データに関するより多くの知識を得るために、RDF語彙のセマンティクスを使用できます。語彙、プロパティー、クラスは、IRIで識別され、それによって発見可能となります。これらのIRIの位置で公開されているRDFデータを取得し、特定のセマンティクスを用いているプロパティーとクラスの記述を適用できます。

RDFa語彙拡張は、処理モデルで記述されている通常の処理ステップの完了後に追加できるオプションの処理ステップです。語彙拡張は、参照される語彙に記述されている規則とプロパティー/クラス関係に基づいて出力グラフにトリプルを追加するOWL含意[OWL2-OVERVIEW]の非常に小さなサブセットに依存します。語彙拡張は、例えば、OWL 2 RL推論システムを含む、より大きなRDFツール・セットの一部として実行できます(MAY)。あるいは、順序の処理ステップ2で出力グラフに追加された語彙データを用いて、出力グラフが生成された後に、またはRDFaプロセッサによる最後の処理ステップとして、別個の専用の(例えば、規則ベースの)推論システムを用いて拡張することもできます(MAY)。

これらのセマンティクスによって含意される推論されたステートメントを拡張することにより、一般化されたデータを、RDFaを組み込んだデータのその後の使用のために提供すると非常に有用でありえます。これにより、有名な語彙を拡張して、それらのプロパティーを出力グラフに自動的に追加する既存の語彙が提供されることになります。例えば、クリエイティブ・コモンズ語彙の名前空間ドキュメント、すなわちhttp://creativecommons.org/nsは、cc:licensedc:licenseのサブプロパティーであると定義しています。@vocab属性を用いて、ライセンス情報を次のように記述できます。

例130
This document is licensed under the 
<a vocab="http://creativecommons.org/ns#"
   rel="license"
   href="http://creativecommons.org/licenses/by-nc-nd/3.0/">
   Creative Commons By-NC-ND License
</a>.

これは、次の出力グラフになります。

例131
@prefix cc:    <http://creativecommons.org/ns#> .
@prefix rdfa:  <http://www.w3.org/ns/rdfa#> .
<> cc:license          <http://creativecommons.org/licenses/by-nc-nd/3.0/> ;
   rdfa:usesVocabulary <http://creativecommons.org/ns#> .

語彙拡張後、次が出力グラフに含まれます。

例132
@prefix cc:    <http://creativecommons.org/ns#> .
@prefix rdfa:  <http://www.w3.org/ns/rdfa#> .
@prefix dc:    <http://purl.org/dc/terms/> .
<> cc:license          <http://creativecommons.org/licenses/by-nc-nd/3.0/>;
   dc:license          <http://creativecommons.org/licenses/by-nc-nd/3.0/> ;
   rdfa:usesVocabulary  <http://creativecommons.org/ns#> .

他の語彙、特に複数の語彙に関係を提供することを意図したものを公開者が定義することもでき、それによって1つの名前空間で用語を使用できるようになり、その結果、他の主要な語彙のプロパティーおよび/またはクラスがインポートされるようになります。これは、データがより広く検索できるようになるため、公開者にとって有益であり、有名な語彙の参照が促進されます。

10.1 RDFa語彙拡張の詳細

この項は非規範的です。

順序で定義されている処理ステップに従って出力グラフが生成されると、プロセッサはその出力グラフで以下の処理ステップを実行できます(MAY)。それは、RDFaプロセッサの語彙拡張制御で規定されているように、プロセッサのユーザが明示的にそれを要求した場合にのみ、実行しなければなりません。

語彙グラフは、次のように作成されます。現在のドキュメントの(基底)IRIの主語と、rdfa:usesVocabularyの述語を持つ出力グラフの個々の目的語IRIが逆参照されます。逆参照によってRDFグラフのシリアル化が行われる場合、そのシリアル化が解析され、その結果のグラフが語彙グラフと統合されます。(語彙拡張が可能なRDFaプロセッサは、RDFaでシリアル化されたRDFグラフを受け入れなければならず(MUST)、RDF/XML[RDF-SYNTAX-GRAMMAR]やTurtle [TURTLE]などの標準的なRDFのシリアル化形式を受け入れるべきです(SHOULD)。)

第2ステップで特定の語彙がRDFaでシリアル化された場合、その特定のグラフはそれ自体で語彙拡張を果たすことは期待できないことに注意してください。

次に、語彙拡張は下記のように実行されます。

  1. プロセッサは、RDFa語彙含意を用いてデフォルトのグラフと語彙グラフを統合したものに対して動作する。
  2. この含意を用いることで、出力グラフから推論された新しいトリプルを(拡張された)出力グラフに追加します。プロセッサは、語彙グラフにのみ出現するトリプルを追加すべきではありません(SHOULD NOT)。
第2ステップの目標は、出力グラフへの「公理」(例えば、サブプロパティーの定義)の追加を避けることです。アプリケーションは通常、この追加情報を必要としません。

10.1.1 RDFa語彙含意

語彙処理のために、RDFaは、OWL語彙の非常に限定されたサブセットを用いるとともに、OWLのRDFベースのセマンティクス[OWL2-RDF-BASED-SEMANTICS]に基づきます。RDFa語彙含意は、次の用語を用います。

  • rdf:type
  • rdfs:subClassOf
  • rdfs:subPropertyOf
  • owl:equivalentClass
  • owl:equivalentProperty

RDFaの語彙含意は、個体の含意のみを考慮します(すなわち、そのプロパティーやクラス自体で推論できる関係の含意ではない)。

RDFa含意の正式な定義は、一般的なOWL 2のセマンティクスを参照しますが、実用的な実装では、規則([OWL2-PROFILES]の4.3項)で表されているOWL 2 RLプロファイルの含意のサブセットに依拠することができます。関連する規則は、[OWL2-PROFILES]の4.3項のIDの規則を用いた、prp-spo1prp-eqp1prp-eqp2cax-scocax-eqc1、およびcax-eqc2です。

この項で記述している含意は、RDFaの最小限有効なレベルです。もちろん、プロセッサは、例えば、完全なRDFS[RDF11-MT]やOWL[OWL2-OVERVIEW]などの含意を含む、より強力な含意レジームへの準拠を選択することもできます。これらの含意を用いて、アプリケーションは、プロパティーのrdfs:rangeをチェックすることにより、データ型の検証を実行したり、例えば、OWLのプロパティー連鎖によって提供される高度な機能を用いて語彙をさらに連結したりすることができます。

10.2 RDFaプロセッサの語彙拡張制御

適合するRDFaプロセッサが語彙拡張を提供することは必須ではありません。

RDFaプロセッサが語彙拡張を提供している場合、それはデフォルトで実行されてはなりません(MUST NOT)。その代わりに、プロセッサは、オプションであるvocab_expansionを提供しなければならず(MUST)、それは、用いると、出力グラフを返す前にRDFaプロセッサが語彙拡張を実行するように指示します。

語彙拡張は、語彙グラフとOWL 2の含意規則で記述されますが、プロセッサは同等の結果を得られるプロセスを自由に使用できます。

10.2.1 RDFa語彙の実装と公開に関する注

この項は非規範的です。

RDFaプロセッサに関しては、このメカニズムにより検索された関連するグラフをキャッシュすることが推奨されます(RECOMMENDED)。キャッシュは、通常、有効期限やキャッシュ制御などのHTTP応答ヘッダーに基づきます。

語彙の公開者に関しては、語彙に対するIRIは逆参照可能であるべきで(SHOULD)、語彙の記述を含んだRDFグラフを返すべきです。この語彙の記述は、RDFaでエンコードを行って利用できるべきで(SHOULD)、他のRDFシリアル化構文(様々な形式の中から選択するために内容交渉を用いて)でも利用できます(MAY)。可能であれば、語彙の記述に、他の有名な語彙に語彙の用語をリンクするサブプロパティーとサブクラスのステートメントを含むべきです(SHOULD)。最後に、HTTP応答には、キャッシュ制御に使用できる有効期限などのフィールドを含むべきです(SHOULD)。

A. CURIEのデータ型

マークアップ言語におけるCURIEの使用を容易にするために、この仕様では、XHTMLデータ型空間(http://www.w3.org/1999/xhtml/datatypes/)にいくつかの追加のデータ型を定義しています。マークアップ言語にこれらの定義をインポートしたい場合は、それをスキーマ文法に関する「データ型」ファイルで見つけることができます。

具体的には、次のデータ型が定義されています。

CURIE
単一のcurie
CURIEs
空白区切りのCURIEのリスト
CURIEorIRI
CURIEまたはIRI
CURIEorIRIs
空白区切りのCURIEorIRIのリスト
SafeCURIE
単一のsafe_curie
SafeCURIEorCURIEorIRI
単一のSafeCURIEまたはCURIEorIRI
SafeCURIEorCURIEorIRIs
空白区切りのSafeCURIEorCURIEorIRIのリスト
TERM
単一のterm
TERMorCURIEorAbsIRI
TERMまたはCURIEorIRI
TERMorCURIEorAbsIRIs
空白区切りのTERMorCURIEorAbsIRIのリスト

A.1 XMLスキーマの定義

この項は非規範的です。

これらのデータ型に対する、次の参考情報のXML DTDの定義は、例として掲載しています。

例133
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns="http://www.w3.org/1999/xhtml/datatypes/"
 xmlns:xh11d="http://www.w3.org/1999/xhtml/datatypes/"
 targetNamespace="http://www.w3.org/1999/xhtml/datatypes/"
 elementFormDefault="qualified"
>
    <xs:simpleType name="CURIE">
        <xs:restriction base="xs:string">
            <xs:pattern value="(([\i-[:]][\c-[:]]*)?:)?(/[^\s/][^\s]*|[^\s/][^\s]*|[^\s]?)" />
            <xs:minLength value="1"/>
        </xs:restriction>
    </xs:simpleType> 

    <xs:simpleType name="CURIEs">
        <xs:list itemType="xh11d:CURIE"/>
    </xs:simpleType>

    <xs:simpleType name="SafeCURIE">
        <xs:restriction base="xs:string">
            <xs:pattern value="\[(([\i-[:]][\c-[:]]*)?:)?(/[^\s/][^\s]*|[^\s/][^\s]*|[^\s]?)\]" />
            <xs:minLength value="3"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="SafeCURIEs">
        <xs:list itemType="xh11d:SafeCURIE"/>
    </xs:simpleType>

    <xs:simpleType name="TERM">
      <xs:restriction base="xs:Name">
        <xs:pattern value="[\i-[:]][/\c-[:]]*" />
      </xs:restriction>
    </xs:simpleType>
    

    <xs:simpleType name="CURIEorIRI">
        <xs:union memberTypes="xh11d:CURIE xsd:anyURI" />
    </xs:simpleType>

    <xs:simpleType name="CURIEorIRIs">
        <xs:list itemType="xh11d:CURIEorIRI"/>
    </xs:simpleType>

    <xs:simpleType name="SafeCURIEorCURIEorIRI">
        <xs:union memberTypes="xh11d:SafeCURIE xh11d:CURIE xsd:anyURI" />
    </xs:simpleType>

    <xs:simpleType name="SafeCURIEorCURIEorIRIs">
        <xs:list itemType="xh11d:SafeCURIEorCURIEorIRI"/>
    </xs:simpleType>

    <xs:simpleType name='AbsIRI'>
        <xs:restriction base='xs:string'>
            <xs:pattern value="[\i-[:]][\c-[:]]+:.+" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="TERMorCURIEorAbsIRI">
        <xs:union memberTypes="xh11d:TERM xh11d:CURIE xh11d:AbsIRI" />
    </xs:simpleType>

    <xs:simpleType name="TERMorCURIEorAbsIRIs">
        <xs:list itemType="xh11d:SafeCURIEorCURIEorAbsIRI"/>
    </xs:simpleType>
</xs:schema>

A.2 XML DTDの定義

この項は非規範的です。

これらのデータ型に対する、次の参考情報のXML DTDの定義は、例として掲載しています。

例134
<!ENTITY % CURIE.datatype "CDATA" >
<!ENTITY % CURIEs.datatype "CDATA" >
<!ENTITY % CURIEorIRI.datatype "CDATA" >
<!ENTITY % CURIEorIRIs.datatype "CDATA" >
<!ENTITY % SafeCURIEorCURIEorIRI.datatype "CDATA" >
<!ENTITY % SafeCURIEorCURIEorIRIs.datatype "CDATA" >
<!ENTITY % TERMorCURIEorAbsIRI.datatype "CDATA" >
<!ENTITY % TERMorCURIEorAbsIRIs.datatype "CDATA" >

B. RDFa語彙

RDFa語彙には3つの役割があります。それには、初期コンテキストのドキュメントの用語と接頭辞を定義するための述語が含まれ、プロセッサ・グラフに含まれている可能性のあるメッセージに対するクラスと述語が含まれ、最後に、語彙処理に必要な述語が含まれます。語彙のIRIはhttp://www.w3.org/ns/rdfa#です。このドキュメントで用いている通常の接頭辞はrdfaです。

この語彙仕様は、XHTML+RDFa 1.1Turtle、およびRDF/XMLの形式で利用できます。

B.1 用語と接頭辞の割り当て

RDFaの語彙には、次のトリプルが含まれています(ここではTurtle[TURTLE]形式で示しています)。

例135
@prefix dc:      <http://purl.org/dc/terms/> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdfa:    <http://www.w3.org/ns/rdfa#> .
@prefix foaf:    <http://xmlns.com/foaf/0.1/> .

<http://www.w3.org/ns/rdfa#> a owl:Ontology .

rdfa:PrefixOrTermMapping a rdfs:Class, owl:Class ;
    dc:description "The top level class for prefix or term mappings." .
    
rdfa:PrefixMapping dc:description "The class for prefix mappings." .
    rdfs:subClassOf rdfa:PrefixOrTermMapping .
    
rdfa:TermMapping dc:description "The class for term mappings." .
    rdfs:subClassOf rdfa:PrefixOrTermMapping .

rdfa:prefix a rdf:Property, owl:DatatypeProperty ;
     rdfs:domain rdfa:PrefixMapping ;
     dc:description "Defines a prefix mapping for an IRI; the value is supposed to be a NMTOKEN." . 

rdfa:term a rdf:Property, owl:DatatypeProperty ;
     rdfs:domain rdfa:TermMapping ;
     dc:description "Defines a term mapping for an IRI; the value is supposed to be a NMTOKEN." . 

rdfa:uri a rdf:Property, owl:DatatypeProperty ;
     rdfs:domain rdfa:PrefixOrTermMapping ;
     dc:description """Defines the IRI for either a prefix or a term mapping;
        the value is supposed to be an absolute IRI.""" . 

rdfa:vocabulary a rdf:Property, owl:DatatypeProperty ;
     dc:description """Defines an IRI to be used as a default vocabulary;
        the value is can be any string; for documentation purposes it is advised to use
        the string ‘true’ or ‘True’.""" . 

これらの述語は、特定のホスト言語の初期コンテキストを定義するために使用できます。

これらの述語は、IRIの文字列とその使用法を、例えば空白ノードの一部として、接頭辞および/または用語の形で「対」にするために用います。例は次のようなものでありえます。

例136
[] rdfa:uri     "http://xmlns.com/foaf/0.1/name" ;
   rdfa:prefix  "foaf" . 

これは、FOAF IRIに対する接頭辞を定義します。

B.2 プロセッサ・グラフのレポート

語彙には、次の用語の定義が含まれています(ここではTurtle[TURTLE]形式で示しています)。

例137
@prefix dc:      <http://purl.org/dc/terms/> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdfa:    <http://www.w3.org/ns/rdfa#> .

rdfa:PGClass a rdfs:Class, owl:Class;
    dc:description "The top level class of the hierarchy." .

rdfa:Error dcterms:description "The class for all error conditions.";
    rdfs:subClassOf rdfa:PGClass .

rdfa:Warning dcterms:description "The class for all warnings.";
    rdfs:subClassOf rdfa:PGClass .

rdfa:Info dcterms:description "The class for all informations.";
    rdfs:subClassOf rdfa:PGClass .

rdfa:DocumentError dc:description "An error condition to be used when the document
    fails to be fully processed as a result of non-conformant host language markup.";
    rdfs:subClassOf rdfa:Error .

rdfa:VocabReferenceError dc:description "A warning to be used
    when the value of a @vocab attribute cannot be dereferenced, hence the vocabulary expansion
    cannot be completed.";
    rdfs:subClassOf rdfa:Warning .

rdfa:UnresolvedTerm dc:description "A warning to be used when a Term fails to be resolved.";
    rdfs:subClassOf rdfa:Warning .

rdfa:UnresolvedCURIE dc:description "A warning to be used when a CURIE prefix
    fails to be resolved.";
    rdfs:subClassOf rdfa:Warning .
    
rdfa:context a owl:ObjectProperty, rdf:Property;
    dc:description "Provides extra context for the error, e.g., http response,
    an XPointer/XPath information, or simply the IRI that created the error.";
    rdfs:domain rdfa:PGClass .

B.3 語彙拡張のための用語

語彙には、次の用語の定義が含まれています(ここではTurtle[TURTLE]形式で示しています)。

例138
@prefix dc:      <http://purl.org/dc/terms/> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfa:    <http://www.w3.org/ns/rdfa#> .

rdfa:usesVocabulary a owl:ObjectProperty, rdf:Property;
    dc:description "Provides a relationship between the host document and a vocabulary
    defined using the @vocab facility of RDFa1.1." .

C. 変更

この項は非規範的です。

C.1 最後に公開された勧告以後の主な違い

C.2 RDFa構文1.0との主な違い

この仕様では、いくつかの新機能を導入し、前バージョンのいくつかの機能の挙動を拡張しています。次の要約は、RDFaプロセッサの開発者にとって有用もしれませんが、包括的であることを意味するものではありません

この仕様は[RDFA-SYNTAX]とできる限り下位互換性を保つよう努めていますが、上記の変更は、RDFa 1.1プロセッサとRDFa 1.0プロセッサでは、処理を行ったときに同じドキュメントに対して異なるRDFトリプルが出力される可能性がある場合がありえることを意味します。これらの違いを最小限に抑えるために、ドキュメントの著者は次のことを行うことができます。

XHTML+RDFa 1.1ドキュメントを作成する場合、次のようにしてRDFa 1.0適合のプロセッサとの非互換性を削減できます。

D. 謝辞

この項は非規範的です。

公開時点のRDFaワーキンググループの正式なメンバーは次のとおりです。

E. 参考文献

E.1 規範的な参考文献

[HTML-RDFA]
Manu Sporny et al. HTML+RDFa 1.1 - Second Edition. 17 March 2015. W3C Recommendation. URL: http://www.w3.org/TR/html-rdfa/
[OWL2-OVERVIEW]
W3C OWL Working Group. OWL 2 Web Ontology Language Document Overview (Second Edition). 11 December 2012. W3C Recommendation. URL: http://www.w3.org/TR/owl2-overview/
[OWL2-PROFILES]
Boris Motik; Bernardo Cuenca Grau; Ian Horrocks; Zhe Wu; Achille Fokoue. OWL 2 Web Ontology Language Profiles (Second Edition). 11 December 2012. W3C Recommendation. URL: http://www.w3.org/TR/owl2-profiles/
[OWL2-RDF-BASED-SEMANTICS]
Michael Schneider. OWL 2 Web Ontology Language RDF-Based Semantics (Second Edition). 11 December 2012. W3C Recommendation. URL: http://www.w3.org/TR/owl2-rdf-based-semantics/
[RDF-SYNTAX-GRAMMAR]
Fabien Gandon; Guus Schreiber. RDF 1.1 XML Syntax. 25 February 2014. W3C Recommendation. URL: http://www.w3.org/TR/rdf-syntax-grammar/
[RDF11-MT]
Patrick Hayes; Peter Patel-Schneider. RDF 1.1 Semantics. 25 February 2014. W3C Recommendation. URL: http://www.w3.org/TR/rdf11-mt/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[RFC3987]
M. Duerst; M. Suignard. Internationalized Resource Identifiers (IRIs). January 2005. Proposed Standard. URL: https://tools.ietf.org/html/rfc3987
[XHTML-RDFA]
Shane McCarron. XHTML+RDFa 1.1 - Third Edition. 17 March 2015. W3C Recommendation. URL: http://www.w3.org/TR/xhtml-rdfa/
[XML-NAMES]
Tim Bray; Dave Hollander; Andrew Layman; Richard Tobin; Henry Thompson et al. Namespaces in XML 1.0 (Third Edition). 8 December 2009. W3C Recommendation. URL: http://www.w3.org/TR/xml-names
[XML10-4e]
C. M. Sperberg-McQueen et al. Extensible Markup Language (XML) 1.0 (Fourth Edition). 16 August 2006. W3C Recommendation. URL: http://www.w3.org/TR/2006/REC-xml-20060816/
[XMLSCHEMA11-2]
David Peterson; Sandy Gao; Ashok Malhotra; Michael Sperberg-McQueen; Henry Thompson; Paul V. Biron et al. W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes. 5 April 2012. W3C Recommendation. URL: http://www.w3.org/TR/xmlschema11-2/

E.2 参考情報の参考文献

[HTML401]
Dave Raggett; Arnaud Le Hors; Ian Jacobs. HTML 4.01 Specification. 24 December 1999. W3C Recommendation. URL: http://www.w3.org/TR/html401
[MICROFORMATS]
Microformats. URL: http://microformats.org
[QNAMES]
N. Walsh. Using Qualified Names (QNames) as Identifiers in XML Content. 17 March, 2004. TAG Finding. URL: http://www.w3.org/2001/tag/doc/qnameids-2004-03-17
[RDF11-PRIMER]
Guus Schreiber; Yves Raimond. RDF 1.1 Primer. 24 June 2014. W3C Note. URL: http://www.w3.org/TR/rdf11-primer/
[RDF11-TESTCASES]
Gregg Kellogg; Markus Lanthaler. RDF 1.1 Test Cases. 25 February 2014. W3C Note. URL: http://www.w3.org/TR/rdf11-testcases/
[RDFA-PRIMER]
Ben Adida; Ivan Herman; Manu Sporny; Mark Birbeck. RDFa 1.1 Primer - Third Edition. 17 March 2015. W3C Note. URL: http://www.w3.org/TR/rdfa-primer/
[RDFA-SYNTAX]
Ben Adida; Mark Birbeck; Shane McCarron; Steven Pemberton et al. RDFa in XHTML: Syntax and Processing. 14 October 2008. W3C Recommendation. URL: http://www.w3.org/TR/2008/REC-rdfa-syntax-20081014
[RELAXNG-SCHEMA]
Information technology -- Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG. ISO/IEC 19757-2:2008. URL: http://standards.iso.org/ittf/PubliclyAvailableStandards/c052348_ISO_IEC_19757-2_2008(E).zip
[SAX]
D. Megginson, et al. SAX: The Simple API for XML. May 1998. URL: http://www.megginson.com/downloads/SAX/
[TURTLE]
Eric Prud'hommeaux; Gavin Carothers. RDF 1.1 Turtle. 25 February 2014. W3C Recommendation. URL: http://www.w3.org/TR/turtle/
[WIDGETS-URI]
Marcos Caceres. Widget URI scheme. 13 March 2012. W3C Note. URL: http://www.w3.org/TR/widgets-uri/
[XHTML11]
Shane McCarron; Masayasu Ishikawa. XHTML? 1.1 - Module-based XHTML - Second Edition. 23 November 2010. W3C Recommendation. URL: http://www.w3.org/TR/xhtml11/
[XML-EXC-C14N]
John Boyer; Donald Eastlake; Joseph Reagle. Exclusive XML Canonicalization Version 1.0. 18 July 2002. W3C Recommendation. URL: http://www.w3.org/TR/xml-exc-c14n
[XML10]
Tim Bray; Jean Paoli; Michael Sperberg-McQueen; Eve Maler; Francois Yergeau et al. Extensible Markup Language (XML) 1.0 (Fifth Edition). 26 November 2008. W3C Recommendation. URL: http://www.w3.org/TR/xml
[XMLSCHEMA11-1]
Sandy Gao; Michael Sperberg-McQueen; Henry Thompson; Noah Mendelsohn; David Beech; Murray Maloney. W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures. 5 April 2012. W3C Recommendation. URL: http://www.w3.org/TR/xmlschema11-1/