【注意】 このドキュメントは、W3CのRDFa Core 1.1 - Third Edition : Syntax and processing rules for embedding RDF through attributes W3C Recommendation 17 March 2015の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。
First Update: 2018年08月17日
公開以後に報告されたエラーや問題がないか正誤表を確認してください。
このドキュメントは、規範以外の形式でも入手できます: 前勧告との差分、ポストスクリプト版、PDF版
この仕様の英語版が唯一の規範のバージョンです。非規範の翻訳版も入手可能かもしれません。
Copyright © 2007-2015 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and document use rules apply.
現在のウェブは、主にHTMLで作成された膨大な数のドキュメントで構成されています。これらのドキュメントにはかなりの量の構造化データが含まれていますが、その大部分はツールやアプリケーションで利用することができません。公開者がこのデータをより完全に表現でき、ツールがそれを読むことができれば、ユーザ機能の新しい世界が利用可能となり、ユーザがアプリケーションとウェブサイトの間で構造化データを転送できるようになり、閲覧アプリケーションによりユーザ経験を向上させることができます。例えば、ウェブ・ページ上のイベントをユーザのデスクトップ・カレンダーに直接インポートできます。また、ドキュメント上のライセンス情報を検出できるようになり、権利が自動的にユーザに通知されます。写真の作成者、カメラの設定情報、解像度、場所、トピックを元の写真と同様に簡単に公開でき、構造化された検索や共有が可能となります。
RDFaコアは、マークアップ言語で構造化データを表現するための属性の仕様です。マークアップ言語(HTMLなど)で既に利用可能な組み込みデータをRDFaマークアップで再利用できることが多く、公開者がドキュメントのコンテンツで重要なデータを繰り返す必要はありません。基礎となる抽象表現はRDF [RDF11-PRIMER]で、公開者は独自の語彙を構築したり、他の語彙を拡張したり、時間の経過に合わせて最大限の相互運用性を有する語彙を展開することができます。表現される構造はデータと密接に関連しているため、表示されたデータを関連する構造とともにコピーして貼り付けることができます。
データ解釈の規則は汎用的なものであるため、形式によって異なる規則は必要ありません。これにより、データの著者と公開者は、ソフトウェアを更新したり、中央機関に形式を登録したり、2つの形式の相互干渉を心配したりする必要なく、独自の形式を定義できます。
RDFaは、マイクロフォーマット[MICROFORMATS]と同じ目標をいくつか共有しています。マイクロフォーマットでは、構造化されたデータをHTMLドキュメントに組み込むための構文と、マイクロフォーマットごとの特定の用語の語彙の両方を指定するのに対し、RDFaは構文のみを指定し、他の用語(語彙やタクソノミーと呼ぶことが多い)の独自の仕様に依存します。RDFaでは、複数の独自に開発された語彙を自由に混在させることができ、使用されている特定の語彙を知らなくてもその言語を解析できるように設計されています。
このドキュメントは、RDFaの詳細な構文仕様であり、次の人を対象としています。
RDFaの使用方法に関する概論や実例について知りたい人は、[RDFA-PRIMER]を参照してください。
まず、RDFaやRDFに精通しておらず、ドキュメントに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との間には、次を含む多くの実質的な違いがあります。
より完全な変更点のリストが変更にあります。
テスト・ハーネスのサンプルが利用できます。この一連のテストは網羅的なものではありません。ユーザは、このテストがRDFaの有用な使用例であると考えるかもしれません。
このドキュメントは、RDFaワーキンググループによって勧告として公開されました。このドキュメントに関してコメントを行いたい場合には、[email protected](購読、アーカイブ)にお送りください。どのようなコメントでも歓迎します。
ワーキンググループの実装報告書を参照してください。
このドキュメントは、W3Cメンバー、ソフトウェア開発者、他のW3Cグループ、および他の利害関係者によりレビューされ、W3C勧告として管理者の協賛を得ました。これは確定済みドキュメントであり、参考資料として用いたり、別のドキュメントで引用することができます。勧告の作成におけるW3Cの役割は、仕様に注意を引き付け、広範囲な開発を促進することです。これによってウェブの機能性および相互運用性が増強されます。
このドキュメントは、2004年2月5日のW3C特許方針の下で活動しているグループによって作成されました。W3Cは、このグループの成果物に関連するあらゆる特許の開示の公開リストを維持し、このページには特許の開示に関する指示も含まれています。不可欠な請求権(Essential Claim(s))を含んでいると思われる特許に関して実際に知っている人は、W3C特許方針の6項に従って情報を開示しなければなりません。
このドキュメントは、2005年10月14日のW3Cプロセス・ドキュメントによって管理されています。
この項は非規範的です。
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を自身の環境にインポートし、適合するプロセッサが、自身のドキュメントからセマンティックなデータを確実に抽出できるようにすることが可能となります。
この項は非規範的です。
次の例は、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を組み込んだマークアップ言語のメディア・タイプの登録では、この仕様を直接的または間接的に参照すべきです。
RDFaは、いくつかの新しい属性を提供するだけでなく、多くのよく見かける属性を用います。広く展開されている言語(例えば、HTML)に既に存在している属性は、その構文が若干変更されている場合もあるものの、常に同じ意味を持っています。例えば、(X)HTMLには、新しい@relの値を追加する明確な方法はありません。RDFaは、この問題を明示的に解決することを目指しており、IRIを値として認めることでそれを行います。また、完全なIRIの値を簡潔に表現できるようにする用語と「短縮URI表現」の概念 — このドキュメントではCURIEと呼ぶ — も導入しています。完全なRDFaの属性名と構文のリストについては、属性と構文を参照してください。
(X)HTMLでは、著者はmeta
とlink
の要素を用いて、現在のドキュメントに関するメタデータと関係を含めることができます(ここの例では、XHTML+RDFa [XHTML-RDFA]を用いている)。例えば、ページの著者は、現在のページの前後のページとともに、linkとmetaの要素を用いて表現できます。
<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で他の語彙を利用する性能を用いて、それを高めます。
<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表現の使用も認められており、それにより、著者は省略表現を用いて複数の語彙で用語を参照できます。
<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の使用をサポートしています。これは、様々な語彙のサポートを追加するとさらに便利になります。
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と一緒に用いれば、テキストをインライン化することもできます。
<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を用いて型付けすることもできます。
<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では、ドキュメントに他のドキュメントや資源に関するメタデータ情報を含めることができます。
<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によりその項目の型を示すことができます。
<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を用いる方が容易な場合もあります。前の例は、次のように書くこともできます。
<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用語を用いる場合は、次のとおりです。
<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構文で表しています)。
@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の役割に似たものになります。例えば、前の例は次のように書くことができました。
<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>
この項は非規範的です。
前項では、RDFaのマークアップの構造を示すために、典型的なマークアップの例を示しました。RDFaは「RDF in Attributes」の省略形です。RDFaを作成するためには、RDFを理解している必要はありませんが、確実に役に立ちます。しかし、RDFaをサポートする言語のRDF出力を利用するシステムを構築する場合には、RDFを理解する必要があることはほぼ間違いありません。この項では、RDFの基本概念と用語を紹介します。RDFのより完全は説明については、RDF概念ドキュメント[RDF-SYNTAX-GRAMMAR]とRDF構文ドキュメント[RDF-SYNTAX-GRAMMAR]を参照してください。
RDFaがアクセスを提供する構造化データは、ステートメントのコレクションです。ステートメントは、処理が容易になるように特定の形式で構築された情報の基本単位です。大量の情報をステートメントのコレクションに分解することにより、非常に複雑なメタデータもシンプルな規則で処理できます。
例えば、次のような事実があるとします。
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.
これは、機械には解釈が非常に難しく、あるデータ・アプリケーションから別のデータ・アプリケーションに渡せる形式ではまったくありません。しかし、その情報を一連のステートメントに変換すると、扱いやすくなり始めます。したがって、同じ情報を次のより短い「ステートメント」で表すことができます。
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.
この情報を機械で処理できるようにするために、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は、「主語」、「述語」、「目的語」で国際化文字をサポートしています。
複雑な情報を扱いやすい単位に分割することは、データの特定に役立ちますが、いくらかの曖昧さも残ります。例えば、どの「Albert」に関する話なのでしょうか?別のシステムが「Albert」に関する事実をより多く持っている場合、どのようにすれば、それらが同じ人物に関するものであるかを知り、その人物に関して分かっていることのリストに追加できるのでしょうか?ドイツ帝国(German Empire)で生まれた人々を見つけたいと思ったときに、どのようにすれば、「was born in」という述語が、他のシステムに存在しうる「birthplace」(出生地)という述語と同じ意味を持っていると知ることができるのでしょうか?RDFは、曖昧な用語をIRI参照に置き換えることでこの問題を解決します。
IRIは、ウェブ・ページを識別するために最も一般的に用いられていますが、RDFでは、概念に対して一意の識別子を提供する方法としてそれを用います。例えば、「Albert」という曖昧な文字列ではなく、Albert Einstein(アルベルト・アインシュタイン)のDBPedia[http://dbpedia.org]のIRIを用いて、すべてのステートメントの主語(各トリプルの最初の部分)を識別することができます。
<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ではない)ことを示します。
<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」などが、すべて同じものを指すと確信することが可能となります。
<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>.
主語と述語には常にIRI資源が用いられますが、トリプルの目的語部分はIRIかリテラルのいずれかでありえます。例のトリプルでは、Einsteinの名前はプレーン・リテラル(具体的には、型や言語情報のないベーシックな文字列)で表されています。
<http://dbpedia.org/resource/Albert_Einstein>
<http://xmlns.com/foaf/0.1/name> "Albert Einstein".
プレーン・リテラルには、プレーン・テキストを自然言語で捕捉するために、言語タグを付与することもできます。例えば、Einsteinの出生地は、英語とドイツ語では名前が異なります。
<http://dbpedia.org/resource/German_Empire> rdfs:label "German Empire"@en; rdfs:label "Deutsches Kaiserreich"@de .
日付や数字などの一部のリテラルは、非常に特定的な意味を持つため、RDFはリテラルの型を示す方法を提供しています。型付きリテラルは、プレーン・リテラルの末尾にIRIを付けて示し、このIRIがリテラルのデータ型を示します。このIRIは、通常、XMLスキーマ・データ型の仕様[XMLSCHEMA11-2]で定義されているデータ型に基づきます。Einsteinの生年月日をhttp://www.w3.org/2001/XMLSchema#date
という型のリテラルで明確に表すために、次の構文を用います。
<http://dbpedia.org/resource/Albert_Einstein>
<http://dbpedia.org/property/dateOfBirth>
"1879-03-14"^^<http://www.w3.org/2001/XMLSchema#date>.
RDFの鍵となる概念はトリプルとIRIの使用であり、特定の構文ではないため、RDF自体には、トリプルを表すための1つの決まった方法はありません。しかし、トリプルを表す方法は、RDF/XML[RDF-SYNTAX-GRAMMAR]、Turtle[TURTLE]、そしてもちろんRDFaなど、多く存在しています。RDFに関する多くの議論では、Turtle構文が非常にコンパクトであるため、これを用いてその概念を説明しています。ここで示した例では、既にこの構文を用いていますが、RDFaから生成されうるRDFに関して説明する必要がある場合は、このドキュメント全体で引き続き用います。Turtleは、IRIマッピングを用いて長いIRIを短縮でき、これを用いて、次のように短縮IRI表現を表すことができます。
@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の識別子やデータ型指示子を短縮するために同じ技術を用いることもできたことを意味します。
@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をよく見かけます。
<>
これは、「現在のドキュメント」、すなわち処理中のドキュメントを示します。最終的には、ドキュメントのロケーションに基づく完全なIRIが存在するようになりますが、この短縮形はサンプルをよりコンパクトにするために役立ちます。短縮形の技術全体は例をコンパクトにする方法に過ぎず、生成される実際のトリプルでは常に完全なIRIを用いることに特に注意してください。
トリプルのコレクションをグラフと呼びます。この仕様で定義しているすべてのトリプルは、RDFaプロセッサによる出力グラフに含まれます。グラフやその他のRDFの概念の詳細については、[RDF-SYNTAX-GRAMMAR]を参照してください。
RDFステートメントの短縮表現を可能とするために、RDFaでは、ほとんどのIRI参照を「短縮URI表現」(compact URI expression)、すなわちCURIEと呼ばれる形式に短縮することができます。この方法の詳細な議論は、CURIEとIRIの処理の項にあります。
CURIEはマークアップとTurtleの例でのみ用いており、生成されたトリプルには決して現れないことに注意してください。これは、IRI参照を用いるためにRDFで定義されています。
組み込みメタデータの利用が増えるということは、マークアップのフラグメントを取り込んで、あるドキュメントから別のドキュメントにそれを移動させることです。これは、ブラウザでのドラッグ・アンド・ドロップや、ドキュメントへの記述用に著者に提供されるコードのスニペットなどのツールを用いることで発生する可能性があります。後者の良い例は、Creative Commonsが提供するライセンスのフラグメントです。
しかし、フラグメントの作成に関わる人(ツールの構築またはスニペットの作成のいずれかにより)は、この仕様ではフラグメントの処理方法については言及していないことに注意してください。具体的には、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などのホスト言語が定義するメカニズムを用いて表します)。
非規範的と記している項と同じく、この仕様のすべての作成ガイドライン、図、例、注は、非規範的です。この仕様のその他の部分はすべて規範的ですこの仕様のその他の部分はすべて規範的です。
「することができる/してもよい(MAY)」、「しなければならない(MUST)」、「してはならない(MUST NOT)」、「推奨される(RECOMMENDED)」、「すべきである/する必要がある(SHOULD)」、「すべきでない/する必要がない(SHOULD NOT)」というキーワードは、[RFC2119]で記述されているように解釈されるべきです。
この仕様では、出力グラフという用語を、処理モデルの項に従ってドキュメントが言明するすべてのトリプルを意味するために用います。適合する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)。これらのメカニズムはまだ規定していません。
RDFaを組み込んだホスト言語は、下記に準拠しなければなりません。
<myml:myElement property="license">
なしに使用できる)べきである(SHOULD)。ホスト言語が属性を「名前空間なし」で用いない場合、XHTML名前空間(http://www.w3.org/1999/xhtml
)を介して属性を参照しなければならない(MUST)。この仕様では、単独の文書型は定義していません。ここの属性は、他のホスト言語(例えば、HTML+RDFaやXHTML+RDFa)に統合されることを意図しています。ただし、この仕様では、汎用的なXMLドキュメント - つまり、text/xml
またはapplication/xml
のメディア・タイプとして配信されるドキュメント - の処理規則を定義しています。そのようなドキュメントは、次のすべての基準を満たさなければなりません。
<myml:myElement property="license">
なしに用いる)べきである(SHOULD)。
XML文法は、この仕様の属性と衝突するネイティブな属性を持つことができます。その結果、RDFaプロセッサにより、予期しないトリプルが生成される可能性があります。
RDFaプロセッサがXML+RDFaドキュメントを処理する場合は、次の初期コンテキストを用いてそれを行います。
describedby
、license
、role
)があり、http://www.w3.org/2011/rdfa-context/rdfa-1.1
で定義されている。dc
)があり、http://www.w3.org/2011/rdfa-context/rdfa-1.1
で定義されている。この仕様では、多くの属性と、それらの属性の値がRDFトリプルの生成時にどのように解釈されるべきかを定義しています。この項では、属性とその値の構文を定義します。
CDATA
文字列。リテラルに対する機械可読コンテンツを提供するためのもの(RDF用語では「リテラルの目的語」)。rel
またはproperty
の属性に関連付けられている目的語がその述語のリストに追加されていることを示すために用いる属性。この属性の値は無視しなけらばならない(MUST)。この属性が存在している場合、リストがまだ存在していなければ、作成される。NCName ':' ' '+ xsd:anyURI
どのケースにおいても、これらの属性は、値なし(例えば、@datatype="")で用いたり、CURIEとIRIの処理の規則を用いて評価した後に値なしになる値(例えば、@datatype="[noprefix:foobar]")で用いたりすることができます。
RDFa属性は、セマンティックがリッチなドキュメントでは異なる役割を果たします。その役割とは、簡単に言えば次のとおりです。
多くの属性は、空白区切りのトークンのリストを受け入れます。この仕様では、空白を次のように定義しています。
whitespace ::= (#x20 | #x9 | #xD | #xA)+
属性が空白区切りのトークンのリストを受け入れる場合、RDFaプロセッサは先頭または末尾の空白を無視しなければなりません(MUST)。
この定義は[XML10]の定義と整合性があります。
現在、ワーキンググループは、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:[email protected]」が含まれている@resourceは、「http://www.example.com/addresses/[email protected]」という目的語を持つトリプルを作成するかもしれません。さらに、ドキュメントで定義されている接頭辞マッピングと競合するスキームが今後導入される可能性もあります(ただし、高くありません)(例えば、新しく提案された「ウィジェット」スキーム[WIDGETS-URI])。いずれのケースにおいても、この基本的なスキームを覆い隠すRDFaは、IRIの他の利用者がIRIを扱う方法を変えるものではありません。しかし、それは、ドキュメントの著者が意図したCURIEの使用が、IRIであると別の利用者に誤解されることを意味しえます。ワーキンググループは、このリスクは最小限であると考えています。
CURIEの通常の評価では、次のコンテキスト情報が提供される必要があります。
:p
)p
)_:p
)。RDFaでは、これらの値は次のように定義されています。
CURIEは完全なIRIの1つの表現です。そのIRIを決定するための規則は次のとおりです。
prefix
とreference
で構成されている場合、IRIは現在のデフォルトの接頭辞マッピングを取得し、それを参照と連結させることで得られる。現在のデフォルトの接頭辞マッピングがなければ、それは有効なCURIEではなく、無視しなければならない(MUST)。prefix
とreference
で構成され、prefix
に対象とするマッピングがあれば(大文字・小文字を区別せずに比較した場合)、IRIは、そのマッピングを用い、reference
と連結させることで作成される。prefix
に対象とするマッピングがなければ、その値はCURIEではない。RDFaプロセッサによって、コロンのない項目が、一部のデータ型でどのように解釈されるかについては、属性における用語の一般的な使用を参照してください。
この項は非規範的です。
多くの場合、言語の設計者は、展開メカニズム[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を用いることを検討すべきです。
この項では、RDFaドキュメントに存在している構造化データを表すトリプルを作成するための汎用的な処理規則に目を向けます。処理は、ここで概説しているDOMトラバーサル技術に従う必要はありませんが、何らかの他の処理方法に従った場合の効果は、ここで概説している処理に従った場合と同じでなければなりません。処理モデルは、(特に評価のコンテキストに関連して)記述を容易にするDOMトラバーサルという概念を用いて説明します。
RDFaトリプルのドキュメントの評価は、ドキュメントの目的語から始まり、次に、ドキュメント順に個々の子要素を訪問し、処理規則を適用することで実行します。処理は、子要素ごとに、プロセッサがその子要素をそれぞれ訪問し、同じ処理規則を適用するという点で再帰的です。
ドキュメントのルート要素から始めてもドキュメントの目的語自体から始めてもほとんど違いがない場合もあります。ルート要素には存在しない重要な情報がドキュメントの目的語レベルに存在している場合もあるため、このような定義になっています。
処理が続行されると、トリプルを生成する規則が適用され、その後に子孫要素を処理するときに用いられる評価コンテキストの情報も変わる可能性があります。
この仕様では、生成されるトリプルがどうなるかや、ここで概説しているよりも多いトリプルが処理中に生成される可能性があるかどうかについては何も言及していません。しかし、RDFaプロセッサが適合するためには、最低限この項の規則が適用され、1つのRDFグラフが生成されたかのように動作しなければなりません(MUST)。RDFaプロセッサの適合性の項で説明したように、生成されたいかなる追加のトリプルも出力グラフに表示されてはなりません(MUST NOT)。それらをプロセッサ・グラフに含むことはできます(MAY)。
処理中に、評価のコンテキストによって提供される情報を用いて各規則が適用されます。初期コンテキストは、処理の開始時に作成されます。そのコンテキストには次のメンバーが含まれています。
base
要素などの他のメカニズムによって設定された他のIRIでもかまわない。重要なのは、それが相対パスを解決できるIRIを確立するという点である。処理の過程で、各子要素に渡される新しい評価のコンテキストが作成されます。下記で記述している最初の規則は、そのコンテキストにおける項目の値を決定します。次に、このコアな規則により、要素によって提供される情報と、評価のコンテキストの情報を組み合わせて新しいトリプルが作成されます。
処理の過程で、次のような、多くのローカルな範囲の値が必要になります。
rdf:type
の関係を作成するための資源。ステートメント連鎖は、著者が、不要なマークアップの反復を避けながら、RDFステートメントどうしをリンクさせることができるRDFaの機能です。例えば、著者が、資源であった目的語の子としてステートメントを追加する場合、これらのステートメントはその資源に関するものと解釈されるべきです。
<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は、彼の人生のある時点において、ドイツ帝国とスイスの両方に住居を持っていたという事実をマークアップします。
<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>
ここで、同じ情報を示しますが、今度は住居の部分から不完全なトリプルを作成し、その後に、トリプルを「完全にする」するために、さらに任意の数の主語を用います。
<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度はスイスに関して)、これは先の例とまったく同じ情報を示します。
<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
要素を用いています。
<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>
このような小さなマークアップが用いられると、資源に関連する属性のいずれかが、連鎖において主語または目的語として機能する可能性があります。
<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は交換可能である場合が多いことに注意してください。これは連鎖には当てはまりません。最初の例で考えてみると、その例を次のように用いた場合、
<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の主な違いで、後者は連鎖を導きますが、前者は通常は導きません。
RDFaは究極的にはRDFを転送する手段であるため、重要な概念は資源と、IRIとしてのその明示(manifestation)です。RDFは完全なIRI(相対パスではない)を処理します。RDFaをトリプルに変換する場合、任意の相対IRIは、RFC 3987[RFC3987]の6.5項、リファレンス解決で定義されているアルゴリズムを用いて、基底IRIに応じて解決されなければなりません(MUST)。IRIを参照するRDFa属性の値は、IRI、SafeCURIEorCURIEorIRI、またはTERMorCURIEorAbsIRIという3つの異なるデータ型を用います。これらの属性はすべて、処理後にIRIにマッピングされます。これらの属性の処理は次のとおりです。
この結果、このデータ型の属性の値が空の文字列(例えば、@about="")であれば、その値がIRIに解決されることになります。""というIRIは、基底と同じであると解釈される相対IRIです。言い換えれば、 ""の値は通常、現在のドキュメントのIRIに解決されます。
これに関連する結果は、このデータ型の属性の値が空のSafeCURIE(例えば、@about="[]")であれば、その値はIRIにならず、したがって、その値は無視されることになります。
属性のすべての値が無視される可能性があることに注意してください。そうなった場合には、属性は、空であるかのように扱わなければなりません(MUST)。
例えば、DBPedia上のAlbert Einsteinの完全なIRIは次のとおりです。
http://dbpedia.org/resource/Albert_Einstein
著者は、情報を扱いやすくするためにCURIEを用いてこれを短縮できます。最初のステップは、著者がIRIの先頭セグメントに接頭辞をリンクさせた接頭辞マッピングを作成することです。RDFaでは、このマッピングは@prefixを用いて表されます。
<div prefix="db: http://dbpedia.org/">
...
</div>
接頭辞が確立されると、著者はそれを用いて次のようにIRIを短縮できます。
<div prefix="db: http://dbpedia.org/">
<div about="db:resource/Albert_Einstein">
...
</div>
</div>
著者はIRIをいつでも自由に分割できます。しかし、CURIEの一般的な使用方法は用語と値の利用可能なライブラリを作ることであるため、接頭辞は通常、最も再利用されるものを提供する共通セグメントにマッピングされ、用語のライブラリの管理人によって提供されることが多いです。例えば、DBPediaには膨大な資源のリストが含まれているため、資源の基底位置を用いた接頭辞マッピングを作成する方が効率的です。
<div prefix="dbr: http://dbpedia.org/resource/"> <div about="dbr:Albert_Einstein"> ... </div> <div about="dbr:Baruch_Spinoza"> ... </div> </div>
CURIE接頭辞マッピングは、現在の要素とその子孫で定義されます。与えられた接頭辞に対して最も内側のマッピングが優先されます。例えば、次の2つのCURIEで表されているIRIは、接頭辞のマッピングのスコープがローカルであるため、接頭辞が共通しているにも関わらず、異なります。
<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つの接頭辞を別の値にマッピングすることは、許されているものの、混乱が生じる可能性があります。ワーキンググループは、ドキュメントの著者が、ドキュメントの全体において、同じ語彙に同じ接頭辞を用いてマッピングすることを推奨しています。多くの語彙には、推奨される接頭辞名があります。ワーキンググループは、可能な限りこれらの名前を用いることを推奨します。
属性がCURIEを利用する方法は多く存在しており、それらは別々に処理する必要があります。それは、次のとおりです。
空の属性値(例えば、typeof=''
)は、依然としてCURIEであり、そういうものとして処理されます。この処理の規則は、順序で定義しています。しかし、具体的には、空の属性値は、この仕様では決して相対IRIとして扱いません。
CURIEorIRIを含むことができる属性の例は@aboutです。IRIを直接表すために、著者は次のように記述するかもしれません。
<div about="http://dbpedia.org/resource/Albert_Einstein">
...
</div>
一方で、上記のIRIをCURIEとして表すためには、著者は次のように記述するでしょう。
<div about="dbr:Albert_Einstein">
...
</div>
著者は、次のように安全なCURIEを用いることもできます。
<div about="[dbr:Albert_Einstein]">
...
</div>
CURIEではない値は無視しなければならない(MUST)ため、@aboutはTERMの使用を認めておらず、CURIEには接頭辞の区切り文字がないため、次の@aboutの値は新しい主語を設定しません。
<div about="[Albert_Einstein]">
...
</div>
しかし、次のマークアップは、CURIEではなく有効な相対IRIであるため、主語を設定するでしょう。
<div about="Albert_Einstein">
...
</div>
いくつかのRDFa属性は、TERMSをその値として取ることもできることに注意してください。これは、次の項で論じます。
一部のRDFa属性には、用語の参照を認めるデータ型があります。RDFaは、用語の構文を次のように定義しています。
term ::= NCNameStartChar termChar* termChar ::= ( NameChar - ':' ) | '/'
誤解を避けるために、この生成規則は、RDFaの「用語」が、先頭ではない文字としてスラッシュも認めているXML NCNameであることを意味します。
RDFa属性が用語の使用を認めていて、評価中の値が上記の用語の生成規則と一致する場合、それは以下のロジックを用いてIRIに変換されます。
term
を連結させることで得られる。term
がローカルな用語マッピングのリスト内の項目と一致するかどうかを確認する。まず、大文字・小文字を区別してリストとの比較を行い、一致しなければ、大文字・小文字を区別しないで比較する。一致すればその関連するIRIを用いる。term
には関連するIRIがなく、無視しなければならない(MUST)。ローカルなデフォルトの語彙は、初期コンテキストの一部としてホスト言語で定義することができ、@vocabを用いて現在の要素とその子を上書きできます。
前項で論じた一般的な規則は、次の方法でRDFa属性に適用されます。
定義済みの用語と一致する値は、対応するIRIに対する参照に展開されなければなりません(MUST)。例えば、次の例は、
<link rel="license" href="http://example.org/license.html" /> <link rel="xhv:license" href="http://example.org/license.html" />
それぞれ、次のトリプルを生成します。
<> <http://www.w3.org/1999/xhtml/vocab#license> <http://example.org/license.html> .
RDFaでは、bノードを含む様々な種類の資源参照を用いて関係を確立できます。主語または目的語がCURIEを用いて定義されており、そのCURIEが明示的にbノードを指定していれば、適合するプロセッサは、解析中にそれに遭遇したときにbノードを作成しなければなりません(MUST)。また、RDFaプロセッサは、自動的に生成されたbノードが、CURIE内の明示的な参照で定義されているbノードと衝突する名前を(例えば、連鎖の結果として)持つことがないようにしなければならない(MUST)。
次の例を検討してみましょう。
<link about="_:john" rel="foaf:mbox" href="mailto:[email protected]" /> <link about="_:sue" rel="foaf:mbox" href="mailto:[email protected]" /> <link about="_:john" rel="foaf:knows" resource="_:sue" />
上記のフラグメントでは、2つのbノードがトリプルの主語として明示的に作成されています。次に、これらのbノードが、当事者間の関係を示すために参照されます。処理後に、次のトリプルが生成されます。
_:john foaf:mbox <mailto:[email protected]> . _:sue foaf:mbox <mailto:[email protected]> . _:john foaf:knows _:sue .
RDFaプロセッサは、内部的に、実装依存の識別子をbノードに用います。トリプルが取得されると、新しいbノードの識別子が用いられ、通常、これは元の識別子とは関係がありません。しかし、実装は、これらの生成されたbノードの識別子に整合性があることを保証します。各bノードは独自の識別子を持ち、特定のbノードに対する参照はすべて同じ識別子を用い、異なるbノードは異なる識別子を持つでしょう。
特殊なケースとして、_:
も1つの特定のbノードに対する有効な参照です。
処理は通常、解析対象のドキュメントが完全にロードされた後に開始されます。しかし、そうである必要はなく、SAX[SSAX]などのストリーム・ベースのアプローチを用いてRDFa情報を抽出することも確かに可能です。しかし、ここで定義しているDOMトラバーサルの技術以外のアプローチを用いる場合は、ホスト言語固有の処理規則を確実に適用することが重要です(例えば、XHTML+RDFa[XHTML-RDFA]では、base
要素を使用できることが示されており、base
は、たとえmeta
やlink
の要素がストリームのbase
要素の前にあっても、それらの要素内のIRIの解釈に影響を与えるでしょう)。
この項では、「資源」という用語を「IRIまたはbノード」を意味するために用いています。この用語は、他のグループと相談した後に、何らかの他のより正式な用語に置き換えることができます。この用語を変更することは決してこの処理順序を変更するものではありません。
処理の開始時に初期評価コンテキストが次のように作成されます。
base
要素などの言語固有の方法で指定されている別の値)に設定される。処理は、この初期評価コンテキストのコンテキストにおいて、以下の処理規則をドキュメントの目的語に適用することによって開始されます。各規則集合に用いられている評価コンテキストは、適用されている可能性のある以前の規則に基づいていますが、ツリーのすべての要素は、深さ優先(depth-first)で、下記で説明する規則に従っても処理されます。
この仕様では、すべてのホスト言語には存在していない可能性のあるオプション属性の処理規則を定義しています(例えば、@href)。これらの属性がホスト言語でサポートされていなければ、対応する処理規則はその言語には適していません。
処理規則は次のとおりです。
@typeofが存在していれば、型付き資源は、次の規則の最初の一致から得られた資源に設定されます。
@typeof属性が存在していれば、型付き資源を新しい主語に設定します。
資源が提供されていなければ、次の規則の最初の一致が適用されます。
次に、現在の目的語資源は、次の規則の最初の一致から得られた資源に設定されます。
http://www.w3.org/1999/02/22-rdf-syntax-ns#
という語彙のXMLLiteral
には設定されない。
実際のリテラルは、現在の要素のうち、順に、@contentの値(存在していれば)、またはすべての子孫テキスト・ノードの値を連結して作成された文字列のいずれかである。最後の文字列には、[RDF-SYNTAX-GRAMMAR]で記述されているデータ型IRIが含まれており、それはCURIEとIRIの処理の項に従って得られる。
実際のリテラルは、現在の要素のうち、順に、@contentの値(存在していれば)、またはすべての子孫テキスト・ノードの値を連結して作成された文字列のいずれかである。
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)。
さらに、現在の言語に値があれば、[RDF-SYNTAX-GRAMMAR]で記述しているとおり、プレーン・リテラルの値にこの言語情報を含めるべきです。実際のリテラルは、@contentの値(存在していれば)または現在の要素の各子孫要素のテキストのコンテンツをドキュメント順に連結して作成された文字列です。
次に、現在のプロパティー値は、次のように各述語とともに用いられます。
http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
http://www.w3.org/1999/02/22-rdf-syntax-ns#first
http://www.w3.org/1999/02/22-rdf-syntax-ns#rest
http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
前項でカバーした処理規則は、ドキュメントからできる限り多くのトリプルを抽出するように設計されています。RDFaプロセッサは、エラーが発生した場合にも処理を続行するように設計されています。例えば、接頭辞マッピングや用語の解決に失敗すると、RDFaプロセッサはトリプルの生成をスキップし、ドキュメントの処理を続行します。個々のRDFaプロセッサの警告やエラーを知ることは、著者にとって有益な場合があります。プロセッサ・グラフは、すべての参考情報、警告、およびエラー・メッセージをRDFaプロセッサからのトリプルとして捕捉するメカニズムとして設計されています。これらのステータスのトリプルは、RDFaのオーサリングや自動エラー検出を助けるために取得され、使用できます。
RDFaプロセッサがプロセッサ・グラフの生成をサポートしている場合、次の処理の問題が発生したときは、トリプルの集合を生成しなければなりません(MUST)。
rdfa:Error
が生成されなければならない(MUST)。rdfa:Warning
が生成されなければならない(MUST)。rdfa:Warning
が生成されなければならない(MUST)。RDFaによって、その他の実装固有のrdfa:Info
、rdfa:Warning
、またはrdfa:Error
のトリプルが生成されることがあります(MAY)。
プロセッサ・グラフへのアクセスは、様々な方法で達成され、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)。許容値は、任意の順序のoutput
、processor
、または両方の値で、コンマで区切られています。グラフの設定が指定されていない場合には、出力グラフを返さなければなりません(MUST)。
相互運用性を確保するために、プロセッサ・グラフのコンテンツに対してコアな階層のクラスが定義されています。別々のエラーや警告は、個別の種類の資源(通常は、空白ノード)で、付加的なプロパティーによりエラーの条件や警告の詳細を示します。この仕様では、最上位レベルのクラスと、このドキュメントで明示的に定義しているエラーと警告の条件を参照するクラスのみを定義しています。RDFaプロセッサによって、その他の実装固有のサブクラスが定義されることがあります。
最上位レベルのクラスは、rdfa:Error
、rdfa:Warning
、およびrdfa:Info
であり、RDFa語彙の一部として定義しています。さらに、これらのクラスには1つのプロパティー、すなわちrdfa:context
が定義されており、それは、例えば、http応答、XPath情報、またはシンプルにRDFa資源に対するIRIなど、エラーに関する追加のコンテキストを提供します。このプロパティーの使用はオプションであり、この述語を用いて複数のトリプルを同じ主語に使用できます。最後に、エラーと警告のインスタンスは、dc:description
とdc:date
のプロパティーを用いるべきです(SHOULD)。dc:description
は、短くて人間が読めるけれども実装依存のエラーの記述を提供すべきす。dc:date
は、エラーが検出された時刻を示すべきであり、可能な限り正確に、ありえるネットワーク・エラーなどの検出を可能にすることが推奨されます。
下記の例は、エラーの結果としてプロセッサ・グラフに最小限に表すべきトリプルを示しています(dc:description
述語に対するリテラルのコンテンツは実装に依存します)。
@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
の情報は必須ではないことに注意)。
@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. ].
プロセッサは、RDFa語彙拡張で記述しているとおり、制限されたRDFSとOWLの含意規則を利用して語彙拡張を行うことができます(MAY)。
この項は非規範的です。
この項では、前項で説明した処理ステップの詳細な検証を行います。また、関連する一部のステップを明確にするのに役立ちえる例を含んでいます。
処理の鍵は、述語/目的語の組み合わせが検出されるたびにトリプルが生成されることです。生成される実際のトリプルには、以前に設定された可能性のある主語が含まれるため、これを現在の評価コンテキストで追跡し、親の主語と呼びます。明示的に設定されていなければ、その主語が現在のドキュメントのデフォルトになるため、述語/目的語の組み合わせは常に1つ以上のトリプルを生成するのに十分です。
述語を設定するための属性は、@rel、@revおよび@propertyで、目的語を設定するための属性は、@resource、@href、@contentおよび@srcです。そして、@typeofは、述語と目的語の両方を同時に(主語を設定する他の属性がない場合に表示されている場合には主語も)設定するという点でユニークです。@contentが存在しないけれども@propertyが存在している場合には、インライン・コンテンツも目的語を設定することがあります。
この項には多くの例があります。例はすべてXHTML+RDFaで記述されています。しかし、説明はホスト言語に関係なく妥当です。
トリプルが作成されると、それは、評価コンテキストにより渡される新しい主語(主語を設定した現在の要素に規則がある場合)か親の主語のいずれかによって提供される主語資源に常に関連するでしょう。この項では、これらの値が設定される特定の方法に目を向けます。主語を設定する方法は関係ないため、この項では、新しい主語か親の主語のいずれかでありえる現在の主語という概念を用います。
解析が始まると、現在の主語は、解析中のドキュメントのIRI、またはホスト言語が提供するメカニズム(例えば、(X)HTMLのbase
要素)によって設定された値となります。これは、デフォルトで、ドキュメント内に含まれているあらゆるメタデータがドキュメント自体に関係していることを意味します。
<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>
これは次のトリプルを生成するでしょう。
<> foaf:primaryTopic <#bbq> . <> dc:creator "Jo" .
データがドキュメント内の別の場所に出現する可能性があります。
<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>
これによって、引き続き次のトリプルが生成されます。
<> dc:creator "Jo" .
(X)HTMLでは、base
の値によって現在の主語の初期値が変わる可能性があります。
<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プロセッサは次のトリプルを生成します。
<http://www.example.org/jo/blog> foaf:primaryTopic <http://www.example.org//jo/blog#bbq> . <http://www.example.org/jo/blog> dc:creator "Jo" .
処理が進むにつれ、任意の@aboutによって現在の主語が変わります。@aboutの値はIRIかCURIEです。それが相対IRIであれば、現在の基底の値に応じて解決する必要があります。これがステートメントにどのように影響を及ぼすかを説明するために、ドキュメントの先頭で行うのと同じようにドキュメントを参照するのではなく、このマークアップにおいてどのように(X)HTMLのbody
要素内のプロパティーが新しいカレンダーのイベント・オブジェクトの一部になるかに注意してください。
<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プロセッサは次のトリプルを生成します。
<> 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 .
現在の主語を設定するために、ウェブ・ページへの参照のみでなく、他の種類の資源を用いることもできます。お勧めはできませんが、電子メールのアドレスを用いて人を表すことができます。
John knows <a about="mailto:[email protected]" rel="foaf:knows" href="mailto:[email protected]">Sue</a>. Sue knows <a about="mailto:[email protected]" rel="foaf:knows" href="mailto:[email protected]">Jim</a>.
これにより、次のトリプルが生成されます。
<mailto:[email protected]> foaf:knows <mailto:[email protected]> . <mailto:[email protected]> foaf:knows <mailto:[email protected]> .
同様に、著者は画像に関するステートメントを出すことができます。
<div about="photo1.jpg">
this photo was taken by
<span property="dc:creator">Mark Birbeck</span>
</div>
これにより、次のトリプルが生成されます。
<photo1.jpg> dc:creator "Mark Birbeck" .
@typeofは、トリプルの型付けを定義します。@typeofは、述語が常にrdf:type
であるため、述語を設定する他の方法とは異なる働きをします。つまり、プロセッサには型の値のみが必要です。問題は、これらの型付け情報をどの資源で取得するかです。
要素に@aboutがあれば、ステートメントに新しいコンテキストが作成され、その資源に型付け関係が定義されます。例えば、
<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>
は、次のトリプルも作成します。
<http://dbpedia.org/resource/Albert_Einstein> rdf:type foaf:Person .
@about属性は主要な型付けの資源です。それが要素に存在していれば、最優先度で@typeofの効果が決定されます。@aboutはないけれども、例えば@resourceにより、可能な主語資源を定義するためにのみその要素が用いられている(つまり、@rel、@revや@propertyがない)場合、その資源が@aboutとまったく同じように、型付き資源に用いられます。
@relがあれば(そして、依然として@aboutがなければ)、@relによって定義されているトリプルの明示的な目的語が型付けされます。例えば、次の場合、
<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>
生成されるトリプルには、次も含まれます。
<http://dbpedia.org/resource/German_Empire> rdf:type <http://schema.org/Country> .
最後に、他の属性が何も定義しない場合に備えて、@typeofにはステートメントに新しいコンテキストを作成するという追加機能もあります。これには、新しいbノードの生成が含まれます(bノードの詳細については、下記を参照してください)。例えば、次のように、著者がFOAF語彙を用いて人に関するマークアップを作成したいけれども、その項目に対する明確な識別子がない場合、
<div typeof="foaf:Person">
<span property="foaf:name">Albert Einstein</span>
<span property="foaf:givenName">Albert</span>
</div>
このマークアップは、次のような、foaf:Person
という「型」と、名前(name)と名(given name)のプロパティーを持つbノードを作成します。
_:a rdf:type foaf:Person . _:a foaf:name "Albert Einstein" . _:a foaf:givenName "Albert" .
この「分離型」の@typeofの使い方は、次の場合の省略形と見ることができます。
<div resource="_:a" typeof="foaf:Person">
<span property="foaf:name">Albert Einstein</span>
<span property="foaf:givenName">Albert</span>
</div>
同様に、
<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>
により、次が生成されます。
<http://dbpedia.org/resource/Albert_Einstein"> dbp:birthPlace _:b . _:b dbp:conventionalLongName "the German Empire" .
_:a
のプロパティーを_:b
とは異なるものとして追跡できます。しかし、これらの値を外部のソフトウェアに公開しないことで、その識別子を完全に制御できるだけでなく、項目に記述が追加作成されるのを防ぐことができます。連鎖に関する項で強調しているように、@propertyと@rel(または@rev)の主な違いの1つは、前者は連鎖を導かないということです。この規則の唯一の例外は、要素に@typeofも存在している場合です。その場合、@propertyの効果は@relと同じです。例えば、前の例は、次のように記述できました。
<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属性の省略形と見ることができます。
前の2つの項で説明したように、@aboutは常に優先され、新しい主語がマークアップされますが、@aboutの値が提供されていない場合は、暗黙の識別子、つまりbノードが用いられますが、@typeofが同じ働きを行います。
しかし、@aboutと@typeofのどちらも存在しない場合に、主語に到達できる方法はいくつかあります。そのうちの1つは、継承する値を明示的または暗黙的に設定し、包含しているステートメントから主語を「継承」することです。
継承される主語を設定する最も一般的な方法は、資源である目的語を親ステートメントに持つことです。German_Empireの長い名前が追加された前述の例に戻すと、そこでは次のマークアップを用いました。
<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を削除することで接続されていました。
<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を残すことで同じ効果を達成することもできます。
<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内の値)を表す目的語資源によって「含まれている」すべてのステートメントが同じ主語を持つことになり、著者がステートメントを簡単に追加できるようになります。
<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を参照するように設定されています。
<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を参照しています。
<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> .
上記のように、著者は、主語と目的語を接続したいけれども、2つのステートメントに共通する資源(つまり、2番目のステートメントの主語である、最初のステートメントのオブジェクト)に指定することには関心がない場合があります。例えば、EinsteinがSpinoza(スピノザ)の影響を受けたことを示すために、次のマークアップを使用できます。
<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プロセッサは次のトリプルを生成するでしょう。
<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と称する何かに影響を与えたと簡単に述べることができます。
<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プロセッサは、次のトリプルを生成するでしょう。
<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プロセッサは中間の目的語を作成することに注意してください。
<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をこれに移動させることです。
<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)をサポートする必要があります。
新しい主語の演算が行われると、未決の不完全なトリプルを完全にするためにもそれが用いられます。この状況は、著者が複数のステートメントを一緒に「連鎖」させたいときに発生します。例えば、著者は、Albert Einsteinがドイツ帝国で生まれたという次ようなステートメントを持っている可能性があります。
<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>
そして、この国の「長い名前」がドイツ帝国であるという追加のステートメントを持つことができます。
<span about="http://dbpedia.org/resource/German_Empire" property="dbp:conventionalLongName">the German Empire</span>
RDFaにより、著者はこのステートメントを内蔵ユニットとして他のコンテキストに挿入できます。
<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>
しかし、これによって、著者が不必要な繰り返しを避け、重複する識別子を「正規化する」ことも可能となります。この場合、それはドイツ帝国に関するものです。
<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つの部分を格納することですが、目的語がありません。
<http://dbpedia.org/resource/Albert_Einstein> dbp:birthPlace ? .
その後、処理が進むにつれて、RDFaプロセッサはドイツ帝国の長い名前に関するステートメントの主語に遭遇し、これを2つの方法で用います。まず、「不完全なトリプル」を完全にするために用います。
<http://dbpedia.org/resource/Albert_Einstein>
dbp:birthPlace <http://dbpedia.org/resource/German_Empire> .
次に、独自のトリプルを生成するために用います。
<http://dbpedia.org/resource/German_Empire> dbp:conventionalLongName "the German Empire" .
@aboutが個々に出現することにより、不完全なトリプルが完全になることに注意してください。例えば、Albert Einsteinがドイツ帝国とスイスの両方に住居を持っていたという事実をマークアップするには、著者は@relの値を1つ指定し、その後で複数の@aboutの値とともに用いればよいだけです。
<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つあります。
<http://dbpedia.org/resource/Albert_Einstein> dbp-owl:residence ? .
プロセッサが@aboutの個々の値に遭遇すると、このトリプルは完全となり、次のようになります。
<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(ショーペンハウアー)の両方に影響を与えたことを示すために、次のマークアップを使用できます。
<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>
まず、次の不完全なトリプルが格納されます。
<http://dbpedia.org/resource/Baruch_Spinoza> dbp-owl:influenced ? .
次に、RDFaプロセッサが@typeofの2つの出現を処理するときに、それぞれにbノードが生成され、それは「不完全なトリプル」を完全にするためと、追加のステートメントの主語を設定するための両方に用います。
<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ノードに帰属します。
<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つあります。処理は次のように進みます。最初に不完全なトリプルが格納されます。
<http://dbpedia.org/resource/Baruch_Spinoza> dbp-owl:influenced ? .
次に、RDFaプロセッサは、foaf:name
、dbp:dateOfBirth
、およびdbp-owl:residence
に対する述語の値を処理しますが、最初のものだけが「未決のrel」を「完全にする」必要があることに注意してください。そのため、foaf:name
を処理すると、次の2つのトリプルが生成されます。
<http://dbpedia.org/resource/Baruch_Spinoza> dbp-owl:influenced _:a . _:a foaf:name "Albert Einstein" .
しかし、dbp:dateOfBirth
を処理すると、次の1つのみが生成されます。
_:a dbp:dateOfBirth "1879-03-14"^^xsd:date .
dbp-owl:residence
の処理も同じbノードを用いますが、独自の「不完全なトリプル」も生成されることに注意してください。
_:a dbp-owl:residence ? .
これまでのように、@aboutの2つの出現は、「不完全なトリプル」をそれぞれ1度完全にします。
_:a dbp-owl:residence <http://dbpedia.org/resource/German_Empire> . _:a dbp-owl:residence <http://dbpedia.org/resource/Switzerland> .
RDFaプロセッサが生成すべき一連のトリプルは、次のとおりです。
<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> .
目的語に関しては、主語の解決、連鎖、評価コンテキストなどの説明の一部として前項で論じていますが、この項では、目的語についてより詳細に考察します。
@propertyが述語を表す場合、リテラルの目的語は、@contentまたは要素のインライン・テキストで設定できます。@contentの使用においては、リテラルにリッチなマークアップを含めることは禁じられています。要素のインライン・コンテンツが目的語を正確に表している場合は、ドキュメントは、@contentを用いてそのデータを複製するのではなく、それに依存すべきです。
IRI資源の目的語は、@relか@revの一方を用いて述語を表した後に、@href、@resourceまたは@srcのうちの1つを用いて目的語資源を明示的に提供するか、上記の連鎖技術を用いて入れ子の主語から、またはbノードから目的語を取得するかのいずれかで設定できます。あるいは、@propertyを用いてIRI資源を定義することもできます。これには、@resource、@href、または@srcが存在し、かつ、@rel、@rev、@datatype、または@contentが存在していない要があります。
@propertyが存在していて、資源属性が存在していなければ、目的語リテラルが生成されます。@propertyは述語を提供し、次の項では、生成される実際のリテラルがどのように決定されるかについて説明します。
@contentを用いて、次のようにプレーン・リテラルを示すことができます。
<meta about="http://internet-apps.blogspot.com/"
property="dc:creator" content="Mark Birbeck" />
プレーン・リテラルは、要素のコンテンツを用いて指定することもできます。
<span about="http://internet-apps.blogspot.com/"
property="dc:creator">Mark Birbeck</span>
これらのいずれの例でも次のトリプルが得られます。
<http://internet-apps.blogspot.com/> dc:creator "Mark Birbeck" .
@contentの値はどの要素のコンテンツよりも優先されるため、下記によって、上記と同じトリプルが得られます。
<span about="http://internet-apps.blogspot.com/"
property="dc:creator" content="Mark Birbeck">John Doe</span>
@datatypeを用いてリテラルにデータ型を付与できます。
これは、RDFaで次のように表すことができます。
<span property="cal:dtstart" content="2015-09-16T16:00:00-05:00"
datatype="xsd:dateTime">
September 16th at 4pm
</span>.
このマークアップが生成するトリプルでは、リテラルの後にデータ型が含まれます。
<> cal:dtstart "2015-09-16T16:00:00-05:00"^^xsd:dateTime .
XMLドキュメントは、その属性にXMLマークアップを含めることができず、これは@content内でXMLを表現できないことを意味します(下記では、XMLパーサーにエラーが生じます)。
<head>
<meta property="dc:title"
content="E = mc<sup>2</sup>: The Most Urgent Problem of Our Time" />
</head>
したがって、RDFaは@datatypeを用いてXMLリテラルを表すための任意のマークアップの使用をサポートしています。
<h2 property="dc:title" datatype="rdf:XMLLiteral">
E = mc<sup>2</sup>: The Most Urgent Problem of Our Time
</h2>
これは、XMLをリテラルに保存して、次のトリプルを生成します。
<> dc:title "E = mc<sup>2</sup>: The Most Urgent Problem of Our Time"^^rdf:XMLLiteral .
これには、rdf
という接頭辞に対するIRIマッピングが定義されている必要があります。
ここで示した例では、sup
要素は実際にはリテラルの意味の一部ですが、余分なマークアップが何も意味せず、それゆえ無視できる場合もあるでしょう。その場合は、@datatype属性を省略するか、空の@datatype値を指定すると、プレーン・リテラルを作成できます。
<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)に設定すると、データは確実にプレーン・リテラルとして解釈され、次のトリプルが得られます。
<http://dbpedia.org/resource/Albert_Einstein> foaf:name "Albert Einstein" .
このXMLリテラルの値は、RDFa要素の値の排他的正規化[XML-EXC-C14N]です。
資源である目的語の処理を統制する規則のほとんどは、主語の確立に重要であるため、上記で示した処理の記述で見つけることができます。この項は、一般的な概念や欠けていた可能性のある事項を浮き彫りにすることを目的としています。
@relまたは@revが存在していれば、1つ以上のIRIの目的語が必要です。@href、@resource、@srcとともに用いるか、これらの属性が存在しない場合は、入れ子のステートメントの主語の値とともに用いると、各属性によりトリプルが生成されます。
@relまたは@revが存在しておらず、@datatypeや@contentも存在していなければ、@property属性を@href、@resourceまたは@srcとともに用いるとトリプルが生成されます。(@propertyに関する特殊なケースに関しては、@propertyと@typeofの項も参照してください。)
@relと@revは本質的にお互いの逆です。@relは、主語としての現在の主語と、目的語としての現在の目的語資源の間の関係を確立し、@revはその正反対で、主語としての現在の目的語資源と、目的語としての現在の主語を用います。
RDFaは、ステートメントの目的語を設定する方法として@resource属性を提供しています。これは、ナビゲート可能なリンクではない資源を参照する場合に特に有用です。
<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
要素は、次のトリプルを生成します。
<http://www.example.com/candp.xhtml#q1> <http://purl.org/dc/terms/source> <urn:ISBN:0140449132> .
@resourceが存在していなければ、@hrefまたは@srcが目的語の設定に関して次の優先順となります。
述語が@relで表されていれば、RDFaステートメントの要素の@hrefまたは@srcを用いてIRI参照で目的語を識別します。これらの型はIRIです。
<link about="mailto:[email protected]" rel="foaf:knows" href="mailto:[email protected]" />
1つの要素で@relと@revの両方を同時に用いることもできます。これは、例えば、ある写真がMark(マーク)によって撮影されているけれども、その写真は彼を描写したものでもある場合など、2つの事物が互いに2つの異なる関係にある場合に特に便利で、
<img about="http://www.blogger.com/profile/1109404"
src="photo1.jpg" rev="dc:creator" rel="foaf:img"/>
これは、次の2つのトリプルを生成します。
<photo1.jpg> dc:creator <http://www.blogger.com/profile/1109404> . <http://www.blogger.com/profile/1109404> foaf:img <photo1.jpg> .
@relまたは@revでトリプルの述語が表されているけれども、@href、@src、または@resourceが同じ要素に存在していないければ、「未決のrel」が存在します。これにより、現在の主語と可能性のあるすべての述語(それが「正方向(forwards)」、つまり@relの値であるか、そうではない、つまり@revの値であるかを示す指示子が付く)は、「不完全なトリプル」として格納され、それらのトリプルを「完全」にするために使用できる主語の発見が保留されます。
このプロセスの詳細は、「不完全なトリプル」の完全化で記述しています。
RDFグラフはトリプルのコレクションです。これは、同じ主語と述語を共有する2つのトリプルがそのグラフに含まれている場合も同様です。
<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トリプルで次のように記述できます。
@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は、これらの構造に対する構文の省略形を有しています。
@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:first
、rdf:rest
、および特殊な資源rdf:nil
を用いて、RDFaで同じ構造を再現することももちろん可能です。しかし、これを簡単にするために、RDFaでは@inlistが提供されています。この属性が示すのは、その要素で生成された目的語をリストに入れるべきであるということであり、そのリストは共通する述語と主語で用いられます。以前の構造がRDFaではどのようになるかは次のとおりです。
<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のアドレスを公表することを決定することができます。
<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>
これは、次を生成します。
@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を用いて同じトリプルに正確に導くことができました。
<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プロファイルに参照すると、次のように記述できます。
<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>
これは、次のような結果となります。
@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なしに、次を用いて、空のリストを表現することも可能であることに注意してください。
<span rel="prop" resource="rdf:nil"/>
RDFaは、ホスト言語が初期コンテキストを定義することを認めています。そのコンテキストとは、用語、接頭辞マッピング、および/またはデフォルトの語彙宣言のコレクションです。初期コンテキストは、パーサーが本来知っているものであるか、外部ドキュメントとしてロードして処理するかのどちらかです。このドキュメントは、承認済みのRDFaホスト言語(現在は、XML+RDFa、XHTML+RDFa[XHTML-RDFA]、HTML+RDFa[HTML-RDFA)で定義されているものでなければなりません(MUST)。他の形式(例えば、RDF/XML[RDF-SYNTAX-GRAMMAR]やTurtle[TURTLE])で定義することもできます(MAY)。初期コンテキストのドキュメントが処理されると、次のような評価が行われます。
rdfa:prefix
とrdfa:uri
である述語の対を持つ主語ごとに、rdfa:prefix
目的語リテラル(キー)からrdfa:uri
目的語リテラル(値)へのキー-値(key-value)マッピングを作成する。「接頭辞」要素を小文字に変換した後に、このマッピングを初期評価コンテキストのIRIマッピングのリストに追加する。rdfa:term
とrdfa:uri
である述語の対を持つ主語ごとに、rdfa:term
目的語リテラル(キー)からrdfa:uri
目的語リテラル(値)へのキー-値(key-value)マッピングを作成する。このマッピングを初期評価コンテキストの用語マッピングに追加する。rdfa:vocabulary
である抽出されたトリプルについては、初期評価コンテキストのデフォルトの語彙がrdfa:vocabulary
述語の目的語リテラルとなるように定義する。RDFシリアル化を用いてRDFa初期コンテキストを定義する場合は、上記の語彙用語を用いてコンテキストの要素を宣言しなければなりません(MUST)。
このメカニズムにより取得した関連するトリプルをキャッシュすることが推奨されます(RECOMMENDED)。実装には有名で安定したRDFa初期コンテキストの定義を組み込むことが推奨されます(RECOMMENDED)。
rdfa:uri
述語に対する目的語リテラルは、絶対IRIでなければならない(MUST)。rdfa:term
述語に対する目的語リテラルは、用語の生成規則と一致しなければならない(MUST)。rdfa:prefix
述語に対する目的語リテラルは、接頭辞の生成規則と一致しなければならない。rdfa:vocabulary
述語に対する目的語リテラルは、絶対IRIでなければならない(MUST)。rdfa:vocabulary
述語が複数あれば、または同じ主語を共有する追加のrdfa:uri
またはrdfa:term
述語があれば、RDFaプロセッサは、関連するマッピングを作成してはならない(MUST NOT)。RDFaはRDFに基づいているため、データに関するより多くの知識を得るために、RDF語彙のセマンティクスを使用できます。語彙、プロパティー、クラスは、IRIで識別され、それによって発見可能となります。これらのIRIの位置で公開されているRDFデータを取得し、特定のセマンティクスを用いているプロパティーとクラスの記述を適用できます。
RDFa語彙拡張は、処理モデルで記述されている通常の処理ステップの完了後に追加できるオプションの処理ステップです。語彙拡張は、参照される語彙に記述されている規則とプロパティー/クラス関係に基づいて出力グラフにトリプルを追加するOWL含意[OWL2-OVERVIEW]の非常に小さなサブセットに依存します。語彙拡張は、例えば、OWL 2 RL推論システムを含む、より大きなRDFツール・セットの一部として実行できます(MAY)。あるいは、順序の処理ステップ2で出力グラフに追加された語彙データを用いて、出力グラフが生成された後に、またはRDFaプロセッサによる最後の処理ステップとして、別個の専用の(例えば、規則ベースの)推論システムを用いて拡張することもできます(MAY)。
これらのセマンティクスによって含意される推論されたステートメントを拡張することにより、一般化されたデータを、RDFaを組み込んだデータのその後の使用のために提供すると非常に有用でありえます。これにより、有名な語彙を拡張して、それらのプロパティーを出力グラフに自動的に追加する既存の語彙が提供されることになります。例えば、クリエイティブ・コモンズ語彙の名前空間ドキュメント、すなわちhttp://creativecommons.org/ns
は、cc:license
がdc:license
のサブプロパティーであると定義しています。@vocab属性を用いて、ライセンス情報を次のように記述できます。
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>.
これは、次の出力グラフになります。
@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#> .
語彙拡張後、次が出力グラフに含まれます。
@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つの名前空間で用語を使用できるようになり、その結果、他の主要な語彙のプロパティーおよび/またはクラスがインポートされるようになります。これは、データがより広く検索できるようになるため、公開者にとって有益であり、有名な語彙の参照が促進されます。
この項は非規範的です。
順序で定義されている処理ステップに従って出力グラフが生成されると、プロセッサはその出力グラフで以下の処理ステップを実行できます(MAY)。それは、RDFaプロセッサの語彙拡張制御で規定されているように、プロセッサのユーザが明示的にそれを要求した場合にのみ、実行しなければなりません。
語彙グラフは、次のように作成されます。現在のドキュメントの(基底)IRIの主語と、rdfa:usesVocabulary
の述語を持つ出力グラフの個々の目的語IRIが逆参照されます。逆参照によってRDFグラフのシリアル化が行われる場合、そのシリアル化が解析され、その結果のグラフが語彙グラフと統合されます。(語彙拡張が可能なRDFaプロセッサは、RDFaでシリアル化されたRDFグラフを受け入れなければならず(MUST)、RDF/XML[RDF-SYNTAX-GRAMMAR]やTurtle [TURTLE]などの標準的なRDFのシリアル化形式を受け入れるべきです(SHOULD)。)
第2ステップで特定の語彙が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-spo1
、prp-eqp1
、prp-eqp2
、cax-sco
、cax-eqc1
、およびcax-eqc2
です。
この項で記述している含意は、RDFaの最小限有効なレベルです。もちろん、プロセッサは、例えば、完全なRDFS[RDF11-MT]やOWL[OWL2-OVERVIEW]などの含意を含む、より強力な含意レジームへの準拠を選択することもできます。これらの含意を用いて、アプリケーションは、プロパティーのrdfs:range
をチェックすることにより、データ型の検証を実行したり、例えば、OWLのプロパティー連鎖によって提供される高度な機能を用いて語彙をさらに連結したりすることができます。
適合するRDFaプロセッサが語彙拡張を提供することは必須ではありません。
RDFaプロセッサが語彙拡張を提供している場合、それはデフォルトで実行されてはなりません(MUST NOT)。その代わりに、プロセッサは、オプションであるvocab_expansion
を提供しなければならず(MUST)、それは、用いると、出力グラフを返す前にRDFaプロセッサが語彙拡張を実行するように指示します。
語彙拡張は、語彙グラフとOWL 2の含意規則で記述されますが、プロセッサは同等の結果を得られるプロセスを自由に使用できます。
この項は非規範的です。
RDFaプロセッサに関しては、このメカニズムにより検索された関連するグラフをキャッシュすることが推奨されます(RECOMMENDED)。キャッシュは、通常、有効期限やキャッシュ制御などのHTTP応答ヘッダーに基づきます。
語彙の公開者に関しては、語彙に対するIRIは逆参照可能であるべきで(SHOULD)、語彙の記述を含んだRDFグラフを返すべきです。この語彙の記述は、RDFaでエンコードを行って利用できるべきで(SHOULD)、他のRDFシリアル化構文(様々な形式の中から選択するために内容交渉を用いて)でも利用できます(MAY)。可能であれば、語彙の記述に、他の有名な語彙に語彙の用語をリンクするサブプロパティーとサブクラスのステートメントを含むべきです(SHOULD)。最後に、HTTP応答には、キャッシュ制御に使用できる有効期限などのフィールドを含むべきです(SHOULD)。
マークアップ言語におけるCURIEの使用を容易にするために、この仕様では、XHTMLデータ型空間(http://www.w3.org/1999/xhtml/datatypes/
)にいくつかの追加のデータ型を定義しています。マークアップ言語にこれらの定義をインポートしたい場合は、それをスキーマ文法に関する「データ型」ファイルで見つけることができます。
具体的には、次のデータ型が定義されています。
この項は非規範的です。
これらのデータ型に対する、次の参考情報のXML DTDの定義は、例として掲載しています。
<?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>
この項は非規範的です。
これらのデータ型に対する、次の参考情報のXML DTDの定義は、例として掲載しています。
<!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" >
RDFa語彙には3つの役割があります。それには、初期コンテキストのドキュメントの用語と接頭辞を定義するための述語が含まれ、プロセッサ・グラフに含まれている可能性のあるメッセージに対するクラスと述語が含まれ、最後に、語彙処理に必要な述語が含まれます。語彙のIRIはhttp://www.w3.org/ns/rdfa#
です。このドキュメントで用いている通常の接頭辞はrdfa
です。
この語彙仕様は、XHTML+RDFa 1.1、Turtle、およびRDF/XMLの形式で利用できます。
RDFaの語彙には、次のトリプルが含まれています(ここではTurtle[TURTLE]形式で示しています)。
@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の文字列とその使用法を、例えば空白ノードの一部として、接頭辞および/または用語の形で「対」にするために用います。例は次のようなものでありえます。
[] rdfa:uri "http://xmlns.com/foaf/0.1/name" ; rdfa:prefix "foaf" .
これは、FOAF IRIに対する接頭辞を定義します。
語彙には、次の用語の定義が含まれています(ここではTurtle[TURTLE]形式で示しています)。
@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 .
語彙には、次の用語の定義が含まれています(ここではTurtle[TURTLE]形式で示しています)。
@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." .
この項は非規範的です。
この仕様では、いくつかの新機能を導入し、前バージョンのいくつかの機能の挙動を拡張しています。次の要約は、RDFaプロセッサの開発者にとって有用もしれませんが、包括的であることを意味するものではありません。
この仕様は[RDFA-SYNTAX]とできる限り下位互換性を保つよう努めていますが、上記の変更は、RDFa 1.1プロセッサとRDFa 1.0プロセッサでは、処理を行ったときに同じドキュメントに対して異なるRDFトリプルが出力される可能性がある場合がありえることを意味します。これらの違いを最小限に抑えるために、ドキュメントの著者は次のことを行うことができます。
html
要素にXHTML+RDFa 1.0
という値の@version属性を置く。datatype='rdf:XMLLiteral'
を用いる。datatype=''
を用いる。XHTML+RDFa 1.1ドキュメントを作成する場合、次のようにしてRDFa 1.0適合のプロセッサとの非互換性を削減できます。
html
要素にXHTML+RDFa 1.0
という値のversion属性を置く。datatype='rdf:XMLLiteral'
を用いる。datatype=''
を用いる。この項は非規範的です。
公開時点のRDFaワーキンググループの正式なメンバーは次のとおりです。