[33] [DFN[[[CURIE]]]] は、[[接頭辞]]によって [[URL]] を省略した表記法です。 [3] [[Semantic Web]] 界隈では以前から [[QName]] を [[URL]] の略記法として使ってきました。 しかし [[QName]] には [[XML]] に由来する、 [[XML]] 以外の場面で必要ではない制約が存在すること [WEAK[(例えば[[局所部分]]が[[数字]]から始まってはいけないこと)]]、 [[URL]] と混在させると区別できないことといった問題がありました。 [[CURIE]] は [[QName]] より構文的制約が緩和されており、 また [[URL]] との区別が必要な場合に使える[DFN[[RUBYB[安全]@en[safe]] CURIE]] という構文が定義されています。 [96] [[CURIE]] は一見単純そうですが、本項で説明する通り定義が複雑で混乱しており、 [[QName]] 以上に厄介な代物です。 [[Semantic Web]] / [[Linked Data]] 界隈ではおおよそ好評価のようですが、 それ以外のコミュニティーではまったく受け入れられる様子がありません。 * 仕様書 [34] [[CURIE]] ははじめ [[RDF in HTML Task Force]] により、後に [[XHTML2 WG]] 本体により主に策定されています。 [[RDFa]] など [[CURIE]] を使う仕様は元々は [[QName]] を採用していましたが、 >>3 のような問題から [[CURIE]] が仕様化されることとなりました。 [35] しかし仕様が固まってから完成するまでに時間がかかるとか、 どの仕様書にどうやって含めるかなどどうでもいいことの議論に時間がかかるとか、 [[W3C]] や [[XHTML2 WG]] ではありがちな作業の遅延により、単体の仕様書も存在しつつもいくつもの他の仕様書にコピペされる、 という状況になっていました。 [36] そのようなコピペの一つ、 [[RDFa]] (1.0) 仕様は [[W3C]] [[勧告]]となっています (>>28)。 [[W3C]] 的に正式な仕様として [[CURIE]] を唯一定義していたのが本仕様です。 [37] [[CURIE]] を単体で規定する仕様は、 [[W3C]] [[勧告過程]]を終えることなく [[XHTML2 WG]] が解散することとなり、 (しかも[[憲章]]上の [[WG]] 終了から1年経ってようやく) [[WG Note]] として出版されました (>>32)。 ;; [38] [[W3C]] 的には [[WG Note]] は [[WG]] の文書に過ぎず、正式な[[規定]]の文書ではありません。 [59] [[RDFa 1.0]] にかわって [[W3C]] [[勧告]]となった [[RDFa 1.1]] にも [[CURIE]] の定義がありますが、 これは従来の定義とはまた違っています。 [REFS[ - [58] '''[CITE@en[RDFa Core 1.1 - Second Edition]] ([TIME[2013-08-15 17:12:47 +09:00]] 版) ''' - [97] [CITE@en[RDFa Core 1.1 - Second Edition]] ([TIME[2013-08-15 17:12:47 +09:00]] 版) - [115] [CITE@en[RDFa Core 1.1 - Second Edition]] ([TIME[2013-08-15 17:12:47 +09:00]] 版) ]REFS] * CURIE [39] [[CURIE]] は、 [FIG[ [PRE(ABNF code)[ [ [ prefix ] ':' ] reference ]PRE] ]FIG] ... という[DFN[[RUBYB[[[接頭辞]]]@en[prefix]]]]と[DFN[[RUBYB[[[参照]]]@en[reference]]]]からなる文字列です [SRC[>>32 3., >>58]]。 [45] [[接頭辞]]も[[参照]]もどちらも[[空文字列]]にできますが、 [[CURIE]] 全体として[[空文字列]]とすることは禁止されています [SRC[>>32 3.]]。 [48] [[接頭辞]]は [[URL]] と束縛されていて、 [[CURIE]] が表すのは、[[接頭辞]]に束縛されている [[URL]] の後に [VAR[reference]] を連結したものである、とされています。 [60] [[CURIE]] は、展開後に構文的に[[妥当]]な [[RFC 3987]] [[IRI]] とならなければ[['''なりません''']] [SRC[>>59]]。 ;; [61] [[IRI参照]]ではなく [[IRI]] となっています。 [[相対IRI参照]]となるものではいけないということです。 ;; [68] この規定は [[RDFa 1.1]] で追加されたようです。 [55] なお [[RDFa 1.0]] 世代の定義によれば[[参照]]には [CODE[[[:]]]] が含まれることがありますが、 [[NCName]] で始まり、その直後に [CODE[[[:]]]] が来るような形になることはありません [WEAK[(構文定義が参照している [[IRI]] の方でそれを認めると[[絶対IRI]]と[[相対IRI参照]]が区別できなくなってしまうためです)]]。 ですから、[[接頭辞]]と [CODE[[[:]]]] が省略されてすぐに[[参照]]が始まる場合と[[接頭辞]]がある場合が区別できなくなることはありません。 [72] [[RDFa 1.1]] の定義では [[NCName]] [CODE[[[:]]]] ではじまることがあり得る (>>71) ので、 [[接頭辞]]がある場合とない場合と区別できません。一般的な[[生成規則]]の解釈では、そのような場合[[接頭辞]]と解釈することになるでしょう。 [56] [[XML Schema]] や [[DTD]] でのデータ型の定義はちょっと違った緩い形になっています (>>32 A.)。 [[DTD]] はともかく [[XML Schema]] は本来のものと同じ定義にすることもできたはずなのになんででしょうね・・・。 あえて制約を緩めたというよりはバグってるように見えますが。 ;; [[XHTML2 WG]] では標準的な品質です。 * 接頭辞 [40] [[RDFa 1.0]] 世代の [[CURIE]] の[[接頭辞]]は[[XML名前空間 1.0]] (なぜか第1版) の [[NCName]] です [SRC[>>32 3.]]。 構文に示されたように、 [VAR[prefix]] は[[空文字列]]となることもできますし、また [CODE(char)[[[:]]]] を含めて [VAR[prefix]] 全体を省略することもできます。 ;; [41] なぜか第1版なので、 [[XML 1.0]] 第5版の [[Name]] の改訂の前の定義を指していることになります。 [95] [[RDFa 1.1]] の [[CURIE]] は [[XML名前空間1.0 3e]] の [[NCName]] を参照しています [SRC[>>58]]。 [[XML名前空間1.0 3e]] は [[XML 1.0]] の最新版を参照しています。 ([[XML名前空間1.0 3e]] は [[XML 1.0 5e]] よりも新しい版です。) ** [CODE[_]] 接頭辞 [49] [[RDFa 1.0]] では、[[接頭辞]] [DFN[[CODE[[[_]]]]]]、は [[RDF]] に対応した言語で予約されているので[[著者]]は使う[['''べきではない''']] [SRC[>>32 3.]] とされています。 ;; [50] [[Turtle]] などで [[bnode]] を表すために使われていることを言っているのでしょう。 [85] [[RDFa 1.1]] では、[[文書]]は [CODE[[[_]]]] [[接頭辞]]を定義する[['''べきではない''']]、 [[RDFa処理器]]は、 [CODE[[[_]]]] [[接頭辞]]の宣言を無視しなければ[['''ならない''']]とされています [SRC[>>58]]。 [[接頭辞]] [DFN[[CODE[[[_]]]]]] は [[bnode]] を表すために使います。 ;; [94] なぜか [[CURIE]] 自体ではなく [[RDFa 1.1]] における [[CURIE]] の規定となっています。 ** 接頭辞がない場合 [51] 接頭辞が無い場合の解釈については色々議論があったようですが (よくわかりませんがw)、 [[RDFa 1.0]] 世代においては最終的に ([[WG Note]] では)、接頭辞と [CODE[[[:]]]] が両方省略されていれば[[ホスト言語]]の定義する語彙を表し、 接頭辞が省略されていて [CODE[[[:]]]] があれば既定の[[接頭辞]]を指す [SRC[>>32 3.]]、ということになっているようです。 ;; [52] 接頭辞と [[IRI]] の束縛の方法、既定の接頭辞、接頭辞と [CODE[[[:]]]] が無い場合の解釈といったような [[CURIE]] の実際の意味は、[[ホスト言語]]によって規定されることになっています。 ;; [53] なので [[CURIE]] 自体はほとんど中身のない仕様ですね・・・。なんで何年もかかってこの程度のことも決められないのか・・・。 [62] [[RDFa 1.1]] では定義が少し違っています。 [SRC[>>58]] [FIG[ - [63] [[接頭辞]]がなく [CODE[[[:]]]] がある場合、[DFN[[RUBYB[「既定接頭辞」写像]@en['default prefix' mapping]]]]が使われます。 -- [65] [[RDFa 1.1]] では [CODE(URI)@en[[[http://www.w3.org/1999/xhtml/vocab#]]]] です。 - [64] [[接頭辞]]も [CODE[[[:]]]] もない場合、[DFN[[RUBYB[「無接頭辞」写像]@en['no prefix' mapping]]]]が使われます。 -- [66] [[RDFa 1.1]] では定義されていません。 [[RDFaホスト言語]]はこれを定義しては[['''なりません''']]。 ]FIG] ;; [67] [[「既定接頭辞」写像]]も[[「無接頭辞」写像]]も [[XML名前空間]]とは連動していません。 ;; [111] >>104 のように[[接頭辞]]も [CODE[[[:]]]] もなければ [[CURIE]] でなく「[[語]]」とみなす場合があります。 * 参照 [42] [[RDFa 1.0]] 世代の定義によれば、[[参照]]は [[RFC 3987]] [CODE(ABNF)[[[irelative-ref]]]] です [SRC[>>32 3.]]。 つまり [[IRI参照]]の任意の[[相対参照]]であり、[[空文字列]]でもあり得ます。 ;; [43] [[QName]] で[[参照]]に相当する部分 ([[局所部分]]) は [[NCName]] でしたので、 それに比べると随分と制約が緩くなっています。 もっとも [[IRI参照]]もそれなりに制約があるので、 どんな文字列でも良くなったわけではありません。 ;; [69] [[RFC 3987]] は [[IRI]] に対して [[ABNF]] 構文で表現されない制約もいくつか課していますが、 [[CURIE]] は [[ABNF]] 構文を流用しているだけなので、それらは適用されないと解するのが自然でしょう。 [70] [[RDFa 1.1]] の定義は次のように変更されています。 [FIG[ [PRE(EBNF code)[ reference ::= ( [[ipath-absolute]] / [[ipath-rootless]] / [[ipath-empty]] ) [ "?" [[iquery]] ] [ "#" [[ifragment]] ] ]PRE] ]FIG] [71] これは >>42 の定義と比べると、 - [[authority]] が認められなくなっています - 1つ目の [[segment]] に [CODE[[[:]]]] が含まれても良くなっています ;; この2つ目の変更で >>55 の特徴が失われています。 * 評価 [75] [[RDFa 1.1]] によると [[CURIE]] の評価には次の情報が必要です [SRC[>>58]]。 [FIG[ - [76] [[接頭辞]]から [[IRI]] への写像の集合 - [77] [[「既定接頭辞」写像]] - [78] [[「無接頭辞」写像]] - [79] [CODE[[[_]]]] [[接頭辞]]の[[写像]] ]FIG] [80] [[RDFa 1.1]] では次のように定義されています [SRC[>>58]]。 [FIG[ - [81] >>76 は、[[現在要素]]において適用範囲内にある[[接頭辞]]の宣言 - [82] >>77 は、現在の既定接頭辞の写像 - [83] >>78 は、定義しない - [84] >>79 は、 [[bnode]] の生成に使う ]FIG] ;; [87] なぜ >>85 が禁止されていないのかは謎です。 [88] [[CURIE]] から [[IRI]] への展開は次のように定義されています [SRC[>>58]]。 [FIG[ = [89] [[接頭辞]]が[[空文字列]]である場合、 >>77 が定義されていれば非妥当であり、定義されていればその [[IRI]] と[[参照]]を連結したものが展開結果の [[IRI]] です。 = [90] 空でない[[接頭辞]]がある場合、 >>76 にその[[接頭辞]]が含まれていればその [[IRI]] と[[参照]]を連結したものが展開結果の [[IRI]] となり、含まれていなければ非妥当です。 ]FIG] ;; [92] この辺の [[RDFa 1.1]] 仕様の規定はあまり正確に記述されていないようで、無視とは何なのか、 [[CURIE]] ではないとは何を意味するのかなどはっきりしません。 ;; [93] >>78 や >>79 はなぜかこの展開の処理モデルで使われていません。 * URL との混在 [98] [[CURIE]] は [[IRI]] を短く表現するためのものですが、完全な [[IRI]] と [[CURIE]] の両方を混在させられると定義している場所も多くあります。 ** 安全 CURIE [44] [DFN[安全 CURIE]] ([DFN[[CODE[[[safe_curie]]]]]]) は、 [[CURIE]] を [CODE(char)[[['''[''']]]] と [CODE(char)[[[''']''']]]] で括ったものです。 [SRC[>>32 3., >>58]] [46] [[RDFa 1.0]] 以前から元々 [[IRI]] が認められていた[[属性]]などでは、 [[IRI]] または安全 CURIE のどちらかを使うことが認められていて、構文的に区別可能になっています。 ;; [47] [[RFC 3986]] や [[RFC 3987]] に従えば [[URI]] や [[IRI]] が [CODE(char)[[['''[''']]]] ではじまることはないので、必ず区別できます。 (現実には [CODE(char)[[['''[''']]]] が[[相対URL]] に使われることはあり得るので、現実世界とは互換性がありませんが。) [73] [[RDFa 1.1]] では [[CURIE]] と [[IRI]] は区別可能であるとして、 安全 CURIE は後方互換性のためのものという扱いになっています。 [SRC[>>58]] [[接頭辞]]が宣言されていなければ [[IRI]] とみなすから両立可能ということのようです。 ;; [74] それだと接頭辞が宣言されていないのをエラーにできないですけどそんなのでいいのでしょうか・・・。 それにそもそも既に [[URL]] に使われている属性を流用するためにわざわざ安全 CURIE を作ったのですから、 [[RDFa]] 以外の用途に使われていた属性なわけで、それを [[CURIE]] でも OK にすると [[RDFa]] に対応していない実装と対応している実装で解釈が違ってしまうわけで・・・。 ** 語 [112] [[CURIE]] とは別に、[[RDFa]] の一部の[[属性]]では「[DFN[[RUBYB[[[語]]]@en[term]]]]」を指定することができます。 この[[語]]は[[接頭辞]]も [CODE[[[:]]]] もない [[CURIE]] と形式的には区別できませんが、 >>105 のように [[CURIE]] ではなく[[語]]と解釈することになっています。 ;; [113] なぜ敢えて [[CURIE]] の[[「無接頭辞」写像]]ではなく別のものとして定義しているのか謎ですが・・・。 [114] [[語]]は、 [[XML名前空間1.0 2e]] [[NCNameStartChar]] からはじまり、 [[XML名前空間1.0 2e]] [[NCNameChar]] や [CODE[[[/]]]] が0文字以上後に続くような文字列です。 言い換えると、 [[XML名前空間1.0 2e]] [[NCName]] で2文字目以降に [CODE[[[/]]]] を認めたものです。 [SRC[>>115]] ;; [116] [[XML名前空間1.0 2e]] は [[XML 1.0 5e]] よりも前のものです。 ;; [117] この辺の仕様書の文面とリンクに齟齬がありますが、全体として規定に矛盾はありません。 [118] [[語]]は次のように処理します [SRC[>>115]]。 [FIG[ = [119] [[局所既定語彙]]があれば、その [[IRI]] と[[語]]を連結したものを返します。 = [120] そうでなく[[局所語写像]]に[[語]]が含まれていれば、その [[IRI]] を返します。 ここで比較はまず[[大文字・小文字区別]]して行い、一致がなければ[[大文字・小文字不区別]]で探します。 = [121] そうでなければ無視しなければ[['''なりません''']]。 ]FIG] ;; [122] ここでの[[大文字]]と[[小文字]]を区別しない比較がどのように行われるべきなのかは明記されていません。 ** SafeCURIEorCURIEorIRI [99] [[RDFa 1.1]] で用いられるデータ型 [DFN[[[SafeCURIEorCURIEorIRI]]]] は、 [[RFC 3987]] [[IRI]]、[[CURIE]]、 [[安全CURIE]]のいずれもが使えることを表します。ここでいう [[IRI]] は (文脈的に) [[IRI参照]]のことであるようです。 [103] このデータ型の値は次のように処理します [SRC[>>97]]。 [FIG[ = [100] 四角括弧で囲まれていれば、[[安全CURIE]]として評価して得られた [[IRI]] を用います。[[妥当]]でなければ、この値は無視しなければ[['''なりません''']]。 = [101] そうでなく妥当な [[CURIE]] なら、評価して得られた [[IRI]] を使います。 = [102] そうでないなら [[IRI]] とみなします。 ]FIG] ** TERMorCURIEorAbsIRI [104] [[RDFa 1.1]] で用いられるデータ型 [DFN[[[TERMorCURIEorAbsIRI]]]] は、[RUBYB[[[語]]]@en[term]]、 [[RFC 3987]] [[絶対IRI]]、[[CURIE]] のいずれもが使えることを表します。 [105] このデータ型の値は次のように処理します [SRC[>>97]]。 [FIG[ = [106] 値が[[語]]なら、そのように処理します。その結果無視されることもあります。 = [107] 値が妥当な [[CURIE]] なら、評価して得られた [[IRI]] を使います。 = [108] 値が[[絶対IRI]] なら、それを使います。 = [109] それ以外なら、この値は無視します。 ]FIG] ;; [110] ところで [[RFC 3987]] では「[RUBYB[[[絶対IRI]]]@en[absolute IRI]]」という語は明確に定義されていません。 [[生成規則]] [CODE(ABNF)@en[[[absolute-IRI]]]] は[[素片識別子]]を含みません。本当にそれでいいのでしょうか。 [[RDF]] 界では[[素片識別子]]もよく使っていますが・・・。 * XHTML モジュール [54] [[CURIE]] 関係の[[データ型]]は [[XHTML m12n]] の形式に則って定義されています (>>32 A.)。 :[DFN[[CODE[[[CURIE]]]]]]:[[CURIE]]。 :[DFN[[CODE[[[CURIEs]]]]]]:[[CURIE]] を[[空白]]で区切って並べたもの。 :[DFN[[CODE[[[SafeCURIE]]]]]]:安全 [[CURIE]]。 :[DFN[[CODE[[[SafeCURIEs]]]]]]:安全 [[CURIE]] を[[空白]]で区切って並べたもの。 :[DFN[[CODE[[[URIorSafeCURIE]]]]]]:[[URI]] ([CODE(XML)[[[xs:anyURI]]]]) または安全 [[CURIE]]。 :[DFN[[CODE[[[URIorSafeCURIEs]]]]]]:[[URI]] ([CODE(XML)[[[xs:anyURI]]]]) または安全 [[CURIE]] を[[空白]]で区切って並べたもの。 * 歴史 ** RDFa 1.0 [1] [CITE[CURIE Syntax 1.0]] [2] [CITE[CURIE Syntax 1.0]] [4] [CITE[CURIE Syntax 1.0]] ([[名無しさん]] [WEAK[2006-06-17 09:55:56 +00:00]]) [6] [CITE@en[CURIE Syntax 1.0]] ([CODE[2007-03-08 00:39:48 +09:00]] 版) タイミングが前後しているものの、旧 [[HTML WG]] (新 [[XHTML2 WG]] の最後の TR)。 ([[名無しさん]] [WEAK[2007-03-08 11:45:21 +00:00]]) [8] [CITE@en[Fwd: Towards a TAG consideration of CURIEs]] ([[Steven Pemberton]] 著, [CODE[2007-03-30 21:07:05 +09:00]] 版) ([[名無しさん]] [WEAK[2007-04-01 03:29:51 +00:00]]) [9] [CITE@en[CURIE Syntax 1.0]] ([CODE[2007-04-03 06:45:50 +09:00]] 版) ([[名無しさん]] [WEAK[2007-04-07 14:07:03 +00:00]]) [10] [CITE@en[XHTML Document Development Area]] ([CODE[2007-04-07 01:58:13 +09:00]] 版) ([[名無しさん]]) [11] [CITE@en[Weekly XHTML2 WG Teleconference -- 23 May 2007]] ([CODE[2007-05-24 00:02:59 +09:00]] 版) こいつら今更なにをwwwwwwwwwwwwwwww ([[名無しさん]] [WEAK[2007-05-27 10:42:00 +00:00]]) [12] [CITE@en[CURIE Syntax 1.0]] ([CODE[2007-09-06 05:42:20 +09:00]] 版) ([[名無しさん]]) [13] >>12 [[role]] とか [[access]] に定義がこぴぺされたわけですが・・・。 [[HRRI]] といい、どうして過ちを繰り返すのでしょうかね? ([[名無しさん]]) [14] [CITE@en[CURIE Syntax 1.0]] ([CODE[2007-11-26 19:23:55 +09:00]] 版) ([[名無しさん]]) [15] [CITE@en[CURIE Syntax 1.0]] ([CODE[2007-12-05 07:14:03 +09:00]] 版) ([[名無しさん]]) [16] [CITE@en[CURIE Syntax 1.0]] ([CODE[2007-12-06 06:06:03 +09:00]] 版) ([[名無しさん]]) [17] [CITE@en[CURIE Syntax 1.0]] ([CODE[2008-01-23 05:56:50 +09:00]] 版) ([[名無しさん]]) [18] [CITE@en[CURIE Syntax 1.0]] ([CODE[2008-03-19 02:45:43 +09:00]] 版) ([[名無しさん]]) [19] [CITE@en[CURIE Syntax 1.0]] ([CODE[2008-04-04 00:45:36 +09:00]] 版) ([[名無しさん]]) [20] [CITE@en[CURIE Syntax 1.0]] ([CODE[2008-05-09 00:10:54 +09:00]] 版) ([[名無しさん]]) [21] [CITE@en[CURIE Syntax 1.0]] ([CODE[2008-06-18 00:59:28 +09:00]] 版) ([[名無しさん]]) [22] [CITE@en[CURIE Syntax 1.0]] ([CODE[2008-09-25 02:27:05 +09:00]] 版) ([[名無しさん]]) [23] [CITE@en[CURIE Syntax 1.0]] ([CODE[2008-10-09 02:30:40 +09:00]] 版) ([[名無しさん]]) [24] [CITE@en[CURIE Syntax 1.0]] ([CODE[2008-10-19 05:56:53 +09:00]] 版) [25] [CITE@en[CURIE Syntax 1.0]] ([TIME[2008-10-23 18:16:25 +09:00]] 版) [27] [CITE[CURIE Syntax 1.0]] ([TIME[2009-01-16 23:07:11 +09:00]] 版) [26] [CITE[CURIE Syntax 1.0]] ([TIME[2009-04-23 00:05:15 +09:00]] 版) [28] [CITE@en[RDFa in XHTML: Syntax and Processing]] ([TIME[2008-10-14 00:17:32 +09:00]] 版) [29] 結局[[勧告]]になった唯一の [[CURIE]] の定義がこれか。 [32] [CITE[CURIE Syntax 1.0]] ([TIME[2010-12-17 02:13:05 +09:00]] 版) ** RDFa 1.1 [57] [CITE@en[RDFa Core 1.1 - Second Edition]] ( ([TIME[2013-08-15 17:12:47 +09:00]] 版)) * メモ [30] [CITE[RIF Datatypes and Built-Ins 1.0]] ([TIME[2010-06-22 23:52:50 +09:00]] 版) [31] [CITE[RIF Production Rule Dialect]] ([TIME[2010-06-22 23:52:51 +09:00]] 版) [7] [CITE[WEBTECH - webtech:vantguarde]] ([CODE[2007-03-09 08:39:23 +09:00]] 版) ([[名無しさん]] [WEAK[2007-03-08 23:41:30 +00:00]])