[1] [DFN[IDNA [RUBYB[写像表]@en[Mapping Table]]]]は、 [[UTS #46]] で規定されている[[算法]]
[[Unicode IDNA互換性処理]]で使われる表です。[[Unicode]] の[[符号位置]]に対して[[状態値]]と[[写像値]]が示されており、
[[算法]]中の「[[写像]]」の[[段階]]や、
[[ラベル]]の[[妥当性]]の定義で用いられています。

* 仕様書

[REFS[
- [2] [CITE@en-us[UTS #46: Unicode IDNA Compatibility Processing]] ([TIME[2010-10-30 01:01:25 +09:00]] 版) <http://www.unicode.org/reports/tr46/#IDNA_Mapping_Table>
- [20] [CITE[Index of /Public/idna]] <http://www.unicode.org/Public/idna/>
-- [11] ([TIME[2016-06-21 07:22:40 +09:00]]) <http://www.unicode.org/Public/idna/latest/IdnaMappingTable.txt>
]REFS]

* 写像表

[25] [[IDNA写像表]]は、 
([[Unicode符号位置]]、[VAR[[[UseSTD3ASCIIRules]]]]) から ([[状態値]]、[[写像値]])
への[[写像]]です。

* 状態値

[3] [[Unicode]] のすべての[[符号位置]]に対して、
[DFN[[RUBYB[状態値]@en[status value]]]]が定義されています [SRC[>>2]]。

[26] [[状態値]]には、次のものがあります。

[FIG(table)[
:v: 値
:d: 説明
:l: 一覧

:v: [4] [DFN[[RUBYB[[[妥当]]]@en[valid]]]] [SRC[>>2]]
:d: [[Unicode IDNA互換性処理]]で変更されずにそのまま出力されます。
:l: [CITE@en[Character set "IDNA Mapping Table valid"]] ([TIME[2016-08-28 14:07:59 +09:00]]) <https://chars.suikawiki.org/set/%24uts46%3Avalid>

:v: [5] [DFN[[RUBYB[[[無視]]]@en[ignored]]]] [SRC[>>2]]
:d: [[Unicode IDNA互換性処理]]で削除されます。
:l: [CITE@en[Character set "IDNA Mapping Table ignored"]] ([TIME[2016-08-28 14:07:11 +09:00]]) <https://chars.suikawiki.org/set/%24uts46%3Aignored>

:v: [6] [DFN[[RUBYB[[[写像]]]@en[mapped]]]] [SRC[>>2]]
:d: [[Unicode IDNA互換性処理]]で他の[[文字列]]に置き換えられます。
:l: [CITE@en[Character set "IDNA Mapping Table mapped"]] ([TIME[2016-08-28 14:07:36 +09:00]]) <https://chars.suikawiki.org/set/%24uts46%3Amapped>

:v: [7] [DFN[[RUBYB[[[偏差]]]@en[derivation]]]] [SRC[>>2]]
:d: [[Unicode IDNA互換性処理]]で[[写像]]のように他の文字列に置き換えられるか、
[[妥当]]のようにそのまま出力されます。
どちらかは[[Unicode IDNA互換性処理]]の[VAR[処理オプション]]が[[移行的処理]]か[[非移行的処理]]かによります。
([[IDNA2003]] と [[IDNA2008]] とで扱いが異なる4[[文字]]がこの値になっています。)
:l: [CITE@en[Character set "IDNA Mapping Table deviation"]] ([TIME[2016-08-28 14:05:12 +09:00]]) <https://chars.suikawiki.org/set/%24uts46%3Adeviation>

:v: [8] [DFN[[RUBYB[[[禁止]]]@en[disallowed]]]] [SRC[>>2]]
:d: [[Unicode IDNA互換性処理]]でそのまま出力されますが、
[[誤り]]とみなされます。
:l:  [CITE@en[Character set "IDNA Mapping Table disallowed"]] ([TIME[2016-08-28 14:05:41 +09:00]]) <https://chars.suikawiki.org/set/%24uts46%3Adisallowed>
]FIG]

[16] 次に該当する[[符号位置]]は、 [VAR[[[UseSTD3ASCIIRules]]]] によって[[状態値]]が変化します。

[FIG(table)[
:v: [[IDNA写像表]]上の値
:t: [VAR[[[UseSTD3ASCIIRules]]]] が[[真]]の場合
:f: [VAR[[[UseSTD3ASCIIRules]]]] が[[偽]]の場合
:l: 一覧

:v: [17] [DFN[[[disallowed_STD3_valid]]]]
:t: [[禁止]] [SRC[>>2]]
:f: [[妥当]]として扱うことができます [SRC[>>2]]
:l: [CITE@en[Character set "IDNA Mapping Table disallowed_STD3_valid"]] ([TIME[2016-08-28 14:06:52 +09:00]]) <https://chars.suikawiki.org/set/%24uts46%3Adisallowed_STD3_valid>

:v: [18] [DFN[[[disallowed_STD3_mapped]]]]
:t: [[禁止]] [SRC[>>2]]
:f: [[写像]]として扱うことができます [SRC[>>2]]
:l: [CITE@en[Character set "IDNA Mapping Table disallowed_STD3_mapped"]] ([TIME[2016-08-28 14:06:08 +09:00]]) <https://chars.suikawiki.org/set/%24uts46%3Adisallowed_STD3_mapped>
]FIG]

[28] [[偽]]の場合は「することができる」という謎の曖昧表現ですが、
実際にはそれぞれ[[妥当]]、[[写像]]として扱うべきと思われます。

;; [27] [[UseSTD3ASCIIRules]] も参照。

* 写像値

[19] [[状態値]]が[[写像]]、[[disallowed_STD3_mapped]]、[[偏差]]の[[符号位置]]には、
[DFN[[RUBYB[[[写像値]]]@en[mapping value]]]]も規定されています。 [SRC[>>2]]

[14] [[写像]]先は、0個[[以上]]の[[符号位置]]の列です。

[REFS[
- [15] [CITE@en[Character mapping "uts46:mapping"]] ([TIME[2016-08-28 14:18:38 +09:00]]) <https://chars.suikawiki.org/map/uts46%3Amapping>
]REFS]

[13] [CODE[U+200C]]、[CODE[U+200D]] では[[写像]]先が[[空文字列]]となるので、
取扱いに注意が必要です。

* 安定性

[9] [[Unicode 5.1]] 以降で[[写像表]]が定義されており、以後、
前の版で[[禁止]]だった[[符号位置]]のみ新しい版で[[状態値]]や[[写像値]]が変更される可能性があります
[SRC[>>2]]。

* ファイル

[21] [[IDNA写像表]]は >>20 で配布されています。

[22] 配布されているファイルの形式は <http://www.unicode.org/reports/tr46/#IDNA_Mapping_Table>
で、導出方法は <http://www.unicode.org/reports/tr46/#Mapping_Table_Derivation> で説明されています。

[10] なお、 [[UTS #46]] にはこの表の導出方法の説明もありますが、その説明ではなく、
この配布されているファイル自体が正式なものとされています。

* 文脈

[12] [[Unicode IDNA互換性処理]]と[[妥当性基準]]で参照されます。

* 歴史

[23] [CITE@en-US[XBL 2.0]]
( ([TIME[2012-05-03 02:23:03 +09:00]] 版))
<http://dev.w3.org/2006/xbl2/Overview.html#ignoring>

[24] [CITE@en-US[XML Binding Language (XBL) 2.0]]
( ([TIME[2007-03-16 22:20:16 +09:00]] 版))
<http://www.w3.org/TR/2007/CR-xbl-20070316/#ignoring>

[29] [CITE@en[Meta: add <dfn>s for list item and map entry, key, and value]]
([[tobie]]著, [TIME[2017-01-13 01:00:50 +09:00]])
<https://github.com/whatwg/infra/commit/5bc75037feddd79c7c73d9cefce08fbf7a3c522b>

[30] [CITE@en[Editorial: use Infra "for each" as IDL "mapping" got removed]]
([[annevk]]著, [TIME[2017-03-06 19:38:32 +09:00]])
<https://github.com/whatwg/url/commit/8386c7a20435b2fb300038e8f1346dc6254ac710>

[31] [CITE@EN[XQuery 3.1: An XML Query Language]]
([TIME[2017-03-20 09:23:33 +09:00]])
<https://www.w3.org/TR/2017/REC-xquery-31-20170321/#id-maps>

[32] [CITE@en[Add structs, tuples, and pairs]]
([[annevk]]著, [TIME[2017-03-23 22:33:50 +09:00]])
<https://github.com/whatwg/infra/commit/139484a9b0fddfc3a6ad48e13cb330ce4c44babe>

[33] [CITE@en[Add cloning for maps]]
([[domenic]]著, [TIME[2019-08-31 01:56:27 +09:00]])
<https://github.com/whatwg/infra/commit/d109ae2aa512c88b78529e5ca4f8911043a00870>

[34] [CITE@en[Add cloning for maps by domenic · Pull Request #265 · whatwg/infra]]
([TIME[2020-01-12 17:11:45 +09:00]])
<https://github.com/whatwg/infra/pull/265>