[8] 本項は [[RDFa]] を解釈する側の処理方法について、仕様書をできるだけ好意的に解釈しようと試みるものです。
[[RDFa]] の[[仕様書]]は 00年代 [[W3C]] レベルの品質でしか無いので、
[[相互運用][相互運用性]]可能なレベルで実装できる程度に理解するのは難しいです。

* RDFa 処理器 (RDFa 1.0)

[2] [DFN[[RUBYB[適合]@en[conforming]] RDFa [RUBYB[処理器]@en[processor]]]]は、 
[[RDFa]] 仕様書に従って [[RDF]] [[三項組]]を取り出す[[処理器]]です。

** 仕様書

[REFS[
-[1] [CITE@en[RDFa in XHTML: Syntax and Processing]] ([TIME[2008-10-14 00:17:32 +09:00]] 版) <http://www.w3.org/TR/2008/REC-rdfa-syntax-20081014/#processorconf>
]REFS]

** 要件

-[3] [[消費応用]]に対し、 [[RDFa]] 仕様書の[[処理モデル]]の章の規則によって生成した[[三項組]]すべてを含む単一の
[[RDFグラフ]]を提供しなければ[['''なりません''']]
-[5] >>4 の追加[[三項組]]を[[既定グラフ]]において提供しては[['''なりません''']]

** 許可

-[4] [[RDFa]] 仕様書の規則に則らない[[三項組]]を提供して[['''構いません''']]

** 関連

[6] [[適合RDFa利用者エージェント]]との関係は明示されていません。

[240] [[HTML+RDFa]] 仕様書は、 [[XHTML+RDFa 1.0]] が [CODE(MIME)@en[[[text/html]]]]
で提供されることがあるとして、 [CODE(MIME)@en[[[text/html]]]] であるにも関わらず [CODE(XMLa)@en[[[xmlns]]]] 
[[属性]]を処理する方法と適合性をなぜか規定しています。

* RDFa 処理器 (RDFa 1.1)

[17] [[RDFa]] が含まれる[[文書]]を処理して[[グラフ]]を取り出すものを [DFN[RDFa [RUBYB[処理器]@en[processor]]]]といいます。

[15] [[RDFa]] の処理は[[文書木]]に対する[[探索]]として定義されています。[[文書]]オブジェクトから順に[[子要素]]を[[文書順]]にたどって処理していきます。 [SRC[>>16]]

** 仕様書

[REFS[
- [14] [CITE@en[RDFa Core 1.1 - Second Edition]] ([TIME[2013-08-15 17:12:47 +09:00]] 版) <http://www.w3.org/TR/rdfa-core/#h3_processorconf>
- [16] [CITE@en[RDFa Core 1.1 - Second Edition]] ([TIME[2013-08-15 17:12:47 +09:00]] 版) <http://www.w3.org/TR/rdfa-core/#h2_s_model>
- [130] [CITE@en[RDFa Core 1.1 - Second Edition]] ([TIME[2013-08-15 17:12:47 +09:00]] 版) <http://www.w3.org/TR/rdfa-core/#h2_s_initialcontexts>
]REFS]

** 出力

[11] [DFN[[RUBYB[[[適合RDFa処理器]]]@en[conforming RDFa Processor]]]]は処理の結果として[DFN[[RUBYB[[[出力グラグ]]]@en[output graph]]]]と[DFN[[RUBYB[[[処理器グラグ]]]@en[processor graph]]]]を[[応用]]に提供しなければ[['''なりません''']]。 [SRC[>>5]]

[12] [[出力グラフ]]は、 [[RDFa 1.1]] の処理モデルにより得られたすべての[[三項組]]からなる[[RDFグラグ]]です。 [SRC[>>5]]

[13] [[処理器グラフ]]は、[[RDFa処理器]]が報告した[[エラー]]、[[警告]]、情報を集めたものです。 [SRC[>>5]]

;; [127] [[処理器グラフ]]には[[接頭辞]]に関するエラーなどが含まれることになっています。
そのようなエラーがあっても処理自体は継続されます。

;; [128] エラーといっても[[接頭辞]]以外はほとんどどんな記述であっても適当に解釈されてしまうので、
誤った[[マーク付け]]を検出する目的ではあまり使いものにならなそうです。

[129] [[RDFa処理器]]が [[Webアプリケーション]]として実装されている場合には [DFN[[CODE[[[rdfagraph]]]]]]
という [[query parameter]] でどの[[グラフ]]を得たいかを指定することになっています [SRC[>>16]]。

* 適合 XHTML+RDFa 1.0 利用者エージェント

** 仕様書

[REFS[
- [166] [CITE@en[RDFa in XHTML: Syntax and Processing]] ([TIME[2008-10-14 00:17:32 +09:00]] 版) <http://www.w3.org/TR/2008/REC-rdfa-syntax-20081014/#uaconf>
]REFS]

** 要件

[167] [DFN[[RUBYB[適合利用者エージェント]@en[conforming user agent]]]]には次の2要件が課されています。
[FIG[
- [168] [[RDFa 1.0]] 仕様書で[[必須]]とされた[[機能]]すべてに対応しなければ[['''なりません''']]。
- [169] [[XHTML m12n 1.1]] [[XHTML族利用者エージェント]]でなければ[['''なりません''']]。
]FIG]

** 関連

[170] [[適合RDFa処理器]]という[[クラス]]が別途定義されています。その関係は明示されていません。

** メモ

[171] あいかわらず「必須とされたすべての機能」などという曖昧な要件を課しています。

* 適合 XHTML+RDFa 1.1 利用者エージェント

** 仕様書

[REFS[
- [172] [CITE[XHTML+RDFa 1.1]] ([TIME[2012-06-05 02:29:56 +09:00]] 版) <http://www.w3.org/TR/2012/REC-xhtml-rdfa-20120607/#user-agent-conformance>
]REFS]

** 要件

[FIG[
- [173] [[XHTML+RDFa 1.1]] 仕様書で[[必須]]とされた[[機能]]すべてに対応しなければ[['''なりません''']]。
- [174] [[XHTML m12n 1.1 2e]] [[適合XHTML族利用者エージェント]]の要件に対応しなければ[['''なりません''']]。
]FIG]

** 関連

[175] [[RDFa処理器]]との関係はやはり不明確です。 [[RDFa Core 1.1]] の実装が [[RDFa処理器]]、
[[XHTML+RDFa 1.1]] の実装が[[利用者エージェント]]と呼ばれているようですが・・・。

* HTML+RDFa 処理器と利用者エージェント

** 仕様書

[REFS[
- [176] [CITE@en[HTML+RDFa 1.1]] ([TIME[2013-08-20 15:49:04 +09:00]] 版) <http://www.w3.org/TR/2013/REC-html-rdfa-20130822/#rdfa-processor-conformance>
]REFS]

** 要件

[177] [[RDFa処理器]]には次の要件が課されています [SRC[>>176]]。
[FIG[
- [178] [[RDFa Core 1.1]] 仕様書で必須とされた機能をすべて実装しなければ[['''なりません''']]。
- [179] [[HTML+RDFa 1.1]] 仕様書で必須とされた機能をすべて実装しなければ[['''なりません''']]。
]FIG]

