[19] [DFN@en[[ABBR[IRI]]]] ([DFN@en[Internationalized Resource Identifiers]]) は、 利用可能な[[文字]]の種類を [[ASCII]] ベースから [[Unicode]] ベースへと拡張した、 [[URI]] の[[超集合]]である[[識別子]] (の仕様) です。 * 仕様 [49] 現時点で最新かつ正式な [[IRI]] の仕様は、 [[IETF]] の[[提案標準]]である [[RFC 3987]] です。 [[RFC 3987]] は2004年12月に [[IESG]] に承認され、 2005年1月に [[RFC]] として発行されました。 - [[RFC 3987]] ([[IETF]] [[提案標準]]) ** IRI に関する様々な仕様と定義 [1] [[IRI]] の [[RFC]] ([[RFC 3987]]) が発行される前、あるいは発行された後にも、 [[URI]]/[[IRI]] 的なものを使う仕様の中には、 [[IRI]] 仕様を先取りして、あるいは独自に、 [[IRI]] のようなものを定義したり、 [[IRI]] の [[Internet Draft]]を参照したりしていました。 特に [[W3C]] の仕様書では、数多くの「[[IRI]] のようなもの」が定義されていました。 [50] たとえ実質的に同じ定義であったとしても、人為的なミス、仕様の改訂、政治的問題、 その他の理由で混乱が起こる危険性はあるので、困ったことですね、 などと昔ここに書いていたのですが、実際各仕様が定義している内容には少しずつ「ずれ」がある上、 その「ずれ」が[[遺物拡張IRI]] (旧称: [[XML資源識別子]]など) や [[HTML 5]] の [[URL]] のような派生仕様を生み出すまでに至り、既に混乱は極まっている感があります。 *** 「IRI」や「IRI 参照」を定義している仕様 [13] '''RFC 3987 IRI''': [[IETF]] で標準化された、“最も正しい”「[[IRI]]」や「[[IRI参照]]」の定義です。 両者は[[百分率符号化]]によって [[RFC 3986]] の [[URI]] や [[URI参照]]に変換できる文字列であり、 [[ABNF]] で構文が定義されています。 [52] 実は [[RFC 3987]] をよく読むと、 [[ABNF]] で表現されていない構文上の制約が本文中に含まれています。 [[RFC 3987]] を引用している仕様の中には、「[[RFC 3987]] の [[ABNF]] [[生成規則]]に[[一致]]するもの」 のような参照の仕方をしているものがありますが、それでは [[ABNF]] に含まれない制約が厳密には参照されていないことになるので、要注意です。 - [[RFC 3987]] ([[IETF]] [[提案標準]]) , [53] [[RFC 3987]] になる前の古い [[Internet Draft]] には、最終版とは異なる定義をしているものもあります。 古い [[Internet Draft]] を参照している仕様は要注意です。 [54] また、現在改訂の作業が進められており、 [[Internet Draft]] も発行されています ([[draft-duerst-iri-bis]])。改訂版には元々の [[IRI]] だけではなく、[[遺物拡張IRI]] の定義も含まれています。 [2] '''XPointer IRI 参照''': 「[[IRI]]」を [[URI]] の拡張で [[Unicode]] [[文字]]が使えるものと概念的に定義した上で、 [[XPointer]] [[指示子]]を「[[IRI参照]]」で使う方法や、[[IRI参照]]を [[URI参照]]に変換する方法を規定しています。 ;; 用語として定義されているのは「[[IRI]]」ですが、実際規定があるのは 「[[IRI参照]]」 (と「[[URI参照]]」) です。 [[RFC 2396]] 時代の「[[URI]]」には[[素片識別子]]が含まれていないためでしょうか。 それによると、 [[XPointer]] [[指示子]]を [[IRI参照]]中で使う場合、 [CODE(char)[[[%]]]] は[[百分率符号化]]を行わなければ[['''なりません''']]が、その他の[[文字]]はしても[['''構わない''']]のみです。 また、 [[IRI参照]]から [[URI参照]]への変換では、 [[RFC 2396]] と [[RFC 2732]] で [[URI参照]]中に認められない[[文字]]を[[百分率符号化]]することになっています。 [55] [[XPointer]] [[指示子]]中には任意の [[Unicode]] [[文字]] ([CODE(char)[[[U+0000]]]] 〜 [CODE(char)[[[U+10FFFF]]]]、除外なし) がそのまま使えることになっています。従って、 - [[XPointer]] [[IRI参照]]は [[RFC 3987]] [[IRI参照]]や[[遺物拡張IRI参照]]で認められていない [[Unicode]] [[文字]]を含むことがあります。 - [[XPointer]] [[IRI参照]]では[[素片識別子]]内に [CODE(char)[#]] を含むことがあります ([[RFC 3987]] [[IRI参照]]では不可)。 - [[XPointer]] [[IRI参照]]では [[authority]] [[部品]]以外でも [CODE(char)[[['''[''']]]] や [CODE(char)[[[''']''']] を含むことがあります ([[RFC 3987]] [[IRI参照]]では不可)。 - [CITE@en[XPointer Framework]] ([[W3C]] [[勧告]]) -- [CSECTION@en[B. Escaping and Encoding of reserved IRI characters]], [CSECTION@en[C. Escaping and Encoding of reserved URI characters]] [3] '''XML 名前空間 IRI 参照''': [[XML名前空間 1.1]] の第1版は、当時 [[RFC 3987]] が出版されていなかったため、 [[RFC 3987]] になる前の [[Internet Draft]] である [[draft-duerst-iri-03]] と [[draft-duerst-iri-05]] を参照しつつ (どちらも non-normative reference)、独自に [[IRI参照]]を定義しています。 それによると、「[[IRI参照]]」は、 [[hostname]] 部品があればそれに [[IDNA]] [[ToASCII]] 演算 (≒ [[Punycode]] [[符号化]]) を施し、「追加文字」 を[[百分率符号化]]した結果、[[URI参照]]が得られる[[文字列]]です。 「追加文字」とは、[[Unicode]] の[[非ASCII文字]]から[[私用域]]や[[非文字]]や[[代理組]]の[[符号位置]]を除外したものです。 [56] この定義は実際上 (何が [[IRI参照]]で何が [[IRI参照]]ではないかという点で) [[draft-duerst-iri-05]] と一致していることになっています (未検証)。 なお、「[[URI参照]]」の定義は明らかにされていません。[[XML名前空間 1.1]] 第1版の仕様書の参考文献には [[RFC 2396]] と [[RFC 2732]] が挙がっているのですが、両者は本文中のどこからも参照されていません。 [57] [[draft-duerst-iri-05]] と [[RFC 3987]] の定義は異なるようです (未検証)。 そのため、 - [[XML名前空間 1.1]] [[IRI参照]]には [[query]] 部品であっても[[私用域]]の[[文字]]を含めることができません ([[RFC 3987]] [[IRI参照]]では可)。 - [[XML名前空間 1.1]] [[IRI参照]]には [[RFC 3987]] 本文中の追加の構文上の制約が適用されません。 - [[XML名前空間 1.1]] における「[[URI参照]]」が [[RFC 2396]] + [[RFC 2732]] の定義によると仮定すると、 [[RFC 2396]] + [[RFC 2732]] と [[RFC 3986]] の「[[URI参照]]」の定義の違いが [[XML名前空間 1.1]] [[IRI参照]]と [[RFC 3987]] [[IRI参照]]の違いになります。例えば、 [[authority]] 部品内で[ [百分率符号化]]された[[ホスト名]]を用いることは [[RFC 3987]] では認められていますが、 [[XML名前空間 1.1]] では認められないことになります。 - [CITE@EN[Namespaces in XML 1.1]] ([DEL[[[W3C]] [[勧告]]]] (改訂済)) -- [CSECTION@en[9 Internationalized Resource Identifiers (IRIs)]] [58] なお、[[XML名前空間 1.1]] は既に改訂されており、 第2版では [[RFC 3987]] を直接参照しています。 第1版における [[IRI]] の定義は第2版からは削除されています。 [4] '''XInclude IRI 参照''': [[XInclude 1.0]] の第1版は、当時 [[RFC 3987]] が出版されていなかったため、 [[RFC 3987]] になる前の [[Internet Draft]] である [[draft-duerst-iri-11]] を参照しつつ (non-normative reference)、独自に [[IRI参照]]を定義しています。 それによると、「[[IRI参照]]」は、 [[Unicode]] の[[非ASCII文字]]のうち、[[私用域]]の[[文字]]や[[非文字]]と[[代理組]]の[[符号位置]]を除外したものを[[百分率符号化]]した結果が [[URI参照]]になる[[文字列]]です。 [59] 「[[URI参照]]」の定義は明記されていませんが、文脈によると少なくても [[RFC 2396]] によっているようです。更に、 [[RFC 2396]] だけでなく [[RFC 2732]] もこの仕様書から normative reference として参照されています。 [60] [[XInclude]] [[IRI参照]]も [[XML名前空間 1.1]] [[IRI参照]] (>>3) も [[RFC 2396]] + [[RFC 2732]] の [[URi参照]]に基づき定義されているとみなすと、 [[XInclude]] [[IRI参照]]は [[XML名前空間 1.1]] [[IRI参照]]のほぼ[[部分集合]]になりますが、 - [[XInclude]] [[IRI参照]]の定義は [[XML名前空間 1.1]] [[IRI参照]]の定義と異なり [[IDNA]] [[ToASCII]] を行っていませんので、 [[XInclude]] では [[IDN]] を使うことができません ([[RFC 2396]] + [[RFC 2732]] の構文に一致しませんので)。 [61] なお、 [[XInclude]] 1.0 第1版では「[[IRI参照]]に変換されるもの」も定義されています (>>62)。 [64] この部分の規定は[[正誤票]]の PEX17 で削除され、 [[XML 1.1]] の [[XML資源識別子]]を使うという規定に置き換わっています (>>65)。 - [CITE@en[XML Inclusions (XInclude) Version 1.0]] -- [CSECTION@en[4.1.1 Escaping of href attribute values]] *** 「IRI に変換されるもの」や「IRI 参照に変換されるもの」を定義している仕様 [62] '''XInclude IRI 参照に変換されるもの''': [[XInclude]] 1.0 第1版では「[[IRI参照]]」を定義していますが (>>4)、 [CODE(XMLa)@en[[[href]]]] [[属性値]]を [[IRI参照]]に変換する方法も定義しています。 それによると、 [[IRI参照]]に変換するためには[[属性値]]の次の[[文字]]を[[百分率符号化]]しなければ[['''なりません''']]。 - [CODE(char)[[[U+0020]]]] - [CODE(char)[[[<]]]], [CODE(char)[[[>]]]], [CODE(char)[[["]]]] - [CODE(char)[[[{]]]], [CODE(char)[[[}]]]], [CODE(char)[[[|]]]], [CODE(char)[[[\]]]], [CODE(char)[[[^]]]], [CODE(char)[[[`]]]] [63] この部分の規定は[[正誤票]]の PEX17 で削除され、 [[XML 1.1]] の [[XML資源識別子]]を使うという規定に置き換わっています (>>65)。 - [CITE@en[XML Inclusions (XInclude) Version 1.0]] ([DEL[[[W3C]] [[勧告]]]] (改訂済)) -- [CSECTION@en[4.1.1 Escaping of href attribute values]] [27] '''XLink IRI 参照に変換されるもの''': [[XLink 1.1]] の当初の [[WD]] は、 [CODE(XMLa)@en[[[href]]]] [[属性]]の値は [[RFC 3987]] の [[IRI参照]]か、 [CODE(char)[[[U+0020]]]] を[[百分率符号化]]すると [[RFC 3987]] [[IRI参照]]になるものでなければ[['''ならない''']]と規定していました。 この規定は [[XLink 1.0]] との[[後方互換性]]のためとされています。 [73] - [[XLink 1.0]] が定義していた [[URI参照]]に変換されるもの (>>9) より認められる範囲が狭まっています。 (ただし [[RFC 2396]] と [[RFC 3986]]/[[RFC 3987]] の構文上の違いがあるので、 [[XLink 1.1]] [[IRI参照]]に変換されるものは [[XLink 1.0]] [[URI参照]]に変換されるものの完全な[[部分集合]]にはなっていません。) - [[XLink 1.1]] の新しい [[CR]] では、「[[XML資源識別子]]」という名前がついて、 内容も変わっています (>>28)。新しい定義の方が、 [[XLink 1.0]] の定義により近い形になっています。 - [CITE@en[XML Linking Language (XLink) Version 1.1]] ([DEL[[[W3C]] [[作業原案]]]] (改訂済)) -- [CSECTION@en[5.4 Locator Attribute ([CODE(XMLa)@en[href]])]] *** 「URI に変換されるもの」、「URI 参照に変換されるもの」を定義している仕様 **** HTML 4.01 URI 誤り処理 [10] [[HTML 4]] は[[著者]]に対しては [[URI]] しか認めていませんが、 informative な附属書中で、[[利用者エージェント]]が[[非ASCII文字]]を含む [[URI]] [[属性値]]の処理に関して、 = まずは [[UTF-8]] として[[百分率符号化]]し、試してみる = 古い[[文書]]に対応したい[[利用者エージェント]]は、前項が失敗した場合、 [[文書]]の[[文字符号化]]を使って[[百分率符号化]]し、試してみる という方法を述べています (1項目は推奨されており、2項目は note での言及、 ただしどちらも informative)。 ;; なお、 [[HTML 4]] は「[[URI参照]]」の意味で「[[URI]]」という語を使っていると見られる上、 [[RFC 1738]]、[[RFC 1808]]、[[RFC 2396]] をいずれも normative に参照しており、混乱しています。 [70] - [[HTML 4]] のこの解説は必ずしも実情に合っておらず、 [[HTML 5]] の「[[URL]]」の定義は異なったものとなっています (>>69)。 - [[XSLT 1.0]] の[[HTML出力方式]]では、値が [[URI]] である[[属性]]について、 [[HTML 4]] の[[推奨]]する方式によって[[百分率符号化]]するべきであるとされています ([[HTML出力方式]]の項を参照)。 - [[XPath 2.0]]/[[XQuery 1.0]] にはこの解説に基づいたと称する[[関数]] [CODE@en[fn:[[escape-html-uri]]]] が定義されていますが、 この関数が行うのは [CODE(char)[[[U+0020]]]] 〜 [CODE(char)[[[U+007E]]]] ''以外''の[[百分率符号化]]であって、 [[HTML 4]] の解説とは[[制御文字]]の扱いが含まれている点が異なります。 そもそも [[XPath 2.0]]/[[XQuery 1.0]] には [[IRI参照]] (実際には[[遺物拡張IRI参照]]的なもの) から [[URI参照]]に変換する[[関数]] [CODE@en[fn:[[iri-to-uri]]]] もあるので、 [[URI参照]]で認められない [[ASCII]] [[文字]]を[[百分率符号化]]しない [CODE@en[fn:[[escape-html-uri]]] の存在意義は疑問です。 - [[HTML 4]] ([[W3C]] [[勧告]]) -- [CSECTION@en[B.2.1 Non-ASCII characters in URI attribute values]] - [[XSLT 1.0]] --[CSECTION@en[16.2 HTML Output Method]] - [CITE@EN[XQuery 1.0 and XPath 2.0 Functions and Operators]] ([[W3C]] [[勧告]]) --[CSECTION@en[7.4.12 fn:escape-html-uri]] [7] '''XML システム識別子''': [[XML]] の[[システム識別子]]は、 [[URI参照]]に変換できるものと定義されています。 (なお、 1.0 1e E76 以後、[[システム識別子]]に[[素片識別子]]が現れるのは[[誤り]]とされています。) 厳密な定義は正誤票で何度も重ねて訂正され、各版で内容が微妙に異なっています。 ,版,参照する [[URI]] 仕様,[[百分率符号化]]しなければならない[[文字]] ,1.0 1e,[[RFC 2396]] になる前の [[Internet Draft]] ([[RFC 1738]] と [[RFC 1808]] も参照、3ついずれも informative),[[非ASCII文字]] ,1.0 1e E49,同上,[[非ASCII文字]]、[[RFC 2396]] 2.2 節 [[reserved]] 文字 ,1.0 1e E66,[[RFC 2396]]、[[RFC 2732]],[[非ASCII文字]] ,1.0 1e E78、1.0 2e、1.0 2e E5,[[RFC 2396]]、[[RFC 2732]],"[[非ASCII文字]]、[[RFC 2396]] 2.4 節除外文字 (ただし [CODE(char)[#]], [CODE(char)[[[%]]]], [CODE(char)[[['''[''']]]], [CODE(char)[[[''']''']]]] を除く)" ,1.0 2e E26、1.0 2e E43、1.0 3e、1.1 1e,同上,"[CODE(char)[[[U+0000]]]]-[CODE(char)[[[U+001F]]]], [CODE(char)[[[U+007F]]]], [CODE(char)[[[U+0020]]]], [CODE(char)[[[<]]]], [CODE(char)[[[>]]]], [CODE(char)[[[U+0022]]]], [CODE(char)[[[{]]]], [CODE(char)[[[}]]]], [CODE(char)[[[|]]]], [CODE(char)[[[U+005C]]]], [CODE(char)[[[^]]]], [CODE(char)[[[`]]]], [CODE(char)[[[U+0080]]]] 以上" ,1.0 4e E14、1.0 4e、1.1 1e E22、1.1 2e,[[RFC 3986]],同上 - 1.0 1e E49 の修正は誤った変更です (reserved は [[URI]] で使え’'る''[[文字]])。 - 1.0 1e では「[[URI]]」とありましたが、 1e [[正誤票]] E88 で「[[URI参照]]に置き換えられています。 - 1.0 2e と 1.0 3e の間で実質的な変更はありません。 -[CITE[Extensible Markup Language (XML) 1.0]] ([DEL[[[W3C]] [[勧告]]]] (改訂済)) -- [CSECTION@en[4.2.2 External Entities]] -- [CITE@en[Errata in REC-xml-19980210]] ([TIME[2000-10-07 09:19:21 +09:00]] 版) ---E88 ---E78 ---E76 ---E66 ---E49 -[CITE@EN[Extensible Markup Language (XML) 1.0 (Second Edition)]] ([DEL[[[W3C]] [[勧告]]]] (改訂済)) -- [CSECTION@en[4.2.2 External Entities]] -- [CITE@en[Errata in REC-xml-20001006]] ([TIME[2004-11-25 20:26:49 +09:00]] 版) --- E5 --- E26 --- E43 - [CITE@EN[Extensible Markup Language (XML) 1.0 (Third Edition)]] ([DEL[[[W3C]] [[勧告]]]] (改訂済)) -- [CSECTION@en[4.2.2 External Entities]] -- [CITE@en[Errata in REC-xml-20040204]] ([TIME[2006-08-10 00:48:41 +09:00]] 版) - [CITE@EN[Extensible Markup Language (XML) 1.1]] ([DEL[[[W3C]] [[勧告]]]] (改訂済)) -- [CSECTION@en[4.2.2 External Entities]] -- [CITE@en[Errata in REC-xml11-20040204]] ([TIME[2006-08-10 00:48:58 +09:00]] 版) - [CITE@en[Extensible Markup Language (XML) 1.0 (Fourth Edition)]] ([[W3C]] [[勧告]]) --[CSECTION@en[4.2.2 External Entities]] -[CITE@en[Extensible Markup Language (XML) 1.1 (Second Edition)]] ([[W3C]] [[勧告]]) --[CSECTION@en[4.2.2 External Entities]] [22] '''RDF/XML:1999 (XML 1.0 1e の処理の参照)''': [[RDF]] の1999年の仕様では、[[生成規則]]上の [CODE(ABNF)@en[[[URI-reference]]]] は [[XML]] における[[文字列]]であり、 [[RFC 2396]] に従って解釈するとされていました。 構文上は [[URI]] として正しくない[[文字列]]も認められていたことになります。 Note では、 [[XML]] (の最新版) を引用しつつ、[[非ASCII文字]]は[[百分率符号化]]して [[URI]] として解釈することが実装に勧められています。 ;; なお、この仕様書は「[[URI]]」と「[[URI参照]]」の両方の語が現れますが、 「[[URI参照]]」という語が現れるのは[[生成規則]]の名前だけで、 基本的に両者を区別していないようです。 - [CITE[Resource Description Framework (RDF) Model and Syntax Specification]] ([DEL[[[W3C]] [[勧告]]]] (改訂済)) -- [9] '''XLink/XML 基底/XML 署名 URI 参照に変換されるもの''': [[XLink]] [CODE(XMLa)@en[xlink:[[href]]]] [[属性]]や [CODE(XMLa)@en[[[xml]]:[[base]]]] [[属性]]や [[XML署名]]の [CODE(XMLa)@en[[[URI]]]] [[属性]]の値は、 次の[[文字]]を[[百分率符号化]]した後、 [[RFC 2396]] [[URI参照]]として解釈されることになっています。 - [[非ASCII文字]] - [[RFC 2396]] 2.4節除外文字 ([CODE(char)[#]], [CODE(char)[[[%]]]], [CODE(char)[[['''[''']]]], [CODE(char)[[[''']''']]]] を除く。) [72] [[百分率符号化]]する[[文字]]の種類の規定では [[RFC 2396]] と [[RFC 2732]] に基づいているのですが、「[[URI参照]]」の定義としては [[RFC 2396]] しか参照していません。仕様書中の文言を厳密に解釈するなら、 [[authority]] [[部品]]中であっても [CODE(char)[[['''[''']]]], [CODE(char)[[[''']''']]]] は使えないことになります。 [32] [[SVG 1.0]]、[[SVG 1.1]] は、 [[SVG]] [[文書]]で用いられる [CODE(XMLa)@en[xlink:[[href]]]] [[属性]]について、 [[XLink 1.0]] を参照しつつも [[XLink 1.0]] と同じことを再度規定しています。 [8] - [[XLink]]/[[XML基底]]/[[XML署名]] [[URI参照]]に変換されるものは [[XML]] [[システム識別子]]における [[URI参照]]に変換されるもの (1.0 2e 以降、1.1、>>7) とほぼ同じですが、 「[[URI参照]]」の定義が [[RFC 2396]] だけを参照している点が異なります。 - [[XLink]]/[[XML基底]]/[[XML署名]] [[URI参照]]に変換されるものは、 [[XLink 1.1]] [[CR]] で定義され (>>28)、 [[XML基底]]第2版の [[PER]] が参照 (>>74) している [[XLink]] [[XML資源識別子]]とほぼ同じですが、 「[[IRI参照]]」ではなく、[[RFC 2396]] の「[[URI参照]]」を参照している点が異なります。 -[CITE[XML Linking Language (XLink) Version 1.0]] ([[W3C]] [[勧告]]) --[CSECTION@en[5.4 Locator Attribute ([CODE(XMLa)@en[href]])]] -[CITE[XML Base]] ([[W3C]] [[勧告]]) --[CSECTION@en[3.1 URI Reference Encoding and Escaping]] -[CITE[XML-Signature Syntax and Processing]] ([[W3C]] [[勧告]]) --[CSECTION@en[4.3.3.1 The [CODE(XMLa)@en[URI]] Attribute]] - [[SVG 1.0]] ([[W3C]] [[勧告]]) --[CSECTION@en[5.3.2 URI reference attributes]] -[[SVG 1.1]] ([[W3C]] [[勧告]]) --[CSECTION@en[5.3.2 URI reference attributes]] [11] '''WebCGM URI に変換されるもの''': [[WebCGM]] 第2版は、 [[WebCGM]] [[処理器]]が [[URI]] の解釈の際に[[非ASCII文字]]を[[百分率符号化]]しなければならないと規定しています。 この仕様書は [[RFC 2396]] (だけ) を参照していますが、「[[URI参照]]」 という言葉を使わず、「[[URI]]」を「[[URI参照]]」も含めた意味で使っているようです。 処理の規定の部分では [[XML 1.0]] 第2版の[[システム識別子]]の処理の規定 (>>7) を採用すると述べられているのですが、なぜかそれを参照するだけに留まらずにわざわざ独自の規定を行っており、 その規定が [[XML 1.0]] 第2版のものではなく、 [[XML 1.0]] 第1版と同じで[[非ASCII文字]]しか[[百分率符号化]]しないものとなっています。 [76] - なお、この部分の規定は第1版にはありませんでした。 - [[RFC 2732]] は参照されていません。従って、厳密には [[XML 1.0]] の (正誤票適用時も含めた) どの版とも一致しません。 - [[WebCGM]] 第2版 ([[W3C]] [[勧告]]) -- [CITE[WebCGM Intelligent Content]] [CSECTION@en[3.1.1.4 Non-ACSII Characters in URIs]] [33] '''WebCGM 2.0 URI 参照に変換されるもの''': [[WebCGM]] の新しい版である [[WebCGM]] 2.0 の仕様書では、前版の記述 (>>11) と違って [[RFC 3986]] と [[RFC 3987]] を参照し、 「[[URI参照]]」という言葉を使ってより明確な形の規定に改められています。 ;; ただし、「[[URI]]」という用語は「[[URI参照]]」と必ずしも区別されていないように見受けられます。 さて、この新しい規定では、 [[WebCGM]] における [[URI]] ([[URI参照]]ではなく。) は [[RFC 3987]] 3.1 節の[[百分率符号化]]を施した後、 [[RFC 3986]] [[URI参照]] ([[URI]] ではなく。) にならなければならないとされています。 ;; [[RFC 3987]] 3.1節には [[ASCII]] 範囲内の [[URI]] で使えない文字を[[百分率符号化]]して[['''構わない''']]ことになっていますが、 それが適用されるか否かには全く言及していません。 加えて、[[百分率符号化]]の適用例が示されているのですが、 その中には、[[百分率符号化]]以外の [CODE(char)[[[%]]]] が [CODE(char)[%25]] になるという怪しい例が含まれています。 -[CITE@en[OASIS CGM Open specification - WebCGM 2.0 - WebCGM Intelligent Content]] ([DEL[[[W3C]] [[会員提出]]]] (改訂済)) -- [CSECTION@en[3.1.1.4 Non-ASCII characters in URIs]] - [CITE[WebCGM 2.0 - WebCGM Intelligent Content]] ([[W3C]] [[勧告]]) -- [CSECTION@en[3.1.1.4 Non-ASCII characters in URIs]] 、 - [CITE[WebCGM 2.0 - WebCGM Intelligent Content]] ([[OASIS]] [[標準]]) -- [CSECTION@en[3.1.1.4 Non-ASCII characters in URIs]] [31] '''XML 型録 URI 正規化''': [[XML型録]]仕様書では、[[正規化]]と称して、[[型録処理器]]に対する入力や[[型録]]中で示された [[URI参照]]のようなものを [[URI参照]]に変換する処理を定義しています。 定義されている処理の内容は、 [[XLink 1.0]] 等 (>>8) と同じです。 「[[URI参照]]」の定義として [[RFC 2396]] を参照している点も同じです。 [[XML型録]]で定義されている値が [[URI参照]]の[[属性]]については、 本文の定義に従うなら [[RFC 2396]] の [[URI参照]]なのですが、 2003年以降の仕様に含まれる [[XML Schema]] や [[RELAX NG]] の[[スキーマ]]では [CODE(XML)@en[[[anyURI]]]] となっています。 - [[XML型録]] ([[OASIS]] 仕様) -- [CSECTION@en[System Identifier and URI Normalization]] *** 「XML 資源識別子」、「遺物拡張 IRI」、「遺物拡張 IRI 参照」を定義・参照している仕様 [66] 名前と内容と定義文書が頻繁に変わる'''これ'''は、そもそも [[W3C]] の [[XML中核WG]] が [[XML]] 関連仕様の [[URI]]/[[IRI]] の定義を統一するべく、作業を始めました。 はじめは [[XRI]] という名前でしたが、 [[OASIS]] の同名の仕様との衝突を避けるため、 [DFN[[[XML資源識別子]]]] ([DFN@en[XML Resource Identifier]]、[[XMLRI]] とも) に改名されました。 [[XLink 1.1]] で定義するつもりだったり (>>28)、 [[XML 1.1]] で定義するつもりだったり (>>65) した後、 [[Internet Draft]] が出版されました。その頃名前は [DFN@en[[[HRRI]]]] (確か、 [DFN@en[Human Readable Resource Identifiers]]) でした。 それが [[RFC 3987]] の改訂版となる [[Internet Draft]] に吸収され、 [[HRRI]] のような積極的に使いたくなる名前は避けるべきだとして [DFN[[[遺物拡張IRI]]]] ([DFN@en[Legacy Extended IRI]]、[DFN@en[[[LEIRI]]]]) および [DFN[[[遺物拡張IRI参照]]]] ([DFN@en[Legacy Extended IRI reference]]) として定義されるに至りました。この間、名前と定義文書だけでなく、 定義そのものも少しずつ変化しています。 [67] 作業が始まって5年以上が経つわけですが、 [[XML中核WG]] は [[LEIRI]] の作業の完了待ちで各種仕様の改訂作業も中断状態、もうほんと gdgd です。 [65] '''XInclude 1.0 第2版 (将来の XML 1.1 の定義の参照)''': [[XInclude]] 1.0 の第1版[[勧告]]に対する[[正誤票]]の修正案 PEX17 では、独自の「[[IRI参照]]」 (>>4) や「[[IRI参照]]に変換されるもの」 (>>62) の定義を削除し、代わりに [[XML 1.1]] の「[[XML資源識別子]]」であるとしました。 [[XML資源識別子]]とは [[RFC 3987]] の [[IRI参照]]に変換されるものであるとも述べていました。 この修正は [[XInclude]] 1.0 第2版[[勧告]]に反映されました。 第2版は更に [[XML 1.1]] の4.2.2節で「[[XML資源識別子]]」が定義されていると明確化しています。 ただし、実は [[XML 1.1]] の改訂はこの時点では行われておらず (その後立ち消え)、 [[XML 1.1]] には「[[XML資源識別子]]」という言葉が一切出てきません。 - [CITE@en-US[XInclude 1.0 Errata]] ([TIME[2006-04-24 01:05:52 +09:00]] 版) -- 第1版 [[W3C]] [[勧告]] (改訂済) の[[正誤票]]。 - [CITE@EN[XML Inclusions (XInclude) Version 1.0 (Second Edition)]] ([[W3C]] [[勧告]]) -- [CSECTION@en[4.1.1 Escaping of href attribute values]] [28] '''XLink XML 資源識別子''': [[XLink 1.1]] [[CR]] は「[[XM資源識別子]]」を定義しています。 当時の [[XML中核WG]] の目論見としては、各種 [[XML]] 関連仕様の [[URI]]/[[IRI]] の定義をこれを参照する形に改める予定だったようです。 [[XML資源識別子]]を [[IRI参照]]にするためには次の[[文字]]を[[百分率符号化]]しなければなりません。 - [CODE(char)[[[U+0000]]]] 〜 [CODE(char)[[[U+001F]]]], [CODE(char)[[[U+007F]]]] - [CODE(char)[[[U+0020]]]] - [CODE(char)[[[<]]]], [CODE(char)[[[>]]]], [CODE(char)[[["]]]] - [CODE(char)[[[{]]]], [CODE(char)[[[}]]]], [CODE(char)[[[|]]]], [CODE(char)[[[\]]]], [CODE(char)[[[^]]]], [CODE(char)[[[`]]]] なお、 [[XML資源識別子]]を相対形から絶対形に[[解決]]する場合に、 [[IRI]] や [[URI]] を経由せずとも直接変換できることが明記されています。 [68] - 前の [[WD]] (>>27) では [CODE(char)[[[U+0020]]]] だけが[[百分率符号化]]対象でしたが、[[URI]] で認められない [[ASCII]] [[文字]]全体に拡大しています。 - [[XLink]] [[XML資源識別子]]は [[XLink]]/[[XML基底]] [[URI参照]]に変換されるもの ([[XLink 1.0]] の定義、>>9) とほぼ同じですが、「[[URI参照]]」ではなく「[[IRI参照]]」 を参照している点が異なります。 - [[XLink]] [[XML資源識別子]]は [[XML]] [[システム識別子]]における [[URI参照]]に変換されるもの (1.0 2e 以降、1.1、>>7) とほぼ同じですが、 「[[URI参照]]」ではなく「[[IRI参照]]」 を参照している点が異なります。 - [CITE@en[XML Linking Language (XLink) Version 1.1]] ([DEL[[[W3C]] [[勧告候補]]]] (改訂済)) --[CSECTION@en[5.4.1 XML Resource Identifiers]] [74] '''XML 基底 2e PER (XLink 1.1 CR の参照)''': [[XML基底]]の第2版 [[PER]] では、第1版の [[URI参照]]に変換されるもの (>>9) の規定が削除され、 [[XLink 1.1]] [[CR]] で定義されている [[XML資源識別子]] (>>28) を参照する形に改められています。 - [CITE@EN[XML Base (Second Edition)]] ([[W3C]] [[PER]]) --[CSECTION@en[3 [CODE(XMLa)@en[xml:base]] Attribute]] [71] '''XLink 1.1 2nd LCWD (IRIbis 02 の参照)''': >>28 の次に出版された [[XLink 1.1]] の [[WD]] では、[[XML資源識別子]]の定義は削除されており、 [[RFC 3987]] の改訂案である [[draft-duerst-iri-bis-02]] の [[LEIRI]] を参照するように改められています。 - [CITE@en[XML Linking Language (XLink) Version 1.1]] ([[W3C]] [[WD]]) --[CSECTION@en[5.4 Locator Attribute ([CODE(XMLa)@en[href]])]] *** 「anyURI」を定義・参照している仕様 [77] 後述のように、 [[XML Schema]] 第2部の[[データ型]]に関する仕様書で定義されている [[URI]]・[[IRI]] のための[[データ型]] [DFN@en[[[anyURI]]]] は、「[[URI]]」という名前にも関わらず、実質的に [[IRI参照]]として定義されています。 この[[データ型]]は [[XML Schema]] 仕様書内では [[XLink 1.0]] を参照する形で定義がなされていますが、 [[スキーマ]]で [CODE(XML)@en[[[anyURI]]]] [[データ型]]を使う[[文書型]]の仕様書の中には、 [[RFC 3987]] [[IRI参照]]などを引用するものもあって、 厳密には矛盾した、あるいは不必要な制約が加わった形の参照となっていることがあります。 **** XML Schema 1.0 anyURI [15] [[XML Schema]] [[データ型]] [DFN@en[anyURI]] は、 [[URI]] を表すものであり、絶対形・相対形を含み、[[素片識別子]]があってもよいと定義されています。 更に、 [[RFC 2396]] と [[RFC 2732]] により定義される [[URI]] の役割を果たす値を表すものとして使うべきであるとされています。 そして、 [[anyURI]] から [[URI]] への変換は [[XLink 1.0]] 5.4節による、 とされています。 [[anyURI]] の[[字句空間]]は [[XLink 1.0]] 5.4 節に従った変化によって [[RFC 2396]] + [[RFC 2732]] の [[URI参照]]となる[[文字列]]、とされています。 [78] わかりにくい定義がなされているのですが、結局のところ、 [[XLink 1.0]] [[URI参照]]に変換されるものと同じものを意図しているようです。 ([[XML Schema]] 第2部第1版が参照しているのは [[XLink 1.0]] [[PR]] ですが、内容は >>8 と同じです。第2版は[[勧告]]を参照しています。) 厳密に解釈すれば [[XLink 1.0]] の「[[URI参照]]」は [[RFC 2396]] により、 [[XML Schema]] は [[RFC 2396]] と [[RFC 2732]] によっているので、 [[XML Schema]] の場合の方が表す範囲が広いことになります。 なお、 [[XLink 1.0]] は文脈的に [[XML 1.0]] で認められていない [[C0制御文字]]はそもそも対象外で認められていないように読めるのですが、 [[XML Schema]] はそのような除外が記されておらず、 [[C0制御文字]]も認められているとも解釈できます。 ([[XML Schema]] [[データ型]] [CODE(XML)@en[[[string]]]] は [[XML 1.0]] で認められている[[文字]]だけと明記されているのですが、 [CODE(XML)@en[[[anyURI]]]] については何も言及がありませんし、後者が前者の[[派生型]]というわけでもありません。) ところで、 [[XML Schema]] 仕様書は「[[URI]]」を「[[URI参照]]」 の意味で使っているようです。 第2版では note が追加されるなど多少変更はありますが、実質的な規定の内容には変化がありません。 ;; よくみると「anyURI represents a Uniform Resource Identifier Reference (URI)」 という定義になっていて、「[[URI]]」というのは「[[URI参照]]」の意味だということになってます。 - [CITE[XML Schema Part 2: Datatypes]] ([DEL[[[W3C]] [[勧告]]]] 改訂済) --[CSECTION@en[3.2.17 anyURI]] - [CITE@EN[XML Schema Part 2: Datatypes Second Edition]] ([[W3C]] [[勧告]]) --[CSECTION@en[3.2.17 anyURI]] **** RELAX NG anyURI [75] [[RELAX NG]] を定義する [[ISO/IEC 19757]]‐2:2002 では、 [[RELAX NG]] の構文の定義の中で、「[DFN@en[anyURI]]」を定義しています (6章)。 それによると、 [[anyURI]] とは、 [[XLink 1.0]] 5.4節の[[百分率符号化]]処理 (>>9) の結果が [[RFC 2396]] + [[RFC 2732]] の [[URI参照]]となる[[文字列]]です。 また、 7.4 節、7.6 節は anyURI として定義された[[属性]]の処理を規定していますが、 そこでは [[XLink 1.0]] 5.4節の[[百分率符号化]]処理 (>>9) と同じであると規定されています。 更に、附属書 A には [[RELAX NG]] 自体の [[RELAX NG]] [[スキーマ]] (規定) がありますが、 そこでは [CODE(URI)@en[[[http://www.w3.org/2001/XMLSchema-datatypes]]]] を [CODE(XMLa)@en[[[datatypeLibrary]]]] とした上で [CODE(XML)@en[[[anyURI]]]] が関係する[[属性]]の[[データ型]]として用いられています。 [29] 対応する[[翻訳JIS]] である [[JIS X 4177]] にも、当然同じ規定があります。 ;; [76] つまり、実質的には同じものを本文中では [[XML Schema]] を参照せずに規定し、 附属書中では [[XML Schema]] (>>15) を使って規定しています。 もっとも、厳密いえば [[ISO/IEC 19757]]‐2:2003 の中では [[XML Schema]] の[[データ型]]の [[URL]] [CODE(URI)@en[[[http://www.w3.org/2001/XMLSchema-datatypes]]]] の意味を特に定義しておらず、 [[XML Schema]] は参考文献にも挙がっていませんので、附属書Aの意図するところは (厳密には) 明確になっていません。 - [[ISO/IEC 19757]]‐2:2003 ([[ISO/IEC]] [[国際標準]]) -- [CSECTION@en[6 Full syntax]] -- [CSECTION@en[7.4 datatypeLibrary attribute]] -- [CSECTION@en[7.6 href attribute]] -- [CSECTION@en[Annex A (normative) RELAX NG schema for RELAX NG]] - [[JIS X 4177]]‐2:2005 ([[JIS]] [[規格]]) ****RDF/XML anyURI [84] [[RDF/XML]] の2004年版仕様書は、構文の定義中に「anyURI」があり、 「Any URI.」と説明されているのですが、それ以上の詳しい説明はありません。 anyURI が使われているのは [[RDF/XML]] として解釈する [[XML 1.0]] [[文書]]中の[[要素]]の[[名前空間URI]] と[[局所名]]を連結したもの (いわゆる[[展開URI]]) に関する部分です。他の部分との整合性を考えれば、 [[RDF URI参照]] (>>6) と解するのが適切でしょうか。 - [CITE@en[RDF/XML Syntax Specification (Revised)]] ([[W3C]] [[勧告]]) -- [CSECTION@en[6.3.2 Grammar Event Matching Notation]] ****XML Schema 1.1 anyURI [79] [[XML Schema 1.1]] における [DFN@en[[[anyURI]]]] の定義は [[XML Schema 1.0]] のもの (>>15) とは異なり、 [[RFC 3987]] (またはその改訂版) の [[IRI参照]]とされています。 ただし、その[[字句空間]]は単なる[[文字列]]と同じで、それ以上の制約は設けられていません。 Note には [[anyURI]] が実用上有用であるためには [[RFC 3987]] 3.1節の[[百分率符号化]]によって [[RFC 3986]] [[URI]] になる[[文字列]]であるべきだと述べられていますが、 note であって定義には含まれていません。 ;; [80] なお、 [[XML Schema 1.1]] も [[URI]]/[[IRI]] と [[URI参照]]/[[IRI参照]]の違いに無頓着なようです。 - [CITE@EN[W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes]] ([[W3C]] [[LCWD]]) --[CSECTION@en[3.3.18 anyURI]] ****WSDL anyURI (XML Schema anyURI の参照) [35] [[WSDL 2.0]] は [[XML Schema]] 第2版の [CODE(XML)@en[[[anyURI]]]] (>>15) を使っています。ですが、単に引用するだけではなく、 - 本質的には [[RFC 3987]] [[IRI]] だ - [[URI]] への変換は [[XLink 1.0]] で定義されているが、 [[RFC 3987]] 3.1 節とほとんど同じだ - [[相互運用性]]のため、 [CODE(char)[[[<]]]], [CODE(char)[[[>]]]], [CODE(char)[[["]]]], [CODE(char)[[[U+0020]]]], [CODE(char)[[[{]]]], [CODE(char)[[[}]]]], [CODE(char)[[[|]]]], [CODE(char)[[[\]]]], [CODE(char)[[[^]]]], [CODE(char)[[[`]]]] を使わないことをお勧めする と述べられています。 実際に使用している箇所では、 [Q[[[RFC 3987]] の[[絶対IRI]]]] のように更に制約があります。 [87] どうしてわざわざ「本質的に」などとわけのわからないことを付け加える必要があるのでしょう。 なお、この仕様書も [[URI]]/[[IRI]] と [[URI参照]]/[[IRI参照]]の違いには無頓着に見えます。 -[CITE@en[Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language]] ([[W3C]] [[勧告]]) -- [CSECTION@en[1.4.3 XML Schema anyURI]] *** IRI・IRI 参照に近い意味で「URI」や「URI 参照」を定義している仕様 [25] '''P3P URI''': [[P3P]] は用語の定義の中で「[[URI]]」を定義しています。その中では [[RFC 2396]] によると述べているのですが、 [[HTML]] や [[XML]] においては [[W3C]] [[charmod]] [[WD]] の規定に従うとしています。 (ただし、 [[HTTP]] においては適用しないとされています。) ですが、その参照 (normative reference) されている [[W3C]] [[charmod]] [[WD]] は、仕様が [[IRI]] (の当時の [[Internet Draft]] である [[draft-masinter-url-i18n-08]]) を使用[['''するべきです''']]と述べているに過ぎず、 [[P3P]] の実装が何をするべきなのかは明らかでありません。 [26] [[P3P 1.1]] [[WD]] の当該規定は [[P3P 1.0]] [[勧告]]から変更されていません。 参照している [[charmod]] [[WD]] も古いもののままです。 [40] なお、 [[WD]] の当該部分は後に分割された別の単独の仕様書に移動しています。 しかしながら、その仕様書は [[CR]] に達した後、放置されているようです。 (実質的な内容は変化していません。) [[W3C]] [[勧告]]から [Q@en[Work in progress]] な仕様を参照したことに大きな問題があります。 - [CITE@en[The Platform for Privacy Preferences 1.0 (P3P1.0) Specification]] ([[W3C]] [[勧告]]) --[CSECTION@en[1.3 Terminology]] -[CITE@en[The Platform for Privacy Preferences 1.1 (P3P1.1) Specification]] ([[W3C]] [[WD]]) --[CSECTION@en[1.3 Terminology]] - [CITE@en[Character Model for the World Wide Web 1.0]] ([DEL[[[W3C]] [[WD]]]] 改訂済) --[CSECTION@en[8 Character Encoding in URI References]] -- [[P3P]] [[勧告]]が参照 (normative reference) する [[WD]]。 - [CITE@en[Internationalized Resource Identifiers (IRI)]] -- [[charmod]] [[WD]] が参照する [[Internet Draft]]。 -- 当然のことながら、後の [[RFC 3987]] とは内容が異なります。 - [CITE@en[Character Model for the World Wide Web 1.0: Resource Identifiers]] ([[W3C]] [[CR]]) [24] '''XML 暗号化 URI''': [[XML暗号化]]仕様書では、「[[URI]]」は [[XML Schema]] [[データ型]] [CODE(XML)@en[[[anyURI]]]] (>>15) と [[XML署名]] [CODE(XMLa)@en[[[URI]]]] [[属性]]の規定 (>>8) に従わなければ[['''なりません''']]と規定されています。 なお、「[[URI]]」の参考文献として [[RFC 2396]] ([[URI]])、[[RFC 1738]] ([[URL]])、 [[RFC 2141]] ([[URN]])、[[RFC 2611]] ([[URN]]) が参照されています。 [83] 手当たり次第に何でも引用できるものはしてしまおうとでもいうのでしょうか、 無茶苦茶ですね。引用されている [[XML署名]]の規定は [[XLink 1.0]] の規定と同じ内容なので、実用上は [[XML Schema]] の規定とも同じで、 問題にはならないのですが・・・。 - [CITE[XML Encryption Syntax and Processing]] ([[W3C]] [[勧告]]) --[CSECTION@en[1.3 Versions, Namespaces, URIs, and Identifiers]] [6] '''RDF URI 参照''': 2004年の [[RDF]] 仕様書は「[[RDF]] [[グラフ]]における [[URI参照]]」 ([[RDF URI参照]])」を定義しています。それによると、 [DFN[[[RDF URI参照]]]]とは、 - [[Unicode]] [[文字列]]であって、 - [CODE(char)[[[U+0000]]]] 〜 [CODE(char)[[[U+001F]]]]、 [CODE(char)[[[U+007F]]]] 〜 [CODE(char)[[[U+009F]]]] を含まず、 - [[百分率符号化]]によって [[RFC 2396]] [[URI参照]] (ただし、[[絶対URI]] + [[素片識別子]]) となるもの です。[[百分率符号化]]の対象としては、 - [[非ASCII文字]] - [[RFC 2396]] 2.4節除外文字 ([CODE(char)[#]], [CODE(char)[[[%]]]], [CODE(char)[[['''[''']]]], [CODE(char)[[[''']''']]]] を除く。) が挙げられています。 [81] [[非文字]]や[[代理組]]の[[符号位置]]が認められているのかどうかは不明瞭です。 [82] - 「[[URI参照]]」の定義に [[RFC 2396]] だけを引用しており、 厳密に解釈すると [[RFC 2732]] の拡張は含まれないことになります。 - [[相対参照]]は定義に含まれていませんが、 [[RDF/XML]] 等[[具象構文]]で[[基底URI]] が定義されている場合には[[相対参照]]を使っても構わないと note に記述されています。 --[[RDF URI参照]]を参照している仕様はこの意味で[[相対参照]]まで含めて [[RDF URI参照]]と呼んでいる (のかもしれない) ことがあります。 -- 例えば、 [[RDF/XML]] 仕様書のほとんどの「[[RDF URI参照]]」への言及は絶対形と理解して問題ないのですが、 文法規則 URI-reference をそう理解すると一部の[[属性値]]に[[相対参照]]が使えないことになり、 仕様書の他の部分の記述や一般的な理解と矛盾します。 - [[RDF URI参照]]は [[XML Schema]] 第1版の [[anyURI]] (>>15) のうち、 [[相対参照]]を除いたものと互換であると note に記述されています。「互換」の意味は明確ではありませんが、 ([[RFC 2732]] の解釈に関する問題を除けば) [[anyURI]] が [[RDF URI参照]]の[[超集合]]となっています ([[anyURI]] では[[制御文字]]を使用可能)。 - [[RDF URI参照]]は [[XML名前空間 1.1]] の [[IRI]] (>>3) と互換であると note に記述されています。「互換」の意味は明確ではありませんが、 ([[XML名前空間 1.1]] における「[[URI参照]]」の定義が謎なのに目をつぶれば) [[XML名前空間 1.1]] [[IRI参照]]は [[RDF URI参照]]の[[部分集合]]となっています ([[XML名前空間 1.1]] [[IRI参照]]では[[私用域]]、[[非文字]]、[[代理組]]の[[符号位置]]を使用不能)。 ただし、 [[XML名前空間 1.1]] [[IRI参照]]には[[相対参照]]も含まれています。 - 仕様書中の当該する節は [[IRI]] の [[RFC]] 化を見越したもので、 [[IRI]] の [[Internet Draft]] である [[draft-duerst-iri-04]] やその後の版に適合しない [[RDF URI参照]]に対しては警告を発しても構わないと note にあります。 実際のところ [[RFC 3987]] の [[IRI参照]] (の[[相対IRI参照]]を除いたもの) と [[RDF URI参照]]を比較すると、 使える[[文字]]の種類としては [[RFC 3987]] の方が [[RDF]] の方の[[部分集合]]になっています。しかし、構文的には逆に、 [[RFC 3987]] で認められている [[authority]] 中の[[百分率符号化]]が [[RFC 2396]] ベースの [[RDF URI参照]]では認められていなかったりします。 - [CITE@en[Resource Description Framework (RDF): Concepts and Abstract Syntax]] ([[W3C]] [[勧告]]) --[CSECTION@en[6.4 RDF URI References]] [5] '''DOM URI''': [[DOM水準3]] では、中の人も相当困ったのでしょう、具体的な書式に言及することを諦めて、 抽象的な [DFN@en[[[DOM URI]]]] を次の条件を満たすものとして定義しています。 - 絶対識別子 (「絶対 URI」) は、 [[Web]] 上の資源を絶対的に識別する - 単純な文字列比較により絶対識別子は比較でき、他の等価性は [[DOM]] では扱わない - 相対識別子 (「相対 URI」) は簡単に判別可能かつある絶対識別子に対して絶対にできる - 資源の内容の取り出しは必要な時に行ってもよい そして、一般に [[DOM]] 内では特定の書式を想定した処理はせず、 相対識別子の解決や内容の取り出しで必要になった場合に限り、 関係する仕様書に従って処理することとされています。 関係する仕様書の例としては、 [[HTML 4.01]]・[[XML 1.0]]・[[XML名前空間 1.0]] については [[RFC 2396]]、[[XML名前空間 1.1]] 第1版についてはその [[IRI]] が示されています。 [30] '''XSLT URI 参照''': [[XSLT 2.0]] [[勧告]]では「[[URI参照]]」を定義しています。 また、[[XPL]] 仕様案では、「[[URI参照]]」の定義を、(当時の) [[XSLT 2.0]] の [[WD]] から借りたとして同じことを定義しています。 それによると、「[[URI参照]]」は、 [[XML Schema]] の [CODE(XML)@en[[[anyURI]]]] [[データ型]]の[[字句空間]]に属する[[文字列]]です。 加えて、[[外部資源]]を識別する [[URI参照]]については、 [[XLink 1.0]] 5.4節 (>>8) と同じ規則に適合しなければならないとの制約が加わります。 また、[[相対参照]]を[[解決]]する場合は [[RFC 2396]] ([[XPL]]) または [[RFC 3986]] ([[XSLT]]) [[URI参照]]に変換しなければならない旨が規定されています。 なお、 [[XPL]] の仕様書は、その規定・言及の仕方の範囲内では特に何の問題もないとは思いますが、 [[RFC 2396]] を引用しているものの、 [[RFC 2732]] には言及すらしていません。 [37] 単に [[XML Schema]] の [[anyURI]] を参照するとだけ述べずに、 なぜあえて[[字句空間]]に限定し、更に別に [[XLink]] を参照する規定を敢えて加えたのかはよくわかりませんが、 「外部参照の」という限定があることを考えると、外部参照以外の [[URI参照]]には [[XLink]] の規定を適用しない、という意図があるのでしょうか。そうだとしても、 結局 [[XML Schema]] の規定する[[字句空間]]内では違いが現れないと思うのですが。 なお、 [[XPL]] 仕様書の参考文献一覧では [[XML Schema]] の発行年が2000年になっていますが (リンクは最新版へ)、 [[XML Schema]] 第1版の[[勧告]]は2001年です。 2000年当時の [[CR]] では「[[anyURI]]」は規定されておらず、「[[uriReference]]」 という名前でした。この仕様書自体は2005年なので、そのような古い仕様案を引用する意味はなく、 単なる誤記かもしれません。 [[XSLT 2.0]] は [[XML Schema]] 第2版を参照しています。 - [CITE@EN[XML Pipeline Language (XPL) Version 1.0 (Draft)]] ([DEL[[[W3C]] [[会員提出]]]] 改訂済) --[CSECTION@en[8.2 URI Reference]] - [CITE@EN[XSL Transformations (XSLT) Version 2.0]] ([[W3C]] [[勧告]]) --[CSECTION@en[5.8 URI References]] [38] '''XPath URI''': [[XPath 2.0]] 本体仕様書と [CITE@EN[XQuery 1.0 and XPath 2.0 Functions and Operators]] では、「[[URI]]」 は [[RFC 3986]] で定義されて [[RFC 3987]] で [[IRI]] として拡張されているものを指すと定義しています。 「[[基底URI]]」等の複合語の「[[URI]]」を「[[IRI]]」に置き換えることによる混乱を防ぐ意図があると述べられています。 [CITE@EN[XQuery 1.0 and XPath 2.0 Functions and Operators]] では更に「[[URI参照]]」も定義しています。「[[URI参照]]」は [[XSLT 2.0]] (>>30) と同じく、 [[XML Schema]] 第2版 [CODE(XML)@en[[[anyURI]]]] (>>15) の[[字句空間]]とされています (ただし特に規定がない場合との限定付き)。 ([[XSLT 2.0]] とは異なり、こちらでは [[XLink]] 仕様に基づく変換のような規定はありません。) [85] このおかしな定義のため、 [[XPath 2.0]] においては「[[URI]]」 が [[RFC 3986]]/[[RFC 3987]] ベース、「[[URI参照]]」 が [[RFC 2396]]/「「RFC 2732]] ベースになってしまっています。 - [CITE@EN[XML Path Language (XPath) 2.0]] ([[W3C]] [[勧告]]) --[CSECTION@en[2 Basics]] - [CITE@EN[XQuery 1.0 and XPath 2.0 Functions and Operators]] ([[W3C]] [[勧告]]) --[CSECTION@en[1.7 Terminology]] [45] '''PLS URI''': [[PLS]] 仕様書では、「[[URI]]」を [[WebArch]] 仕様書に示された大域識別子であって、 [[XML Schema]] 第2版の [CODE(XML)@en[[[anyURI]]]] (>>15) である、としています。 その上で、 informative purposes only としながら [[RFC 3986]] と [[RFC 2732]] を有用だろうとして引用しています。 [[RFC 3987]] にも言及しています。 [89] 単に [[XML Schema]] だけを引用しておけばいいところ、なぜ敢えて色々わけのわからないものを引用しているのかが謎です。 [[WebArch]] を引用する意味はわかりませんし、 [[RFC 2732]] への参照も消し忘れでしょうが、そんなものが review を越えて[[勧告]]になるというのもおかしな話です。 - [CITE[Pronunciation Lexicon Specification (PLS) Version 1.0]] ([[W3C]] [[勧告]]) --[CSECTION@en[1.5. Glossary of Terms]] **** XHTML URI [90] [[XHTML m12n 1.0]] [[勧告]]では[[属性型]]「[CODE[[[URI]]]]」は [[RFC 2396]] [[URI]] とされていました (「A Uniform Resource Identifier, as per [URI].」) が、 [[XHTML m12n 1.1]] [[勧告]]では [[XML Schema]] [CODE(XML)@en[[[anyURI]]]] (>>15、第2版[[勧告]]) (「A Uniform Resource Identifier Reference, as defined by the type anyURI in XMLSCHEMA.」) に変更されています。 ただし、 [[DTD]] 内の[[注釈]]にある説明は「[URI]」と書かれており、 参考文献リストによれば「[URI]」は [[RFC 3986]] を指しています。 また、 [[XML Schema]] 内の [CODE(XML)@en[[[URI]]]] や [CODE(XML)@en[[[URIs]]]] という[[データ型]]の定義も、 [CODE(XML)@en[[[anyURI]]]] を参照しているにも関わらず、 [[XML]] の[[注釈]]として「[URI]」 という説明が含まれており、 やはり [[RFC 3986]] を示唆しています。 ;; [91] [[XHTML m12n 1.0]] では [[HTML 4]] を引きずっていたのか、「[[URI参照]]」 のつもりで「[[URI]]」といっているようです。 ;; [94] [[XHTML m12n 1.1]] には[[スキーマ]]の定義より本文の規定が優先しなければならない [[XHTML族モジュール]]の[[適合性]]に関する規定があります。 ([[XHTML m12n 1.1]] が適合 [[XHTML族モジュール]]なのかどうかは知りません。) [92] [[XML事象]]には [[URI]] (的なもの) を値とする[[属性]]として [CODE(XMLa)@en[[[handler]]]] [[属性]]が定義されています。 [[XML事象]]は [[XHTML m12n]] の流儀にのっとって[[語彙]]が定義されているのですが、 - 3. 章の [[XHTML m12n]] 風の[[抽象モジュール]]定義の表では[[属性型]]は 「[[URI]]」とされており、その「[[URI]]」の部分は [[XHTML m12n]] (最新版) の[[属性型]]「[[URI]]」へと[[リンク]]されています。 (>>30 にある通り、 [[XHTML m12n]] の定義は版によって異なっています。[[XML事象]]が[[勧告]]された当時の[[リンク]]先は [[XHTML m12n 1.0]] [[勧告]]でした。) - 3.1. 節の本文の説明では、[[属性値]]は「[[URI参照]]」だとされています。 - A.1. 節の [[DTD]] [[QNameモジュール]]の中の[[大域属性]]のための[[属性定義]]では、 [[属性型]]は [CODE(XML)@en[%[[URI.datatype]];]] とされています。 この[[モジュール]]では[[引数実体]] [CODE(XML)@en[%[[URI.datatype]];]] は定義されていませんが、 [[XHTML m12n]] の [[DTD]] と同じものを指していると考えられます。 - A.2. 節の [[DTDモジュール]]の中の [CODE(XMLe)@en[[[handler]]]] [[要素]]のための[[属性定義]]では、 [[属性型]]は [CODE(XML)@en[%[[anyURI.datatype]];]] とされています。 [[引数実体]] [CODE(XML)@en[%[[URI.datatype]];]] は定義されていません。 -B. 章の [[XML Schema]] [[モジュール]]では、[[大域属性]]、[[局所属性]]ともに [CODE(XML)@en[[[anyURI]]]] (>>15、 normative reference は第1版[[勧告]]) とされています。 [93] なお、 引用されている [[XHTML m12n]] は参考文献の章では [[XHTML m12n 1.0]] [[勧告]]になっているのですが、それが含まれる節は [CSECTION@en[C.2.Other References]] です。その直前が [CSECTION@en[C.1.Normative References]] なのですから、 常識的に考えれば C.2. は non-normative なのでしょうが、そんなことはどこにも書かれていません。 もし non-normative だとすると、 [[XHTML m12n]] の枠組みにのっとって定義されているかのように見える [[XML事象]]仕様ですが、その根本的な部分が怪しくなります。 ;; もっとも、これが旧 [[HTML WG]] (現 [[XHTML2 WG]]) の標準的なクオリティーですから、 細かいことを気にしても仕方がないかもしれません。 - [[XHTML m12n]] --[CSECTION@en[4.3. Attribute Types]] - [CITE@en[XML Events]] ([[W3C]] [[勧告]]) *** IRI・IRI 参照に近い意味で「URL」を定義している仕様 [47] '''HTTP における URL''': [[RFC 2068]] は [[HTTP/1.1]] における [[URL]] を定義していますが、 [[RFC 1738]] で認められていない [[ASCII]] [[文字]] ([CODE(ABNF)@en[[[national]]]]) や [CODE(char)[[[0x80]]]] 以上の[[オクテット]] ([[右半面]]) を使うことを認めていました。 (ただし、 [CODE(char)[[[0x80]]]] 以上の[[オクテット]]の解釈は明記されていません。) [[HTTP]] の [[URL]] が[[鯖]]が解釈するのだから、[[相互運用性]]の問題はないといったような理屈でした。 これは [[RFC 2616]] で修正され、 [[RFC 2396]] に従うようになりました。 [69] '''[[HTML 5]] [[URL]]''': [[HTML 5]] は [[URL]] の処理を定義しており、そこでは任意の[[文字列]]が [[URL]] として与えられた時にどう扱わなければならないかを規定しています。 更に、[[妥当なURL]] を定義しています。[[妥当なURL]] は [[RFC 3986]] [[URI]] や [[RFC 3987]] [[IRI]] の[[部分集合]]になっています。 [48] [[HTML 5]] の中の人である [[Ian Hickson]] は、 [[HTML 5]] に [[URL]] の規定を含めるにあたり、 [[ietf-uri]] の人達に [[Web]] のための [[URL]] の独立した仕様を作る気がないか問い合わせましたが、 彼らは自分達には関係のない問題だと拒否したため、 [[HTML 5]] に含まれることになりました。 詳しくは [[URI5]] や [[URL]] の項を参照してください。 *** メモ @@ SVG Tiny 1.2 勧告後、それについての説明を追加する。 [46] [[RFC 4622]] は [CODE(URI)@en[[[xmpp]]:]] [[URL]] の構文を定義しているのですが、 [[RFC 3986]] や [[RFC 3987]] で認められていない [[ASCII]] [[文字]]を使うことを認めていました。 これは [[RFC 5122]] で修正され、 [[RFC 3986]] や [[RFC 3987]] に従うようになりました。 [88] 他の仕様書で定義された [Q[IRI 参照]]や [Q[URI 参照に変換できるもの]]などを参照している規格はこの他に多々あります。 XML 系の規格は XLink 1.0 を、新し目の規格は [CODE(XML)[[VAR[xs:]][[anyURI]]]] を参照する傾向にあります。 ([CODE(XML)[[VAR[xs:]]anyURI]] は XLink 1.0 を参照しています。) [12] HTML 4 は参考でエラー処理として現在の IRI も処理できるといいよとしか言っていないのに、 HTML 4 は IRI に対応してるんだとかぬかす IRI 氏んじゃウゼー ([[名無しさん]] [WEAK[2005-02-01 11:43:21 +00:00]]) [[#comment]] ** メモ [44] [CITE@en[draft-duerst-iri-bidi-00 - Internet Identifiers and Bidirectionality]] ([CODE[2007-07-20 13:22:23 +09:00]] 版) [14] [CITE[Editing 'Internationalized Resource Identifiers']] [43] [CITE[Resuming editing of IRI spec towards Draft Standard]] ([[Martin Duerst]] 著, [CODE[2007-06-04 08:31:57 +09:00]] 版) [[#comment]] * 安全性, アクセス可能性, 可用性 [16] '''似た形の文字''': [[UCS]] には[[図形記号]]が似た[[文字]](列)が極めて多く含まれています。 紛らわしくて困るというだけなら [WEAK[(それだけでも大問題ですが)]] まだしも、[[なりすまし]]などの安全上の問題にもなります。 [[RFC 3987]] の仕様ではできるだけ [[NFC]] や [[NFKC]] を使うことを勧めていますが、従来の[[文字符号化方式]]との関係 [WEAK[(RFC 3987 は従来の文字符号化方式で IRI が記述されていたら [[NFC]] に変換することを求めていますが、 RFC 3987 の対象外の世界で従来の文字符号化方式から [[UTF-8]] などに変換済みなら NFC でないかもしれません。 IRI を[Q[作る]]側も、[[ファイル名]]など NFC でない因子を持っているかもしれません。)]] や悪意のある者が必ずしもそれに従うとは限りません。 [17] '''見えない文字''': [[UCS]] には[[図形記号]]を持たない[[文字]]が多く含まれています。 例えば [CODE(char)[[[U+3000]]]] ([CODE(char)[[[IDEOGRAPHIC SPACE]]]]) も IRI で使えます。 IRI のような文字列があった時にどこで終わるのかわからないので不便ですし、 [CODE(char)[[[IDSP]]]] と [CODE(char)[[[EMSP]]]] と [CODE(char)[[[ENSP]]]] が2つ並んでいるものは区別できなかったりします (>>16 の問題)。 単に見えないだけではなく、何らかの意味を持った[[文字]]もあります。 [CODE(char)[[[PARAGRAPH SEPARATOR]]]] は段落境界を意味します。 IRI の途中で改段落などされると甚だ迷惑ではあるのですが、 仕様上は認められているようです。 悪意のある人は悪いことに使うかもしれません。 [18] '''双方向性''': [[RFC 3987]] には [[bidi]] に関する規定があります。 要約すると、 Unicode の bidi 算法をそのまま使うというものです。 最近の色々な規格 [WEAK[(例えば [[CSS]])]] は全面的に Unicode の bidi 算法を採用しているので IRI の部分だけ他の算法を採用するというのは非現実的ではありますが、 Unicode の bidi 算法は普通の文章を主に想定しているので、 記号を普通の文章とは違う特別な意味で使っている IRI では予期せぬことが起こります ([[RFC 3987//6]] にわずかながら例があります)。 IRI の途中で直感とは異なる形で表示上の場所が入れ替わるのは実用上大きな問題ですが、 [[なりすまし]]の安全上の問題もかかえています。 [[#comment]] * 相互運用性 [20] IRI が規格化される前から、色々な実装で URI が使える場所に URI で使えない[[文字]]があっても処理できるようになっていました。 しかし、その取扱い (利用者への提示の仕方や[[文字符号化方式]]など) は実装によりばらばらで、ある実装で動くように見えるものが別の実装では動かないといった問題が多発していました。 IRI が標準化されたことで長期的に見れば問題は減少に向かうでしょうが、 URI ではない IRI が積極的に使われるようになると短期的には問題が以前よりも多く発生するようになると思われます。 [21] IRI が標準化されたとはいえ、従来 URI を使ってきた規格がすべて IRI に移行するわけではありません。 以前の実装やデータとの互換性の問題がありますから、 即座に移行するものはないと言っても過言ではないでしょう。 URI しか使えない場所に無理矢理 IRI を使おうとするのは問題を複雑にするだけであり、 [[著者]]・情報提供者の自己満足以上のものは得られません。 [34] [CITE[Bug 261929 - Consider sending urls in UTF-8 by default (images/links with non-ASCII chacters not displayed)]] [[#comment]] * メモ [36] [CITE@ja[電子メール本文中の日本語ドメイン名URLをクリックできるようにするには - 日本語.jp]] ([CODE[2006-11-29 16:15:15 +09:00]] 版) ([[名無しさん]] [WEAK[2006-12-29 07:19:52 +00:00]]) [41] [CITE[Amazon日本語URL時代における書籍名の新常識 - 坂本多聞のインサイドアウト]] ([CODE[2007-06-09 23:47:23 +09:00]] 版) ([[名無しさん]] [WEAK[2007-06-09 14:49:43 +00:00]]) [42] [CITE@ja[WordPressカスタマイズメモ【企業ホームページ制作方法】: SEO対策にはUTF-8(文字コード)]] ([CODE[2007-06-07 13:21:14 +09:00]] 版) ([[名無しさん]] [WEAK[2007-06-09 14:50:32 +00:00]])