* 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]] 版) ]REFS] ** 要件 -[3] [[消費応用]]に対し、 [[RDFa]] 仕様書の[[処理モデル]]の章の規則によって生成した[[三項組]]すべてを含む単一の [[RDFグラフ]]を提供しなければ[['''なりません''']] -[5] >>4 の追加[[三項組]]を[[既定グラフ]]において提供しては[['''なりません''']] ** 許可 -[4] [[RDFa]] 仕様書の規則に則らない[[三項組]]を提供して[['''構いません''']] ** 関連 [6] [[適合RDFa利用者エージェント]]との関係は明示されていません。 * 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]] 版) - [16] [CITE@en[RDFa Core 1.1 - Second Edition]] ([TIME[2013-08-15 17:12:47 +09:00]] 版) ]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]] ** 評価文脈 [18] [[RDFa]] の処理は[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] 仕様書の規定は曖昧かつ分散しています。この程度の単純な定義くらいはっきり書けてほしいのですが・・・。 [22] [[評価文脈]]に関連して、処理中は次の一時変数が使われます [SRC[>>16]]。 [FIG[ - [DFN[[RUBYB[IRI写像の局所リスト]@en[local list of IRI mappings]]]]: 初期状態は空 - [DFN[[RUBYB[不完全三項組の局所リスト]@en[local list of incomplete triples]]]]: 初期状態は空 - [DFN[[RUBYB[言語]@en[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]] とします。 @@ ... ]FIG]