[180] [[利用者エージェント]]には次の要件が課されています [SRC[>>176]]。
[FIG[
- [181] [[HTML 5.0]] 仕様書の適合性の項の要件すべてに適合しなければ[['''なりません''']]。
- [183] [[HTML+RDFa 1.1]] 仕様書で必須とされた機能をすべて実装しなければ[['''なりません''']]。
- [182] [[RDFa Core 1.1]] 仕様書で必須とされた機能をすべて実装しなければ[['''なりません''']]。
ただし [[HTML+RDFa 1.1]] 仕様書で上書きされた機能を除きます。
]FIG]

[184] [[処理器]]と[[利用者エージェント]]で別になっているのは、ごくわずかなレンダリング機能しか備えないものなど、
[[RDFa処理器]]として妥当であっても [[HTML 5.0]] 処理器として妥当でないものがあり得るからとされています [SRC[>>176]]。

[185] 実際には [[HTML5]] はむしろそのようなツールの類であっても適合性を主張できるようにむしろ慎重に定義されており、
[[HTML5]] に対する無理解に由来する誤った規定のように思えます。仮に >>184 の主張が正しいとしたところで、
[[RDFa]] に対する適合性の一部として [[HTML5]] への適合性を要求する必要性は見当たらず、
なぜ敢えて2つの適合水準を設けているのか不可解です。

[186] >>178 と >>182 は同じですが、 >>179 と >>183 は異なっています。この違いが意図的なものなのかどうかはわかりませんが、
隣同士の章でそれほど離れておらず、違いの説明まで書かれている要件に誤って混入した規定とも思えません。
>>182 の通り [[HTML+RDFa]] と [[RDFa]] 本体の機能に一部矛盾があると解釈すると、 >>178 と >>179
が同時に満たせるのか (適合する[[RDFa処理器]]が存在できるのか) が気になります。

;; [187] [[HTML+RDFa 1.1]] と同時に [[RDFa Core 1.1]] の第2版が出版されているので、なぜそのような衝突する規定が
[[RDFa Core 1.1]] 側で改訂されずに[[猿パッチ]]になっているのか謎ですが・・・。

* RDFa 1.1 処理モデル

** 評価文脈

[18] [[RDFa 1.1]] の処理は[DFN[[RUBYB[[[評価文脈]]]@en[evaluation context]]]]を使って行われます。
開始時には[DFN[[RUBYB[初期文脈]@en[initial context]]]]が使われ、[[子要素]]の評価の際はそれぞれのために作られた[[評価文脈]]が使われます。
[SRC[>>16]]

[19] [[評価文脈]]には次の項目が含まれます [SRC[>>16]]。
[FIG[
-[DFN[[RUBYB[基底]@en[base]]]]
-[DFN[[RUBYB[親主語]@en[parent subject]]]]
-[DFN[[RUBYB[親目的語]@en[parent object]]]]
-[DFN[[RUBYB[IRI 写像]@en[IRI mappings]]]]のリスト
-[DFN[[RUBYB[不完全三項組]@en[incomplete triples]]]]のリスト
-[DFN[[RUBYB[リスト写像]@en[list mapping]]]]
-[DFN[[RUBYB[言語]@en[language]]]]
-[DFN[[RUBYB[語写像]@en[term mappings]]]]のリスト
-[DFN[[RUBYB[既定語彙]@en[default vocabulary]]]]
]FIG]

[20] [[初期文脈]]は次のように定義されています。
[FIG[
- [[基底]]は処理する[[文書]]の[[基底URL]] [SRC[>>16]]
- [[親主語]]は[[基底]]と同じ [SRC[>>16]]
- [[親目的語]]は null [SRC[>>16]]
- [[IRI写像]]のリストは空 ([[RDFaホスト言語]]が定義することもできる) [SRC[>>16]]
- [[不完全三項組]]のリストは空 [SRC[>>16]]
- [[リスト写像]]は空 [SRC[>>16]]
- [[言語]]は null [SRC[>>16]]
- [[語写像]]のリストは定義しない ([[RDFaホスト言語]]が定義して[['''構わない''']]) [SRC[>>16]]
- [[既定語彙]]は定義しない ([[RDFaホスト言語]]が定義して[['''構わない''']]) [SRC[>>16]]
]FIG]

;; [21] 仕様書の規定は曖昧かつ分散しています。この程度の単純な定義くらいはっきり書けてほしいのですが・・・。

[154] [[RDFa Core 1.1]] 本体仕様には明記されていませんが、[[初期文脈]]は複数あって順番に適用するということがあり得るようです。
(>>145, >>191)

[131] この[[ホスト言語]]による[[初期文脈]]の定義については、
構文解析器はそれをハードコードしても構いませんし、外部の文書として読み込む形にしても構いません。
その外部の文書は、 [[RDFaホスト言語]]として承認されたものを使い、
[[RDFa]] 仕様書で規定された[[語彙]]により記述され[['''なければならない''']]
[SRC[>>130]] とされています。
いずれにせよよく知られた安定した[[初期文脈]]の定義は埋め込んでいる[['''べきです''']] [SRC[>>130]]。

;; [132] [[RDFaホスト言語]]の適合性の規定によると、そのような文書を用意すること自体は[['''推奨''']]でしかないようです。

;; [7] 歴史的事項は [[HTML]] の [CODE(HTMLa)@en[[[profile]]]] [[属性]]の歴史の項も参照。

[22] [[評価文脈]]に関連して、処理中は次の一時変数が使われます [SRC[>>16]]。
[FIG[
- [DFN[[RUBYB[IRI写像の局所リスト]@en[local list of IRI mappings]]]]: 初期状態は空
- [DFN[[RUBYB[不完全三項組の局所リスト]@en[local list of incomplete triples]]]]: 初期状態は空
- [DFN[[RUBYB[現在言語]@en[current language]]]]: 初期状態は空
- [DFN[[RUBYB[要素を飛ばす]@en[skip element]]]]フラグ
- [DFN[[RUBYB[新主語]@en[new subject]]]]
- [DFN[[RUBYB[現在特性値]@en[current property value]]]]
- [DFN[[RUBYB[現在目的語資源]@en[current object resource]]]]
- [DFN[[RUBYB[型付き資源]@en[typed resource]]]]
- [DFN[[RUBYB[局所語写像]@en[local term mappings]]]]
- [DFN[[RUBYB[局所リスト写像]@en[local list mapping]]]]
- [DFN[[RUBYB[局所既定語彙]@en[local default vocabulary]]]]
]FIG]

** 処理

[23] [[RDFa]] の[[属性]]は[[ホスト言語]]によっては省くことができますが、
その場合当該[[属性]]に関する処理は行いません [SRC[>>16]]。

[27] [[CURIE]] を含む[[属性]]の処理については、 [[CURIE]] の項をご覧ください。 [[CURIE]]
等が[[非妥当]]である場合その値が無視されると規定されており、その結果[[属性]]が[[空]]とみなされることもあります。
空と[[属性]]が存在しないのは別の状態のようです。

[25] [DFN[[RUBYB[現在要素]@en[current element]]]]に対する [[RDFa]] の処理は次のように行われます [SRC[>>16]]。

