[10] [[LDHラベル]]を拡張して[[非ASCII文字]]を利用できるようにしたものを、 [DFN[[RUBYB[国際化ラベル]@en[internationalized label]]]]といいます。 * 仕様書 - [6] [[IDNA2003]] [CITE@en[RFC 3490 - Internationalizing Domain Names in Applications (IDNA)]] -- [3] '''''' -- [7] - [11] [[IDNA2008]] -- [28] [CITE@en[RFC 5890 - Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework]] --- [12] '''''' --- [15] --- [25] -- [27] [CITE@en[RFC 5891 - Internationalized Domain Names in Applications (IDNA): Protocol]] --- [29] --- [41] * 定義 ** IDNA2003 の定義 [1] > [DFN[[RUBY[国際化][こくさいか]@en[internationalized]][RUBYB[ラベル]@en[label]]]]は、 [CODE@en[[[ToASCII]]]] [[操作]] [WEAK[([[フラグ]] [CODE@en[[[UseSTD3ASCIIRules]]]] は未設定)]] が[[失敗]]しないような[[ラベル]]です。 [[STD 13]] の長さ制限を満たす[[各ASCIIラベル]]は[[国際化ラベル]]です。 従って[Q[[[国際化ラベル]]]]は従来の [[ASCIIラベル]]と新しい[[非ASCIIラベル]]の両方を含む一般化した[[用語]]です。 ほとんどの [[Unicode]] [[文字]]が[[国際化ラベル]]中に現れることができますが、 入力文字列によっては [CODE@en[[[ToASCII]]]] が[[失敗]]することがあり、そのような[[文字列]]は[[妥当]]な[[国際化ラベル]]ではありません。 [SRC[>>3]] ** IDNA2008 の定義 [13] [[IDN]] の1つの[[ラベル]]、すなわち[[Aラベル]]、[[Uラベル]]、[[NR-LDHラベル]]のいずれかである[[ラベル]]を[DFN[[RUBYB[国際化ラベル]@en[internationalized label]]]]といいます。 [[下線ラベル]]などは[[国際化ラベル]]ではありません。 [SRC[>>12]] ** メモ [14] [[IDNA2003]] では[[LDHラベル]]の条件を満たさなくても[[テキスト・ラベル]]であれば[[国際化ラベル]]に含まれましたが、 [[IDNA2008]] では [[LDHラベル]]と [[Uラベル]]だけが[[国際化ラベル]]です。 [[ToASCII]]が失敗しない[[非ASCII]] [[文字列]]の[[集合]]と[[Uラベル]]である[[文字列]]の[[集合]]も異なっています。 * 文字の順序 [26] [[ラベル]]における[[文字]]の順序は、[[表示順]]ではなく[[論理順]]です [SRC[>>25]]。 * 比較 [16] [[IDNA2003]] も [[IDNA2008]] も、 [[ASCII]] による ([[Punycode]] による) 表現に変換した上で[[ASCII大文字・小文字不区別]]で[[一致]]するかどうかを[[等価]]であることの定義としています。 [23] 両者とも表面的には同じ定義になっていますが、実際には [[IDNA2003]] の [[ToASCII]] [[演算]]と [[IDNA2008]] の[[Aラベル]]への変換が大きく異なっているので、[[等価性]]の定義も実は大きく異なっています。 ** IDNA2003 における等価性の定義 [2] [SRC[>>3]] > [[IDNA]] では、[[ラベル]]の[[等価性]]はそれが [[ASCIIラベル]]であるか否かに関わらず、 [CODE@en[[[ToASCII]]]] [[演算]]によって [[ASCII]] 形を構築した上で定義されます。 [[ラベル]]は、 [CODE@en[[[ToASCII]]]] によって生成した [[ASCII]] 形が[[大文字・小文字不区別]]の [[ASCII]] [[比較]]により[[一致]]する場合、その場合に限って、 [RUBY[[[等価]]][とうか]@en[equivalent]]であるとします。 [[ASCIIラベル]]に対しては[[大文字]]と[[小文字]]は[[等価]]とみなすという[[等価性]]が既に存在します。 [[IDNA]] での[[等価性]]はこの従来の[[等価性]]の拡張になります。 [CODE(example)@en[foo]] と [CODE(example)@en[Foo]] が同じ[[ラベル]]の別の形であるのと同様に、 [[IDNA]] において[[等価]]な[[ラベル]]は同じ[[ラベル]]の別の形であるものとして取り扱います。 ** IDNA2008 における等価性の定義 [30] [[IDNA2008]] の2つの[[ラベル]]が[DFN[[RUBYB[等価]@en[equivalent]]]]であるとは、 - [34] 両方を[[Uラベル]]として表したときに完全に等しい - [35] 両方を[[Aラベル]]として表したときに[[ASCII大文字・小文字不区別]]で等しい ... のいずれかであることをいいます [SRC[>>15, >>29]]。 [36] [[Uラベル]]と[[Aラベル]]は互いに情報の損失なく変換できるので、 [[Uラベル]]としての比較と [[Aラベル]]としての比較は必ず同じ結果になります [SRC[>>29]]。 [37] [[Aラベル]]は [[LDHラベル]]であり、従来の [[DNS]] の規定に基づく[[等価性]]の定義、 つまり [[ASCII大文字・小文字不区別]]の比較が適用されますが、 [[Uラベル]]にはこれが適用されず、そのまま比較することとなっています。 [SRC[>>15, >>29]] [[正規化]]なども行われません。 ;; [39] [[NR-LDHラベル]]は従来通りの [[DNS]] の [[ASCII大文字・小文字不区別]]の一致により等しいかが決まります。 [38] [[Uラベル]]も[[Aラベル]]も、妥当性の検証は比較のために必須ではありません [SRC[>>29]]。 (つまり[[未検証Uラベル]]同士や[[未検証Aラベル]]同士で比較できます。) しかし[[妥当性検証]]は諸々の理由でどのみち重要であって行う[['''べき''']]である [SRC[>>29]] とされています。 * DNS 鯖における取り扱い (IDNA2003) [8] [[ゾーン]]に蓄積される[[ドメイン名]]は、 [[Stringprep]] における[[蓄積文字列]]の規則に従います。 [SRC[>>7]] [9] [[DNS鯖]]は、 [[ASCII]] で表現できない[[国際化ラベル]]は、 [[ToASCII]] [[演算]]を適用し、 [[ACE]] 形を使って表現しなければ[['''なりません''']]。 [SRC[>>7]] * 登録時の手順 [46] [[非ASCII文字]]を含む[[国際化ラベル]]の[[登録]]にあたっては、 [[IDNA2008]] によれば次の手順に従うこととされています。 ** 登録の受付 [40] [[レジストラ]]を経て[[レジストリー]]に至る登録手続きについては [[IDNA]] では適用範囲外とされており、[[レジストリー]] ([[ゾーン管理者]]) による登録のみが規定されています。登録手続きの段階で個別の事情に応じて変換などが行われるかもしれませんが、 [[IDNA]] 仕様による制約の及ばない範囲とされています。[[レジストリー]] ([[ゾーン・ファイル]]に責任をもつ者) は、 (そうした手続きの後の) 実際に登録を行うべき文字列そのものだけを受け付けなければ[['''なりません''']]。 登録する[[文字列]]は [[Unicode]] で、 [[NFC]] でなければ[['''なりません''']]。 [SRC[>>41 4.1]] [42] [[レジストリー]]は、次の3つのいずれの形式の入力であっても受け付けて[['''構いません''']]が、 [[Aラベル]]によって曖昧性を回避できるため、 >>43 と >>44 が[['''推奨''']]されています。 更に、検証が可能という点において >>44 より >>43 が通常[RUBYB[好ましい]@en[preferred]]とされています。 [SRC[>>41 4.1]] - [43] [[Aラベル]]と[[Uラベル]]の組 - [44] [[Aラベル]]だけ - [45] [[Uラベル]]だけ ** 入力のチェック *** UラベルとAラベルが与えられた場合のチェック [47] [[Uラベル]]と[[Aラベル]]の両方が与えられた場合、 - [52] [[Aラベル]]について、 -= [48] [[小文字]]化し、 -= [49] [[Aラベル]]を[[Uラベル]]に変換し、 -= [50] [[Uラベル]]に対する手順を実行し、 -= [51] [[Aラベル]]に変換 ([[RFC 5891]] 4.4) し、 -= [53] 元の[[Aラベル]]と[[一致]]するか確認しなければ[['''なりません''']]。 [SRC[>>41 4.2]] - [54] [[Uラベル]]について、 -= [55] >>49 と[[一致]]するか確認しなければ[['''なりません''']]。 [SRC[>>41 4.2]] - [56] >>52、>>54 で[[一致]]しない場合は[[登録]]を拒絶しなければ[['''なりません''']]。 [SRC[>>41 4.2]] *** Aラベルだけが与えられた場合のチェック [57] [[Aラベル]]だけが与えられた場合で [[Uラベル]]への変換を行わない場合、 - [58] [[Aラベル]]が表面的に[[妥当]]であるか [WEAK[([[Punycode]] 違反、例えば末尾が [CODE(char)[[[-]]]] でないか、すべてが[[ASCII文字]]であるか、など)]] を確認しなければ[['''なりません''']]。 [SRC[>>41 4.2]] - [59] [[Aラベル]]に見える文字列 ([CODE[[[xn--]]]] で始まるなど) であったり、 [[Aラベル]]を与えるべきところで与えられた文字列であったりするものが >>58 でいうところの[[妥当]]な [[Aラベル]]でなければ、これを [[IDNA]] に対応した [[DNSゾーン]]に配置しては[['''なりません''']]。 [SRC[>>41 4.2]] - [60] 登録手続きにおいては、以後のチェックを飛ばして[['''構いません''']]し、通常はそうします。 [SRC[>>41 4.2]] *** Uラベルだけが与えられた場合のチェック [61] [[Uラベル]]だけが与えられた場合に特に行うチェックは規定されていません。 ** 認められていない文字の拒否 [62] 与えられた [[Unicode]] [[文字列]]が [[RFC 5892]] で [[DISALLOWED]] または [[UNASSIGNED]] とされた[[文字]]を含んでいては[['''なりません''']]。 [SRC[>>41 4.2.2]] ;; [63] [[Aラベル]]だけが与えられた場合は通常このチェックを飛ばします (>>60)。 ** ラベルの妥当性検証 [64] 与えられた [[Unicode]] [[文字列]]に対して次のチェックを行います。 ここで[[文字]]の順序は[[ネットワーク]]での順序、 [[論理順]]であって、[[表示順]]では[RUBYB[いけません]@en[may not]]。 [SRC[>>41 4.2.3]] ;; [66] [[Aラベル]]だけが与えられた場合は通常このチェックを飛ばします (>>60)。 - [65] 3文字目と4文字目が [CODE[[[--]]]] であっては[['''なりません''']]。 [SRC[>>41 4.2.3.1]] - [67] 最初や最後が [CODE(char)[[[-]]]] であっては[['''なりません''']]。 [SRC[>>41 4.2.3.1]] - [68] 最初の[[文字]]が[[結合文字]] ([[Unicode]] の2.11節) であってはなりません。 [SRC[>>41 4.2.3.2]] - [69] [[妥当性]]が文脈依存である[[文字]]は、[RUBYB[[[文脈的規則]]]@en[contextual rule]]によって特に認められている場合を除き、含まれていては[['''なりません''']]。 [SRC[>>41 4.2.3.3]] -- [70] このチェックにおいて、 [[RFC 5892]] で [[CONTEXTJ]] や [[CONTEXTO]] とされている[[符号位置]]は、 [[非null規則]]を持たなければ[['''なりません''']]。 [SRC[>>41 4.2.3.3]] -- [71] そのような[[符号位置]]が[[規則]]を持たないときは、[[ラベル]]は[[非妥当]]です。 [SRC[>>41 4.2.3.3]] -- [72] そのような[[符号位置]]が[[規則]]を持つものの、結果が否定的あるいは不確定なときは、[[ラベル]]は[[非妥当]]です。 [SRC[>>41 4.2.3.3]] - [73] [[rtl]] な[[書字体系]]の[[文字]]を含むときは、 [[RFC 5893]] の [[bidi]] 要件に従わなければ[['''なりません''']]。 [SRC[>>41 4.2.3.4]] ** ラベルの長さチェック [74] [[Uラベル]]であるためには、[[非ASCII文字]]を1文字以上含んでいなければならず、 [[ACE形]] [WEAK[([[Punycode]] で[[符号化]]して最初に [CODE[[[xn--]]]] をつけたもの [SRC[>>41 4.4]])]] にした状態で63文字[[以下]]でなければなりません。 [SRC[>>41 4.2.4]] ** レジストリーでの制約 [75] 以上の構文的な制約に加えて、[[レジストリー]]は個々の事情に応じて必要な制約を課し、 それを満たさない[[ラベル]]を拒否して構いません。 [SRC[>>41 4.3]] ** 登録 [77] こうして[[ラベル]]がチェックを通過したなら、 [[DNS]] には[[Aラベル]]を登録します。 [SRC[>>41 4.5]] ** Punycode との関係 [76] [[Punycode]] の[[符号化]]の[[算法]]は失敗することがありますが、 この手順でのチェックを終えた[[Uラベル]]については、文字列の最大長についてのものを除き、 失敗することがありません。 [SRC[>.41 4.4]] * 関連 [4] [[国際化ラベル]]に対し、[[ASCII文字]]のみの[[ラベル]]を[[ASCIIラベル]]といいます。 [[ASCIIラベル]]は[[国際化ラベル]]の[[部分集合]]です。 [5] [[国際化ラベル]]の [[Punycode]] 化表現は [[ACEラベル]] ([[IDNA2003]]) や [[Aラベル]] ([[IDNA2008]]) といいます。[[IDNA2003]] はこの[[国際化ラベル]]から [[ASCIIラベル]]への変換を「[[ToASCII]] [[演算]]」として規定しています。 [24] には「IDN labels」 という語がありますが、「[[国際化ラベル]]」の意でしょうか。