[19] [[IRI]] は、 [[URI]] で使える[[文字]]の種類を増やした拡張版の[[識別子]]です。 [[#comment]] * 仕様 [1] IRI は [[IETF]] 的には標準化は全然されてない状態なんですが、 色んな [[W3C]] の仕様が参照したり定義したりしてます。結果的に同じだとしても、 単一の仕様が色んなところで定義されているってのは困ったもんなんですがねぇ。 (2004年12月にようやく [[IESG]] に承認されて[[提案標準]]になるそうです。) (2005年1月に [[RFC 3987]] として発行されました。) - [Q[IRI 参照]]または [Q[IRI]] を定義している仕様書 -- [13] [[RFC 3987]] , --- [Q[IRI 参照]]は、[[百分率符号化]]により [[RFC 3986]] の [[URI参照]]に変換できる文字列です。 --- [[ABNF]] によっても構文が規定されています。 -- [2] [CITE[XPointer Framework]] --- [Q[IRI]] を概念的に定義し、 [Q[IRI 参照]]に [[XPointer]] [[指示子]]を使う方法を規定しています。 ---- IRI 参照に指示子を挿入する時には、百分率記号は[[百分率符号化]]します。 それ以外の文字は百分率符号化しても'''構いません'''が、 しないことを推奨しています。 ---- XPointer 指示子には任意の [[Unicode]] の文字 ([CODE(char)[[[U+0000]]]]〜[CODE(char)[[[U+10FFFF]]]]、除外なし) が使えます。つまり XPointer でいう IRI にはあらゆる Unicode 文字が生で使えます。 -- [3] [[XML名前空間 1.1]] --- [Q[IRI 参照]]は、[[百分率符号化]]と [[Punycode]] 符号化により [[RFC 2396]] + [[RFC 2732]] の [[URI参照]]に変換できる文字列です。 ---- 文字種的には RFC 3987 と出入りがあります。 ---- 構文的には RFC 3987 よりも狭いです。 -- [4] [CITE[[XML Inclusions (XInclude) Version 1.0]] --- [Q[IRI 参照]]は、[[百分率符号化]]により [[RFC 2396]] + [[RFC 2732]] の [[URI参照]]に変換できる文字列です。 ---- 文字種的には RFC 3987 と出入りがあります。 XML 名前空間 1.1 とは同じです。 ---- 構文的には RFC 3987 よりも狭いです。 Punycode 化の規定がないので、 XML 名前空間 1.1 よりも狭いです。 --- [Q[IRI 参照に変換できるもの]]も定義されています。 ---- 文字種的には [Q[IRI 参照]] + α です。 - [Q[IRI 参照に変換できるもの]]または [Q[IRI に変換できるもの]]を定義している仕様書 -- [27] [[XLink 1.1]] --- [[RFC 3987]] の [[IRI参照]]を使っていますが、 [[XLink 1.0]] の名残りで [CODE(charname)[[[SPACE]]]] も[[百分率符号化]]するのだという規定があります。 -- [28] [[XLink 1.1]] --- >>27 に[DFN[[[XML資源識別子]]]]という名前を与えています。 --- 今後の[[XML]]系規格はこれで統一するつもりのようです。 - [Q[URI 参照に変換できるもの]]または [Q[URI に変換できるもの]]を定義している仕様書 -- [10] [CITE[HTML 4.01]] --- '''URI 参照しか認めていません'''が、参考までに壊れた文書中の URI 参照であるべきものを URI 参照らしく解釈する方法が提案されています。 --- [[UTF-8]] とみなして[[百分率符号化]]する方法と、 [[文書]]の[[文字符号化方式]]で百分率符号化する方法が紹介されています。 -- [7] [CITE[Extensible Markup Language (XML) 1.0 (Third Edition)]] , [CITE[Extensible Markup Language (XML) 1.1]] --- [Q[[[システム識別子]]]]に URI 参照 ([[RFC 2396]] + [[RFC 2732]]) で禁止されている文字が使えると規定されています。 --- SE では RFC の参照により禁止文字が指定されていましたが、 TE, 1.1 では直接記載されています。なお、 この規定は正誤表で何度か訂正されています。 --- [22] [[RDF]] の1999年版仕様では XML 1.0 の[[システム識別子]]と同じ方法で URI 参照を扱うことが勧められていました。 ---- [CITE[Resource Description Framework (RDF) Model and Syntax Specification]] -- [9] [CITE[XML Base]] --- URI ([[RFC 2396]] + [[RFC 2732]]) のようなもので禁止文字が使えると規定しています。 --- 禁止文字は [[RFC 2396]] と [[RFC 2732]] に拠っています。 -- [8] [CITE[XML Linking Language (XLink) Version 1.0]] --- URI ([[RFC 2396]]) のようなもので禁止文字が使えると規定しています。 --- 禁止文字は [[RFC 2396]] と [[RFC 2732]] に拠っています。 --- つまり厳密に解釈すると [CODE(char)['''[''']] や [CODE(char)[''']''']] を使うことはできません。 ---- [28] [[RELAX NG]] ----- [[XLink]] を参照しています。 ([ISO/IEC 19757]]‐2:2002 7.6) -- [11] [CITE[WebCGM Intelligent Content]] --- URI ([[RFC 2396]] + [[RFC 2732]]) で禁止文字が使えると規定しています。 --- [[XML 1.0]] [ABBR[[[SE]]] [第2版]] を参照しつつ、 非 ASCII 文字にしか言及していません (ASCII 内の禁止文字については触れていません)。 --- この部分の規定は [ABBR[[[FE]]] [第1版]] にはありませんでした。 -- [33] [CITE[WebCGM 2.0 - WebCGM Intelligent Content]] ([CODE[2007-01-25 02:12:49 +09:00]] 版) 、 [CITE[WebCGM 2.0 - WebCGM Intelligent Content]] ([CODE[2006-11-04 01:53:46 +09:00]] 版) --- [[RFC 3987]]の方法で[[RFC 3986]]の[[URI]]になるものと規定しています。 --- が、単独の[CODE[%]]がどうとか、怪しい記述が色々あります。 --- [40] 旧版: [CITE@en[OASIS CGM Open specification - WebCGM 2.0 - WebCGM Intelligent Content]] -- [23] [CITE[XML-Signature Syntax and Processing]] --- [CODE(XMLa)[[[URI]]]] 属性値を [[RFC 2396]] + [[RFC 2732]] で禁止文字が使えると規定しています。 -- [31] [[XML型録]]では[[正規化]]と称して[[URI]]や[[システム識別子]]を指定できる[[属性]]から[[URI]]を得るための方法が定義されています。 -- [32] [[SVG 1.0]], [[SVG 1.1]] --- --- [[XLink 1.0]] (>>8) を参照しつつ、同じことを定義しています。 - 実際には [ABBR[[[URI]]] [Uniform Resource Identifiers]] や [[URI参照]]ではない [Q[[ABBR[[[URI]]] [Uniform Resource Identifiers]]]] や [Q[[[URI参照]]]]を定義している仕様書 -- [25] [CITE@en[The Platform for Privacy Preferences 1.0 (P3P1.0) Specification]] --- [Q@en[URI]] という用語が定義されています。基本的には [[RFC 2396]] を参照していますが、 [[HTML]] や [[XML]] では [[W3C]] [[charmod]] [[WD]] によるとしています。(ただし [[HTTP]] では元の定義によるとされています。) --- [CITE@en[Character Model for the World Wide Web 1.0]] ---- [[P3P 1.0]] [[勧告]]から参照 (Normative Reference) されている [[WD]]。 ---- [[W3C]] の仕様は [[IRI]] (の当時の [[I-D]]) の定義を使う'''べきだ'''と規定しています。 ---- 後に仕様書が分割されて別の文書に移動しています。最新版は 。 --- [CITE@en[Internationalized Resource Identifiers (IRI)]] ---- 前項の [[charmod]] [[WD]] から参照されている [[I-D]]。 ---- 当然、 [[RFC 3987]] とは細かい点で沢山の違いがあります。 --- [26] [CITE@en[The Platform for Privacy Preferences 1.1 (P3P1.1) Specification]] ---- [[P3P 1.1]] の [[WD]]。用語定義の部分はほとんど [[P3P 1.0]] と同じです。 Normative Reference として参照されているのも依然として古い [[WD]]。 --- [[W3C]] [[勧告]]から [Q@en[Work in progress]] な仕様を参照したことに大きな問題があります。 -- [15] [CITE[XML Schema Part 2: Datatypes]] --- [CODE[[[anyURI]]]] という [Q[URI 参照に変換できるもの]]を規定しています。 --- [Q[URI 参照]]の定義は [[RFC 2396]] と [[RFC 2732]] を参照しています。 --- [CODE[anyURI]] から URI 参照への写像としては XLink 1.0 の方法を参照しています。 -- [24] [CITE[XML Encryption Syntax and Processing]] --- [Q[[ABBR[[[URI]]] [Uniform Resource Identifiers]]]] [SRC[[[RFC 2396]]]] は [CODE(XML)[[VAR[xs:]][[anyURI]]]] かつ >>23 の [CODE(XMLa)[[[URI]]]] 属性の値となり得るものとしています。 -- [6] [CITE[Resource Description Framework (RDF): Concepts and Abstract Syntax]] --- [Q[RDF URI 参照]]あるいは [Q[URI 参照]]として [Q[URI に変換できるもの]]を規定しています。 --- 文字種的には [[Unicode]] の文字列で、 [[C0制御文字]], [[C1制御文字]], [CODE(char)[[[DEL]]]] を除いたものとされています。[[非文字]]や[[サロゲート・ペア]]の片割れの扱いは規定されていません。 --- 構文的には [[RFC 2396]] の URI 参照に[[百分率符号化]]で変換できるものとされています。 --- 符号化する禁止文字の定義には [[RFC 2396]] と [[RFC 2732]] によっています。 --- つまり厳密に解釈すると [CODE(char)['''[''']] や [CODE(char)[''']''']] を使うことはできません。 -- [29] [[RELAX NG]] ([[JIS X 4177]]‐2:2005) の[[記号]] [CODE@en[anyURI]] (同 6.) は [[XLink 1.0]] と [[RFC 2396]] と [[RFC 2732]] の[[URI参照]]を参照しています。 同 7.6 でも [CODE(XMLa)@en[[[href]]]] [[属性]]の処理法法として [[XLink 1.0]] の方法が参照されています。 -- [30] [CITE[XML Pipeline Language (XPL) Version 1.0 (Draft)]] --- [DFN[URI 参照]]と称するものの定義を [[XSLT 2.0]] [[WD]] からコピってます。 --- [[XML Schema 1.0]] の [CODE(XML)@en[[[anyURI]]]] と [[XLink 1.0]] の定義を参照しています。 --- [[相対URI参照]]の[[解決]]について [[RFC 2396]] を参照しています。 ([[RFC 2732]] は参照していません。) -- [35] [CITE@en[Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language]] --- [CODE(XML)@en[[[anyURI]]]] を参照しています。 --- 実際に使用している箇所では、 [Q[[[RFC 3987]] の[[絶対IRI]]]] のように更に制約があります。 --- [[IRI]] で使えない [[ASCII]] [[文字]]は使わないように助言しています。 -- [37] [CITE@en[XSL Transformations (XSLT) Version 2.0]] --- [DFN[URI 参照]]は、 [[XML Schema 1.0]] の [CODE(XML)@en[xs:[[anyURI]]]] の[[字句空間]]に[[一致]]する[[文字列]]としています。 --- 更に、[[外部資源]]を[[識別]]する [[URI参照]]は、 [[XLink 1.0]] の [CODE(XMLa)@en[[QN[xlink:[[href]]] [http://www.w3.org/1999/xlink]]]] [[属性]]の制約にも従わなければならないとしています。 -- [38] [CITE@EN[XML Path Language (XPath) 2.0]] --- [Q[この仕様書内では]]として、 [Q@en[URI]] を次のように定義しています: ---- [[統一資源識別子]]で、 ----- [[RFC 3986]] で定義されていて、 ----- [[RFC 3987]] で新しい名前 [[IRI]] のもとに拡張されているもの --- また、[Q[[[基底URI]]]] など、既存の用語が [Q@en[[[URI]]]] と呼んでいるものを [[IRI]] のために呼び替えることはせずに、 [Q@en[[[URI]]]] のままにするとしています。 -- [39] [CITE@EN[XQuery 1.0 and XPath 2.0 Functions and Operators]] --- >>38 と同じ [Q@en[[[URI]]]] の定義と説明があります。 --- 更に、[Q[[[URI参照]]]]は、別途注意がない限り、 [[XML Schema 1.0]] の [CODE(XML)@en[[[xs:[[anyURI]]]]]] の[[字句空間]]に属する[[文字列]]を指すと定義されています。 - [Q[IRI 参照]]または [Q[IRI]] を包括する概念を定義している仕様書 -- [5] [CITE[Document Object Model Core]] : [DFN[[[DOM URI]]]] は、 [[URI参照]]や IRI 参照や似たようなものすべてです。 (他の仕様書で定義された [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]]) [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]] * メモ [CITE[XML-Signature Syntax and Processing]] [CITE[XML Encryption Syntax and Processing]] [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]]) [44] [CITE@en[draft-duerst-iri-bidi-00 - Internet Identifiers and Bidirectionality]] ([TIME[2007-07-20 13:22:23 +09:00]] 版) ([[名無しさん]])