[FIG[
= [24] 次の通り初期化します。
-- [[要素を飛ばす]]フラグは[[偽]]に
-- [[新主語]]、[[現在目的語資源]]、[[型付き資源]]、[[不完全三項組の局所リスト]]は [[null]] に
-- その他は[[評価文脈]]の値に
= [26] [[現在要素]]の [CODE(HTMLa)@en[[[vocab]]]]
[[属性]]の値があれば、それを[[解決]]して[[局所既定語彙]]とします。空なら、[[ホスト言語]]によって規定された既定値 (または null) とします。
-- ここでいう既定値とは[[初期文脈]]の[[既定語彙]]と同じものでしょうか?
-= [28] 値があれば ([[基底]], [CODE(URI)[[[http://www.w3.org/ns/rdfa#usesVocabulary]]]], [[局所既定語彙]]) の[[三項組]]を生成します。
= [29] [[現在要素]]で[[IRI写像]]が定義されていれば、[[IRI写像の局所リスト]]に追加します。既に同名のものがあれば上書きします。
== [30] [CODE(XML)@en[[[xmlns]]]] [[宣言]]があれば、[[名前空間接頭辞]]を[[接頭辞]]、[[属性値]]を [[IRI]] とする[['''べきです''']]。
--- この手順は[['''べき''']]レベルであり、[['''必須''']]ではないようです。
== [31] [CODE(HTMLa)@en[[[prefix]]]] [[属性]]があれば、そこにある[[接頭辞]]と [[IRI]] の組を最初から最後の順で処理していきます。
=- [32] ここで[[接頭辞]]は[[小文字]]に変換しなければ[['''なりません''']]。
=- [33] また [[IRI]] を[[解決]]しては[['''なりません''']]。
= [34] [[現在要素]]から[[言語]]を設定します。[[ホスト言語]]はこの方法を定義して[['''構いません''']]。
-- 定義されていないときは好きにしていいのでしょうか...?
-- [[XML+RDFa]] では [CODE(XMLa)@en[[[xml:lang]]]] [[属性]]を使っています。
= [35] [[現在要素]]が [CODE(HTMLa)@en[[[rel]]]] も [CODE(HTMLa)@en[[[rev]]]] を有していなければ、
== [36] [[現在要素]]が [CODE(HTMLa)@en[[[property]]]] [[属性]]を有しており、
[CODE(HTMLa)@en[[[content]]]] も [CODE(HTMLa)@en[[[datatype]]]] も持っていなければ、
=== [37] [[新主語]]を次の値とします。
==== [38] [CODE(HTMLa)@en[[[about]]]] [[属性]]から値を得られれば、その[[資源]]
==== [39] そうでなく[[現在要素]]が[[文書]]の[[根要素]]なら、空の [CODE(HTMLa)@en[[[about]]]]
[[属性]]があったとみなし、その[[資源]]
==== [40] そうでなく[[親目的語]]があれば、それ
=== [41] [CODE(HTMLa)@en[[[typeof]]]] があれば、[[型付き資源]]を次の値とします。
==== [42] [CODE(HTMLa)@en[[[about]]]] [[属性]]から値を得られれば、その[[資源]]
==== [43] そうでなく[[現在要素]]が[[文書]]の[[根要素]]なら、空の [CODE(HTMLa)@en[[[about]]]]
[[属性]]があったとみなし、その[[資源]]
==== [44] そうでなければ、
===== [45] [CODE(HTMLa)@en[[[resource]]]] [[属性]]から値を得られれば、その[[資源]]
===== [46] そうでなく [CODE(HTMLa)@en[[[href]]]] [[属性]]から値を得られれば、その [[IRI]]
===== [47] そうでなく [CODE(HTMLa)@en[[[src]]]] [[属性]]から値を得られれば、その [[IRI]]
===== [48] そうでなければ新しい [[bnode]]
===== [49] いずれにせよ、[[現在オブジェクト資源]]を[[型付き資源]]の値とします。
== [50] そうでないなら、
=== [51] [CODE(HTMLa)@en[[[about]]]], [CODE(HTMLa)@en[[[href]]]], [CODE(HTMLa)@en[[[src]]]],
[CODE(HTMLa)@en[[[resource]]]] のいずれかがあれば、[[新主語]]は次の値とします。
==== [52] [CODE(HTMLa)@en[[[about]]]] [[属性]]から値を得られれば、その[[資源]]
==== [53] そうでなく [CODE(HTMLa)@en[[[resource]]]] [[属性]]から値を得られれば、その[[資源]]
==== [54] そうでなく [CODE(HTMLa)@en[[[href]]]] [[属性]]から値を得られれば、その [[IRI]]
==== [55] そうでなく [CODE(HTMLa)@en[[[src]]]] [[属性]]から値を得られれば、その [[IRI]]
=== [56] そうでなく [CODE(HTMLa)@en[[[resource]]]] [[属性]]から[[資源]]を得られなければ、
==== [57] そうでなく[[現在要素]]が[[文書]]の[[根要素]]なら、空の [CODE(HTMLa)@en[[[about]]]]
[[属性]]があったとみなし、その[[資源]]を[[新主語]]とします。
==== [58] そうでなく [CODE(HTMLa)@en[[[typeof]]]] があれば、[[新主語]]をその [[bnode]] とします。
==== [59] そうでなく[[親目的語]]があれば、[[新主語]]をその値とします。また
[CODE(HTMLa)@en[[[property]]]] [[属性]]がなければ、[[要素を飛ばす]]フラグを[[真]]とします。
=== [60] [CODE(HTMLa)@en[[[typeof]]]] [[属性]]があれば、[[型付き資源]]を[[新主語]]の値とします。
= [61] [[現在要素]]が [CODE(HTMLa)@en[[[rel]]]] か [CODE(HTMLa)@en[[[rev]]]] を有していれば、
== [62] [[新主語]]を次の値とします。
=== [63] [CODE(HTMLa)@en[[[about]]]] [[属性]]から値を得られれば、その[[資源]]
== [64] [CODE(HTMLa)@en[[[typeof]]]] があれば、[[型付き資源]]の値を[[新主語]]とします。
== [65] これで資源が決まらなければ次のようにします。
=== [66] [[現在要素]]が[[文書]]の[[根要素]]なら、空の [CODE(HTMLa)@en[[[about]]]]
[[属性]]があったとみなし、その[[資源]]を[[新主語]]とします。
=== [67] そうでなく[[親目的語]]があれば、それを[[新主語]]とします。
== [68] [[現在目的語資源]]を次の値とします。
=== [69] [CODE(HTMLa)@en[[[resource]]]] [[属性]]から値を得られれば、その[[資源]]
=== [70] そうでなく [CODE(HTMLa)@en[[[href]]]] [[属性]]から値を得られれば、その [[IRI]]
=== [71] そうでなく [CODE(HTMLa)@en[[[src]]]] [[属性]]から値を得られれば、その [[IRI]]
=== [72] そうでなく [CODE(HTMLa)@en[[[typeof]]]] があって [CODE(HTMLa)@en[[[about]]]] がなければ新しい [[bnode]]
== [73] [CODE(HTMLa)@en[[[typeof]]]] があって [CODE(HTMLa)@en[[[about]]]] がなければ、[[型付き資源]]を[[現在目的語資源]]とします。
= [74] >>35 か >>61 で[[型付き資源]]が [[null]] 以外に設定されたなら、
== [75] [CODE(HTMLa)@en[[[typeof]]]] から得られた [[IRI]] それぞれについて、[[三項組]]
([[型付き資源]]、 [CODE[[[rdf:type]]]]、 [[IRI]]) を生成します。
= [76] ここまでで[[新主語]]が [[null]] 以外かつ[[親目的語]]以外に設定されていれば、
[[評価文脈]]の[[リスト写像]]を新しい空の[[写像]]に置き換えます。
= [77] ここまでで[[現在目的語資源]]が [[null]] 以外に設定されていれば、
== [78] [CODE(HTMLa)@en[[[inlist]]]] と [CODE(HTMLa)@en[[[rel]]]] の両方があれば、
=== [79] [CODE(HTMLa)@en[[[rel]]]] から得られた [[IRI]] それぞれについて、
==== [80] [[IRI]] に関連付けられたリストが[[局所リスト写像]]になければ、新しいリストを追加します。
==== [81] そのリストに[[現在目的語資源]]を追加します。
== [82] [CODE(HTMLa)@en[[[rel]]]] [[属性]]があって [CODE(HTMLa)@en[[[inlist]]]] [[属性]]がなければ、
[CODE(HTMLa)@en[[[rel]]]] [[属性]]から得られた [[IRI]] それぞれについて、[[三項組]]
([[新主語]], [[IRI]], [[現在目的語資源]]) を追加します。
== [84] [CODE(HTMLa)@en[[[rev]]]] [[属性]]があれば、得られた [[IRI]] それぞれについて、 [[三項組]]
([[現在目的語資源]], [[IRI]], [[新主語]]) を追加します。
= [85] [[現在目的語資源]]が null であれば、
== [86] [CODE(HTMLa)@en[[[rel]]]] と [CODE(HTMLa)@en[[[inlist]]]] があれば、 [CODE(HTMLa)@en[[[rel]]]]
から得られた [[IRI]] それぞれについて、
=== [87] [[IRI]] に関連付けられたリストが[[局所リスト写像]]になければ、新しいリストを追加します。
=== [88] [[不完全三項組の局所リスト]]に (リスト = [[局所リスト写像]]から [[IRI]] へのリスト, 方向性 = なし) を追加します。
== [89] そうでなければ、[[不完全三項組の局所リスト]]に (述語 = [[IRI]], 方向性 = 正) を追加します。
== [90] [CODE(HTMLa)@en[[[rev]]]] があれば、得られた [[IRI]] それぞれについて、[[不完全三項組の局所リスト]]に
(述語 = [[IRI]], 方向性 = 逆) を追加します。
== [91] これらいずれかの場合には、[[現在目的語資源]]は新しい [[bnode]] とします。
= [92] [CODE(HTMLa)@en[[[property]]]] があれば、
== [93] [[現在特性値]]は次の値です。
=== [94] [CODE(HTMLa)@en[[[datatype]]]] があり、空以外の値を得られ、それが [[rdf:XMLLiteral]] 以外なら、
[[型付きリテラル]]とします。その[[リテラル]]の値は、 [CODE(HTMLa)@en[[[content]]]]
があればその値、なければ[[子孫]]の[[テキスト節点]]の値を連結したものとします。型は
[CODE(HTMLa)@en[[[datatype]]]] から得た値とします。
=== [95] そうでなく [CODE(HTMLa)@en[[[datatype]]]] が空であれば、
[[平リテラル]]とします。その[[リテラル]]の値は、[CODE(HTMLa)@en[[[content]]]]
があればその値、なければ[[子孫]]の[[テキスト節点]]の値を連結したものとします。
=== [96] そうでなく、 [CODE(HTMLa)@en[[[datatype]]]] があり、得られた値が [[rdf:XMLLiteral]]
なら、 [[XMLリテラル]]とします。 [[XMLリテラル]]の値は[[現在要素]]の[[子孫]] ([[現在要素]]自体は含みません。)
を[[排他的XML正準化1.0]]により[[直列化]]したものとします。型は [[rdf:XMLLiteral]] の [[IRI]] とします。
=== [97] そうでなく [CODE(HTMLa)@en[[[content]]]] があれば、その値の[[平リテラル]]とします。
=== [98] そうでなく [CODE(HTMLa)@en[[[rel]]]]、[CODE(HTMLa)@en[[[rev]]]]、[CODE(HTMLa)@en[[[content]]]]
のいずれもないなら、
==== [99] [CODE(HTMLa)@en[[[resource]]]] があればそこから得られる[[資源]]
==== [100] そうでなく [CODE(HTMLa)@en[[[href]]]] があればそこから得られる [[IRI]]
==== [101] そうでなく [CODE(HTMLa)@en[[[src]]]] があればそこから得られる [[IRI]]
=== [102] そうでなく [CODE(HTMLa)@en[[[typeof]]]] があって [CODE(HTMLa)@en[[[about]]]] がなければ[[型付き資源]]
=== [103] そうでなければ[[平リテラル]]
== [104] [[現在言語]]の値があれば、[[平リテラル]]の言語はその値とします。
== [105] [CODE(HTMLa)@en[[[property]]]] から得られる [[IRI]] それぞれについて、
=== [106] [CODE(HTMLa)@en[[[inlist]]]] があれば、
==== [107] [[IRI]] に関連付けられたリストが[[局所リスト写像]]になければ、新しいリストを追加します。
==== [108] そのリストに[[現在特性値]]を追加します。
=== [109] そうでなければ、[[三項組]] ([[新主語]], [[IRI]], [[現在特性値]]) を生成します。
= [110] [[要素を飛ばす]]フラグが[[偽]]で[[新主語]]が [[null]] 以外なら、
== [111] [[評価文脈]]の[[不完全三項組のリスト]]の[[不完全三項組]]それぞれについて、
=== [112] 「方向」が無しなら、「リスト」に[[新主語]]を追加します。
=== [113] 「方向」が正なら、[[三項組]] ([[親主語]], 「述語」, [[新主語]]) を生成します。
=== [114] 「方向」が逆なら、[[三項組]] ([[新主語]], 「述語」, [[親主語]]) を生成します。
= [115] [[子要素]]それぞれについて、新しい[[評価文脈]]を使って再帰的に処理します。
== [116] [[要素を飛ばす]]フラグが[[真]]なら、現在の[[評価文脈]]を複写して、[[言語]]と[[IRI写像のリスト]]を[[現在言語]]と[[IRI写像の局所リスト]]に置き換えます。
== [117] そうでないなら、次のようにします。
==- [[基底]]は現在の[[評価文脈]]のもの
==- [[親主語]]は[[新主語]]が [[null]] でないならそれ、そうでないなら現在の[[評価文脈]]の[[親主語]]
==- [[親目的語]]は[[現在目的語資源]]が [[null]] でないならそれ、そうでなく[[新主語]]が null でないならそれ、
そうでないなら現在の[[評価文脈]]の[[親主語]]
==- [[IRI写像のリスト]]は[[IRI写像の局所リスト]]、[[不完全三項組のリスト]]は[[不完全三項組の局所リスト]]、
[[リスト写像]]は[[局所リスト写像]]、[[言語]]は[[現在言語]]、[[既定語彙]]は[[現在既定語彙]]
= [118] [[局所リスト写像]]の [[IRI]] それぞれについて、[[評価文脈]]の方に同じリストがなければ (つまり[[現在要素]]において作られたものなら)、
== [119] その [[IRI]] に関連付けられたリストに何もなければ、[[三項組]] ([[現在主語]], [[IRI]], [[rdf:nil]]) を生成します。
== [120] そうでなければ、
=== [121] リスト中のそれぞれについて [[bnode]] を生成します。
=== [122] [[bnode]] とリスト中の [[IRI]] や[[リテラル]] の組それぞれについて、[[三項組]]
([[bnode]], [[rdf:first]], [[IRI]] か[[リテラル]]) を生成します。
=== [123] 各 [[bnode]] について[[三項組]] ([[bnode]], [[rdf:rest]], 次の [[bnode]] (なければ [[rdf:nil]])) を生成します。
=== [124] [[三項組]] ([[現在主語]], [[IRI]], 最初の [[bnode]]) を生成します。
]FIG]

[125] [[XML+RDFa]] では [CODE(XMLa)@en[[[xml:base]]]] も使われることになっていますが (>>137)、
この処理ではなぜか使われていません。

;; [126] [[RDFa]] は似たような機能を持つ[[属性]]が複数あったりして、本来 [[RDF]] を表現するために必要な以上に処理が複雑になっているように思えます。[[著者]]にとってもどの[[属性]]を使ったらいいのかわかりませんし、
どのように表現するとどう解釈するのか理解するのが困難でしょう。
[[RDF/XML]] の処理と比べてもこれは相当に複雑です。

[149] 鬼畜なことに >>148 で [[XHTML+RDFa]] において、 >>197 で [[HTML+RDFa]] において一部の処理が[[猿パッチ]]されています。

;; [150] 普通[[猿パッチ]]は別の時期、別のグループの仕様書に対して変更を注入するものなのに、なぜ同時に同グループが出版した
[[XHTML+RDFa 1.1]] が [[RDFa Core 1.1]] の規定を書き換える必要があるのですかね... [[HTML+RDFa]] 
も [[RDFa Core 1.1]] の第2版と同時に出版されているのに...

[155] この処理では [CODE(HTMLa)@en[[[datatype]]]] [[属性]]の値によって分岐するところがありますが、
[[XHTML+RDFa 1.1]] の [[Metainformation Attributes Module]] では [CODE(HTMLa)@en[[[datatype]]]]
の既定値が [CODE@en[[[xs:string]]]] とされています。これらの規定の整合性がない気がしますがどうなっているのかは不明です。

* XML+RDFa 文書

[10] [[RDFa処理器]]は [[XML+RDFa文書]]を次の[[初期文脈]]により処理します [SRC[>>133]]。

[FIG[
- [134] [CODE(URI)@en[[[http://www.w3.org/2011/rdfa-context/rdfa-1.1]]]] で定義されている既定の[RUBYB[[[語]]]@en[term]]を用います。
- [135] [CODE(URI)@en[[[http://www.w3.org/2011/rdfa-context/rdfa-1.1]]]] で定義されている既定の[[IRI写像]]を用います。
- [136] [[既定語彙]] IRI はありません。
- [137] [CODE(XMLa)@en[[[xml:base]]]] [[属性]]により[[基底]]を設定できます。
- [138] [CODE(XMLa)@en[[[xml:lang]]]] [[属性]]により現在の[[言語]]を設定できます。
]FIG]

[REFS[
- [133] [CITE@en[RDFa Core 1.1 - Second Edition]] ([TIME[2013-08-15 17:12:47 +09:00]] 版) <http://www.w3.org/TR/rdfa-core/#h3_xmlrdfaconformance>
]REFS]

;; [139] なぜか[[要件]]ではなく[[事実の文]]となっています。

;; [140] このように [CODE(MIME)@en[[[application/xml]]]] などと [CODE(MIME)@en[[[application/xhtml+xml]]]]
などを区別するのは一般的な [[Webブラウザー]]の処理モデルと異なっています。また [[RDFa+XHTML]]
などの処理とこの [[XML+RDFa]] の処理が衝突するおそれもあるはずですが、何も説明がありません。

;; [141] >>137 と >>138 は[[初期文脈]]ではなく[[評価文脈]]に関する処理モデルの一部のような・・・。
([[RDFa]] の仕様書はこのような若干のエスパーが必要な曖昧な記述が多いですね。)

* XHTML+RDFa 1.1 文書

[151] [[RDFa処理器]]は [CODE(HTMLe)@en[[[html]]]] [[要素]]の [CODE(HTMLa)@en[[[version]]]]
[[属性]]が使われている時にその値を調べなければ[['''なりません''']]。 [[XHTML+RDFa]]
の版として定義されているものであれば、その版の処理規則を用いなければ[['''なりません''']]。
そうでないか、 [CODE(HTMLa)@en[[[version]]]] [[属性]]がない場合は、 [[XHTML+RDFa]]
の最新版を使わなければ[['''なりません''']]。 [SRC[>>143]]

;; [152] これってつまり、 [[XHTML+RDFa 1.1]] の[[RDFa処理器]]は [[XHTML+RDFa 1.0]]
も実装しないといけないってことですよね・・・。

;; [207] [[XHTML+RDFa]] の最新版に [[XHTML5+RDFa]] が含まれるのかは不明です。 >>199
に従いかつ [[XHTML+RDFa 1.1]] への適合性を主張したいのであれば、そう考えるしかありませんが・・・。

[142] [[XHTML+RDFa 1.1]] 文書は次のように処理されます [SRC[>>143]]。
[FIG[
- [144] [[既定語彙IRI]]は未定義
- [145] [[RDFa Core 1.1]] の[[初期文脈]] [CODE(URI)@en[[[http://www.w3.org/2011/rdfa-context/rdfa-1.1]]]]
の後に [[XHTML+RDFa]] の[[初期文脈]] [CODE(URI)@en[[[http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1]]]]
を適用する
- [146] [[基底]]は [CODE(HTMLe)@en[[[base]]]] [[要素]]を使って設定できる
- [147] [[現在言語]]は [CODE(HTMLa)@en[[[lang]]]] または [CODE(XMLa)@en[[[xml:lang]]]] を使って設定できる
- [148] >>35 と >>61 において、 [CODE(HTMLa)@en[[[about]]]], [CODE(HTMLa)@en[[[href]]]],
[CODE(HTMLa)@en[[[resource]]]], [CODE(HTMLa)@en[[[src]]]] など資源属性によって [[IRI]]
が指定されていない時で、 [CODE(HTMLe)@en[[[head]]]] [[要素]]か [CODE(HTMLe)@en[[[body]]]]
[[要素]]であれば、[[新主語]]は[[親目的語]]に設定されているように動作する
]FIG]

[REFS[
- [143] [CITE@en[XHTML+RDFa 1.1 - Second Edition]] ([TIME[2013-08-15 17:11:45 +09:00]] 版) <http://www.w3.org/TR/2013/REC-xhtml-rdfa-20130822/#s_xhtmlRules>
]REFS]

;; [153] [[RDFa]] 本体の処理モデルの一部を書き換えるのがありなのですね・・・。びっくりです。
普通[[プロファイル]]的なものって本体の仕様に従って特定の状況に適応させたもので、本体の仕様自体は変更しないものだと思うのですがね・・・。 (>>149)

* HTML+RDFa

[REFS[
- [188] [CITE@en[HTML+RDFa 1.1]] ([TIME[2013-08-20 15:49:04 +09:00]] 版) <http://www.w3.org/TR/2013/REC-html-rdfa-20130822/#extensions-to-rdfa-core-1.1>
- [242] [CITE@en[HTML+RDFa 1.1]] ([TIME[2013-08-20 15:49:04 +09:00]] 版) <http://www.w3.org/TR/2013/REC-html-rdfa-20130822/#preserving-namespaces-via-coercion-to-infoset>
]REFS]

[224] [[HTML文書]]に[[要素]]の入れ子関係がおかしいものがあれば、 [[RDFa]] の処理の前に修正する[['''べきです''']]
[SRC[>>188]]。

;; [225] これはそもそも [[HTML]] の[[構文解析器]]が行うもので、 [[RDFa]] が規定するべきものではないと思いますが。
[[HTML文書]]の非妥当な要因はいくらでもあるうちでなぜ入れ子問題だけを明記したのかも謎ですし (例示というふいんきでもありません)、
なぜ MUST でなく SHOULD なのかも不明です。

[189] [[HTML+RDFa 1.1]] に適合する[[文書]]は [[RDFa Core 1.1]] と次の例外に従い処理します [SRC[>>188]]。
[FIG[
- [190] [[既定語彙]] [[URI]] は未定義
- [191] [[RDFa Core 1.1]] の[[初期文脈]] [CODE(URI)@en[[[http://www.w3.org/2011/rdfa-context/rdfa-1.1]]]]
の後に [[HTML+RDFa]] の[[初期文脈]] [CODE(URI)@en[[[http://www.w3.org/2011/rdfa-context/html-rdfa-1.1]]]]
を適用する
- [192] [[基底]]は [CODE(HTMLe)@en[[[base]]]] [[要素]]を使って設定でき、 [[XHTML5+RDFa 1.1文書]]では
[CODE(XMLa)@en[[[xlm:base]]]] でも設定できる。
- [193] [[現在言語]]は [CODE(HTMLa)@en[[[lang]]]] か [CODE(XMLa)@en[[[xml:lang]]]] で設定でき、
両方あると [CODE(XMLa)@en[[[xml:lang]]]] が優先されます。両方ある場合同じ値でなければ[['''なりません''']]。
- [194] [CODE(MIME)@en[[[application/xhtml+xml]]]] の[[文書]]の場合は [CODE(XML)@en[[[DOCTYPE]]]]
を見なければ[['''なりません''']]。
-- [195] [[HTML+RDFa 1.1]] 仕様書には [[XHTML+RDFa 1.0]] と [[XHTML+RDFa 1.1]] の [CODE(XML)@en[[[DOCTYPE]]]]
が示されています。それ以外は [[XHTML5+RDFa 1.1]] とされています。
-- [196] [CODE(XML)@en[[[DOCTYPE]]]] がなく [CODE(HTMLa)@en[[[version]]]] もなければ
[[XHTML5+RDFa 1.1]] と解釈しなければ[['''なりません''']]。
- [199] [CODE(HTMLa)@en[[[version]]]] [[属性]]の値が [[RDFa]] の版として定義されたものなら、
それにより処理しなければ[['''なりません''']]。そうでないか [CODE(HTMLa)@en[[[version]]]] がないなら [[RDFa 1.1]]
の最新版により処理しなければ[['''なりません''']]。
- [197] [[RDFa Core 1.1]] 仕様書に対していくつか[[猿パッチ]]を適用する (>>208)
- [198] [[RDFa Core 1.1]] の処理の後、[[特性複写]]操作を行う
]FIG]

[201] >>192 でなぜか [[XHTML]] の時だけ [CODE(XMLa)@en[[[xml:base]]]] が適用されるとなっていますが、
[[HTML5]] には (不適合ながら) [[HTML]] でも [CODE(XMLa)@en[[[xml:base]]]] は有効とされているのに、
なぜそれを参照せずに独自に定義するのか謎です。

[202] >>193 も [[HTML5]] の定義を参照せずになぜ同じようなことを規定しているのか謎です。
しかもなぜか処理の規定の中で [CODE(HTMLa)@en[[[lang]]]] と [CODE(XMLa)@en[[[xml:lang]]]]
の値が同じでなければならないと言及されていますが、本来は文書の適合性として規定されるべきものです。
編集が雑すぎます。また [[HTML5]] の同様の規定では[[ASCII大文字小文字不区別]]で同じとされていますが、
こちらにはそのような記述がなく、意図的なのかどうかはわかりませんが [[RDFa]] の方がより制限が厳しくなっています。

[226] また [[HTML+RDFa 1.1]] 仕様書の別項には[[言語]]について [[HTML5]] の仕様書に従わなければ[['''ならない''']]との記述があり、
>>193 と矛盾しています。更に著者に対しては、 [[MIME型]]が事前にわからない時は
[CODE(HTMLa)@en[[[lang]]]] と [CODE(XMLa)@en[[[xml:lang]]]] の両方を同じ値に[['''するべき''']]としています。 [SRC[>>188]]

;; [227] そもそも [[MIME型]]が事前にわからない状況など普通はないですし (ほとんど [CODE(MIME)@en[[[text/html]]]]
しか使われていない)、事前にわからないならその他にも考えなければならないことが沢山ありすぎるので、
敢えて言語だけ言及する必要性があるのかどうか。

[228] >>226 の矛盾というのは、[[HTML5]] の言語は [CODE(HTTP)@en[[[Content-Language]]]] も考慮する点です。
これについて注記では、 [[JavaScript]] ベースの (クライアント側の) [[RDFa]] の実装がこれにアクセスできないため不適合な実装となり、
そのため[[著者]]ができるだけ [CODE(HTMLa)@en[[[lang]]]] [[属性]]を使うのが[RUBYB[よい]@en[urged]]
[SRC[>>188]] とされています。

[203] >>195 の [CODE(XML)@en[[[DOCTYPE]]]] の規定は実際仕様書に [CODE(XML)@en[[[DOCTYPE]]]]
の例示がありますが、それをどう解釈するべきかは不明です。一字一句そのままだと解釈するよりは[[スペース]]の違いなどは無視するべきと思いますが、
[[システム識別子]]が[[相対URL]]の場合どう比較するべきなのかなどまったく言及がなく、曖昧すぎます。

;; [204] >>189 は [[HTML+RDFa]] 文書の処理の規則として示されているのに >>194 や >>199 の規定は矛盾しているように思えますが、
それは重箱の隅ということにしておきましょうか。

[205] >>196 では [CODE(XML)@en[[[DOCTYPE]]]] も [CODE(HTMLa)@en[[[version]]]] もなければ [[HTML+RDFa 1.1]]
としており、 >>199 では [CODE(HTMLa)@en[[[version]]]] がなければ [[RDFa 1.1]] の最新版としており、
これが同じものなのかどうか不明です。そもそも [[RDFa 1.1]] の最新版とは何を指すのか不明です。

[206] [CODE(XML)@en[[[DOCTYPE]]]] と [CODE(HTMLa)@en[[[version]]]] が矛盾している時にどう処理するべきかは不明です。

;; [200] こちらもやはり[[猿パッチ]]しまくっています (>>149)。 [[XHTML+RDFa]] (>>153) よりも悪化しています。

** 猿パッチ

[208] [[猿パッチ]]は次の通りです [SRC[>>188]]。
[FIG[
- [209] >>29 で[[IRI写像]]が上書きされるときには[[処理器グラフ]]に警告 [CODE@en[[[rdfa:PrefixRedefinition]]]]
を生成しなければ[['''なりません''']]。
- [210] >>34 の直後で [CODE(HTMLa)@en[[[property]]]] [[属性]]と [CODE(HTMLa)@en[[[rel]]]] [[属性]]と [CODE(HTMLa)@en[[[rev]]]]
[[属性]]の一方または両方があれば、 [[CURIE]] でも [[URI]] でもない [CODE(HTMLa)@en[[[rel]]]] と
[CODE(HTMLa)@en[[[rev]]]] の値は無視します。その結果 [CODE(HTMLa)@en[[[rel]]]] や [CODE(HTMLa)@en[[[rev]]]]
が空になれば、その[[属性]]がなかったものとして扱わなければ[['''なりません''']]。
- [211] >>35 と >>61 で資源属性 ([CODE(HTMLa)@en[[[about]]]], [CODE(HTMLa)@en[[[href]]]],
[CODE(HTMLa)@en[[[resource]]]], [CODE(HTMLa)@en[[[src]]]] など) がなく、[[要素]]が [CODE(HTMLe)@en[[[head]]]]
か [CODE(HTMLe)@en[[[body]]]] なら、[[新主語]]を[[親目的語]]に設定します。
- [212] >>92 で[[現在特性値]]を生成するにあたり、 [CODE(HTMLa)@en[[[content]]]] [[属性]]がなければ次のようにしなければ[['''なりません''']]。
-- [213] [CODE(HTMLa)@en[[[datetime]]]] があれば、リテラル値をその[[属性値]]とします。
-- [214] [CODE(HTMLa)@en[[[datatype]]]] があれば、 [[RDFa]] の規定の通りに使います。
-- [215] [CODE(HTMLa)@en[[[datatype]]]] がなく  [CODE(HTMLa)@en[[[datetime]]]] が
[CODE[[[xsd:duration]]]], [CODE[[[xsd:dateTime]]]], [CODE[[[xsd:date]]]], [CODE[[[xsd:time]]]], [CODE[[[xsd:gYearMonth]]]], 
[CODE[[[xsd:gYear]]]] のいずれかに一致するなら、それをデータ型とします。
-- [216] そうでなければ[[平リテラル]]とします。このとき[[現在言語]]を使います。
- [217] >>92 で [CODE(HTMLe)@en[[[time]]]] [[要素]]であって [CODE(HTMLa)@en[[[datetime]]]] も
[CODE(HTMLa)@en[[[content]]]] もないなら、 [CODE(HTMLa)@en[[[datetime]]]] [[属性]]が[[要素]]のテキスト値を含んでいるものとして扱わなければ[['''なりません''']]。
- [218] >>95 の直後で [CODE(HTMLa)@en[[[datatype]]]] が
[CODE(URI)@en[[[http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML]]]] に評価されるなら、
[[HTMLリテラル]]の値はすべての[[子供節点]]をテキストに直列化して作った文字列とします。
]FIG]

[219] >>209 は [[HTML+RDFa]] でのみ規定する必要性が感じられませんが、なぜ [[RDFa Core 1.1]] でなく [[HTML+RDFa]]
で追加されているのか謎です。

[220] >>210 は [[HTML]] の本来の [CODE(HTMLa)@en[[[rel]]]] [[属性]]と衝突することを防ぐためでしょうが、
[[HTML]] で問題になるなら [[XHTML+RDFa]] でも問題だったはずで、なぜ [[XHTML+RDFa]] だけ追加されているのか謎です。

[221] >>212 や >>217 は [CODE(HTMLe)@en[[[time]]]] [[要素]]を自然に利用する方法として有用でしょうが、
なぜ [CODE(HTMLe)@en[[[time]]]] [[要素]]でだけ特別な仕組みが追加され、 [CODE(HTMLe)@en[[[meter]]]]
[[要素]]や [CODE(HTMLe)@en[[[input]]]] [[要素]]や [CODE(HTMLe)@en[[[img]]]] [[要素]]で [[HTML]]
の[[要素]]の意味に応じた特別な仕組みが追加されていないのか謎です。

[222] >>215 は [[RDF]] 側が [[XML Schema]] のデータ型を使っていることからこのような規定になっているのでしょうが、
[CODE(HTMLe)@en[[[time]]]] [[要素]]の[[内容]]や [CODE(HTMLa)@en[[[datetime]]]] [[属性]]の値の定義は厳密にはこれと一致しません。
[[HTML5]] の処理モデルに従って解釈した値を [[XML Schema]] に適合する形で直列化したものをリテラル値として使うのではなく、
このようなアドホックな [[HTML]] の解釈を求めるのは不適切でしょう。また「リテラル値」や
「テキスト値」や「テキストに直列化」といった用語の意味は推測はできますが、正確さに欠けています。

[223] >>212、>>217、>>218 は [[W3C Process]] 上の理由により[[規定]]でなく[[参考]]とされています。 ([[HTML+RDFa 1.1]]
の項を参照。) ですからこの部分の規定には従わなくても適合することになりますが、本当にそれでいいのでしょうか。

[244] [[IRI写像]]の処理 (>>30) では、本来の[[名前空間属性]]を処理した後、[[null名前空間]]で[[局所名]]が
[CODE(XMLa)@en[[[xmlns:]]]] ではじまるものを[[名前空間属性]]であったものとみなして処理します [SRC[>>242]]。

** XML への変換

[229] [[HTML+RDFa 1.1]] で[[データ型]]が [CODE[[[XMLLiteral]]]] のとき、次のようにして [[XML]]
に変換しなければ[['''なりません''']] [SRC[>>188]]。
[FIG[
- [231] 入力データがテキストのみならこれらの要件は適用しません。
- [230] [[HTML5]] の [[DOM]] から[[XML情報集合]]への変換規則に従って変換します。
-- [243] ただし[[HTML文書]]の [CODE(XMLa)@en[[[xmlns:*]]]] [[属性]] (本来[[名前空間属性]]ではなく未知の属性として扱われるもの)
は [[XMLNS名前空間]]に属する[[名前空間属性]]とみなして[[XML情報集合]]に変換します。 [SRC[>>242]]
- [234] 活性[[名前空間]]の情報を[[現在評価文脈]]の[[IRI写像]]から取り出し、最上位の[[要素]]に
(既存の[[名前空間]]を上書きしないようにしつつ) 含めます。このとき[[接頭辞]]は[[小文字]]とします。
- [232] [[名前空間整形式]]の [[XML 1.0]] とします。
- [233] この変換過程で誤りや例外が発生したら、この [CODE[[[XMLLiteral]]]] が含まれる[[三項組]]は生成しません。
]FIG]

[237] >>230 は [[HTML5]] 側で実装依存の項目がいくつかありますが、どのオプションを使うかは特に言及されていません。

[235] >>234 で[[大文字]]を[[小文字]]に変換するようですが、どの変換方法かは明記されていません。

[236] >>234 では元々 [CODE(XMLa)@en[[[xmlns]]]] で宣言されていたものだけでなく、 
[CODE(HTMLa)@en[[[prefix]]]] で宣言されていたものも [CODE(XMLa)@en[[[xmlns]]]]
として出力するようです。本当に大丈夫なのでしょうかね。

[238] 入力が構文解析直後の文書でなくスクリプトで変更された文書なら、
大文字の名前空間接頭辞に依存した内容も含まれているかもしれませんが・・・。

[239] [[HTML要素]]では本来 [CODE(HTMLa)@en[[[xmlns]]]] [[属性]]を指定しても無視されますが、 [[RDFa]]
では [[HTML+RDFa]] の規定により[[IRI写像]]に反映されます。それが >>234 により [CODE(XMLa)@en[[[xmlns]]]]
として出てくることになります。

** XML 名前空間

[241] この他に [[HTML]] における [CODE(XMLa)@en[[[xmlns]]]] の解釈に関するびっくりする規定があります。 [CODE(XMLa)@en[[[xmlns]]]]
の項を参照してください。

* Role

[245] [[RDFa]] と同じく [[XHTML2]] から独立した [[XHTMLモジュール]]の1つである [[Role Attribute 1.0]] 仕様書は、
[CODE(HTMLa)@en[[[role]]]] [[属性]]に関する [[RDFa処理器]]が行う処理を定義しています。

;; [256] [[RDFa Core 1.1]] が参照されています。

[REFS[
- [246] [CITE[Role Attribute 1.0]] ([TIME[2013-03-29 00:13:26 +09:00]] 版) <http://www.w3.org/TR/role-attribute/#using-role-in-conjunction-with-rdfa>
]REFS]

[247] [[RDFa処理器]]は [CODE(HTMLa)@en[[[role]]]] [[属性]]を組み込んだ[[ホスト言語]]の[[文書]]を処理する場合、
[CODE(HTMLa)@en[[[role]]]] [[属性]]から[[三項組]]を生成して[['''構いません''']]。その場合次のようにしなければ[['''なりません''']]。
[SRC[>>246]]

[FIG[
- [252] [CODE(HTMLa)@en[[[role]]]] に含まれる値それぞれを[[目的語]]とした[[三項組]]を生成する
-- [253] [[語彙]] [CODE(URI)@en[[[http://www.w3.org/1999/xhtml/vocab#]]]] の範囲内にあるものとみなす
- [248] [[主語]]は、
-- [249] [CODE(HTMLa)@en[[[id]]]] があれば、[[文書]]の[[基底URL]]に [CODE[[[#]]]] と [CODE(HTMLa)@en[[[id]]]]
[[属性値]]を連結したもの
-- [250] そうでなければ新しい [[bnode]]
- [251] [[述語]]は、[[語彙]] [CODE(URI)@en[[[http://www.w3.org/1999/xhtml/vocab]]]] の[[語]]である [CODE[[[role]]]]
]FIG]

;; [254] [CODE(XMLa)@en[[[xml:base]]]] は無視されるようです。また [CODE(HTMLa)@en[[[id]]]]
が [[URL]] に使えない[[文字]]を含んでいても気にしないようです。

;; [255] こんな風に[[ホスト言語]]依存で追加の[[三項組]]を生成しちゃうのはありなんでしょうか。
[[RDFa]] の実装にも [[Role]] の実装にもこの処理の追加を要求しておらず、あくまで認めているだけなので、
ある[[文書]]がどんな[[グラフ]]を生成するかまったく予測できないことになりますが・・・。

* 初期文脈

[158] [[RDFa Core 1.1]] は[[初期文脈]]として [DFN[[CODE(URI)@en[[[http://www.w3.org/2011/rdfa-context/rdfa-1.1]]]]]]
を使っており、 [[XHTML+RDFa 1.1]] は追加の[[初期文脈]]として
[DFN[[CODE(URI)@en[[[http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1]]]]]] を使っています。
これら [[URL]] は [[RDFa Core 1.1]] と [[XHTML+RDFa 1.1]] でそれぞれ [[URL]] のみ規定されていて、
その内容は随時更新されているようです。

** 仕様書

[REFS[
- [156] [CITE[RDFa Core Initial Context]] ([TIME[2013-11-28 00:07:18 +09:00]] 版) <http://www.w3.org/2011/rdfa-context/rdfa-1.1>
- [157] [CITE[XHTML+RDFa Initial Context]] ([TIME[2011-12-10 18:34:41 +09:00]] 版) <http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1>
]REFS]

** 内容

[159] >>156 には [[RDF]] 界隈でよく使われる[[接頭辞]]と[[名前空間URL]]の対応関係が定義されています。

[160] >>156 と >>157 では[RUBYB[語]@en[term]]が定義されています。元々 [CODE(HTMLa)@en[[[rel]]]]
[[属性]]として使われていたものが選ばれているようです。

[161] 現時点で >>156 には [CODE(HTML)@en[[[describedby]]]]、 [CODE(HTML)@en[[[license]]]]、
[CODE(HTML)@en[[[role]]]] が、 >>157 には [[HTML4]] の[[リンク型]]と [CODE(HTML)@en[[[meta]]]],
[CODE(HTML)@en[[[license]]]], [CODE(HTML)@en[[[icon]]]], [CODE(HTML)@en[[[p3pv1]]]]
が含まれています。

;; [163] なぜか [CODE(HTML)[[[license]]]] は両方に含まれています。 >>156 は [[XHTML Vocabulary]]
と [[IANA登録簿]]の両方を参照しており、 >>157 は [[XHTML Vocabulary]] だけを参照しています。
両者が同じものなのかどうか、重複していて問題ないのかどうかは不明です。

[162] どちらも [[W3C]] の文書で定義されているものという一応の基準はあるようですが、
どのような手続きで追加されるのか、どういう基準で振り分けられているのかなどは不明です。
ほとんどの値は出典が [[XHTML Vocabulary]] になっていますが、そこに含まれているすべてが
>>156 と >>157 にも含まれているというわけでもありません。

** GRDDL

[164] [[RDFa]] と [[GRDDL]] は直接関係ありませんが、 [CODE(URI)@en[[[http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1]]]]
を [CODE(HTMLe)@en[[[head]]]] [[要素]]の [CODE(HTMLa)@en[[[profile]]]] [[属性]]に指定することで、[[GRDDL]]
的に [[RDFa]] から [[RDF]] に変換できるようになるとされています。

;; [[HTMLメタ情報プロファイル]]の項も参照。

[REFS[
- [165] [CITE@en[XHTML+RDFa 1.1 - Second Edition]] ([TIME[2013-08-15 17:11:45 +09:00]] 版) <http://www.w3.org/TR/2013/REC-xhtml-rdfa-20130822/#a_deployment>
]REFS]

[9] [CITE@en[Some minor changes on the RDFa context document]]
([[Ivan Herman]]著, [TIME[2017-01-05 23:51:15 +09:00]])
<https://lists.w3.org/Archives/Public/public-rdfa/2017Jan/0000.html>