[28] [[ドメイン名]]を記述する[[プロトコル要素]]のことを一般に[DFN[[RUBYB[ドメイン名スロット]@en[domain name slot]]]]といいます。 [29] [[ドメイン名スロット]]の例としては、[[DNS]] [[照会]]の [CODE@en[[[QNAME]]]] [[欄]]、 [CODE@en[[[gethostbyname]]()]] [[関数]]の [CODE@en[[VAR[[[name]]]]]] [[引数]]、 [[電子メール・アドレス]]の[[ドメイン名]]部分などがあります。 [30] [[ドメイン名]]がたまたま含まれるに過ぎない時、その[[ドメイン名]]の部分は[[ドメイン名スロット]]ではありません。 例えば[[電子メール]]の[[本文]]中に[[ドメイン名]]を書いていても、それは[[ドメイン名スロット]]とはいいません。 * 仕様書 - [25] [[IDNA2003]] [CITE@en[RFC 3490 - Internationalizing Domain Names in Applications (IDNA)]] -- [2] '''''' --- [17] - [26] [[IDNA2008]] -- [31] [CITE@en[RFC 5890 - Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework]] --- [27] '''''' -- [32] [CITE@en[RFC 5891 - Internationalized Domain Names in Applications (IDNA): Protocol]] --- [33] - [39] [CITE@en[RFC 5894 - Internationalized Domain Names for Applications (IDNA): Background, Explanation, and Rationale]] ([TIME[2011-02-05 07:34:29 +09:00]] 版) * 定義 [1] > この[[文書]]では、[DFN[[RUBYB[ドメイン]@en[domain]][RUBY[名][めい]@en[name]][RUBYB[スロット]@en[slot]]]]は、 [[ドメイン名]]を伝播すると陽に指定された[[プロトコル要素]]、 [[関数]]の[[引数]]、[[返し値]]、その他と定義します。 [[ドメイン名スロット]]の例: [[DNS]] [[照会]]の [CODE@en[[[QNAME]]]] [[欄]]、 [CODE@en[[[gethostbyname]]()]] [[ライブラリ関数]]の [CODE@en[[VAR[[[name]]]]]] [[引数]]、 [[電子メイル]]・[[メッセージ]][[頭部]]の [CODE(822)@en[[[From]]:]] [[欄]]の[[電子メイル・アドレス]]の[[単価記号]] ([CODE(char)[[[@]]]]) に続く部分、 [[HTML]] [CODE(HTMLe)@en[[[img]]]] [[タグ]]の [CODE(HTMLa)@en[[[src]]]] [[属性]]の [[URI]] の [CODE@en[[[host]]]] 部分。 [[ドメイン名]]をたまたま含む普通の文章は[[ドメイン名スロット]]ではありません。 例えば、[[電子メイル・メッセージ]]の[[平文]][[本体]]に含まれる[[ドメイン名]]は、 [[ドメイン名スロット]]に現れたものではありません。 [SRC[>>2, >>27]] * IDNA の適用 [34] [[IDNA]] は、明示的に除外されている場合を除き、 [[LDHラベル]]の構文を使った[[ドメイン名スロット]]に適用されます。 [SRC[>>33]] [35] 旧来の[[プロトコル]]の[[ドメイン名スロット]]では、その[[プロトコル]]や実装が更新されていない限り、 [[IDN]] は[[Aラベル]]によって表さなければ[['''なりません''']]。 特に [[DNS]] の[[照会]]や[[応答]]では[[Aラベル]]形を使わなければ[['''なりません''']]。 [SRC[>>33]] * 処理モデル ** IDN 未対応ドメイン名スロットで利用する [23] [[ドメイン名]]が[[IDN未対応ドメイン名スロット]]に入れられる時には、 [[ASCII文字]]のみを含まなければ[['''なりません''']]。そのために、 [[IDN]] と等価な [[ASCII文字]]のみの[[ドメイン名]]を、 - [[各ラベル]]に対して [[ToASCII]] [[演算]]を適用する - [[ラベル分離子]]である[[点]]をすべて [CODE(char)[[[U+002E]]]] [CODE(charname)@en[[[FULL STOP]]]] にする ... 必要があります [SRC[>>17]]。 ** ドメイン名スロットから取り出す [24] [[ドメイン名スロット]]で[[ACEラベル]]が用いられている場合には、次のようにします [SRC[>>17]]。 - 非 [[ACE]] 形を扱えると分かっている時は、明示的に [[ACE]] 形を要求された場合を除き、[[ACEラベル]]を隠す[['''べき''']]です。 - 非 [[ACE]] 形を扱えるかわからないときは、非 [[ACE]] 形のままとしても[['''構いません''']]し、 [[ACE]] 形にしても[['''構いません''']]。 -- 非 [[ACE]] 形のままだと正常に処理されないかもしれません。 -- [[ACE]] 形にすると[[利用者]]には変に見えるかもしれません。 [[IDN]] から [[ACEラベル]]を含まない[[等価]]な[[ドメイン名]]へは、[[各ラベル]]に [[ToUnicode]] [[演算]]を適用することで変換できます。 [SRC[>>17]] >>18 もまた適用される場合においては、 >>18 が優先されます [SRC[>>17]]。 ** 利用者インターフェイスでの扱い [36] [[IDNA2003]] でも [[IDNA2008]] でも、[[IETF]] の原則に倣って[[利用者インターフェイス]]は規定の範囲外としています。 [37] ただ、[[Aラベル]]は人間にはわかりにくいので、 基本的には[[Uラベル]]を使って[[レンダリング]]するべきだとされています。 [38] [[IDNA2003]] とは違って [[IDNA2008]] は[[プロトコル]]内部において[[正規化]]や [[case folding]] を行っておらず、[[アプリケーション]]の範疇とされています。これは[[言語]]による違いが大きく、 [[大文字]]と[[小文字]]の対応付けが使う人によっては不自然になってしまうこと、 [[大文字]]化したものを[[小文字]]化しても元に戻らなかったり[[正規化]]によって変更されたりで [[Uラベル]]と[[Aラベル]]の完全な対応関係が崩れてしまうことを避けるという意図があるようです。 [SRC[>>39]] * 関連 [3] [[ドメイン名スロット]]には、[[IDN対応ドメイン名スロット]]と[[IDN未対応ドメイン名スロット]]があります。