[1] [DFN[[RUBYB[導出特性値]@en[derived property value]]]]は、 [[IDN]] の[[ラベル]]において利用可能な[[文字]]を決定するための[[特性値]]です。
その[[特性値]]の決定方法は [[IDNA2008]] 仕様書群に属する文書の一つ、 [[RFC 5892]]
によって定められています。
[[PRECIS]] ([[RFC 7564]]) でもそのバリエーションを定義しています。

* 仕様書

[REFS[
- [2] '''[CITE@en[RFC 5892 - The Unicode Code Points and Internationalized Domain Names for Applications (IDNA)]] 
<http://tools.ietf.org/html/rfc5892>'''
- [24] [CITE@en[RFC 5894 - Internationalized Domain Names for Applications (IDNA): Background, Explanation, and Rationale]] ([TIME[2011-02-05 07:34:29 +09:00]] 版) <http://tools.ietf.org/html/rfc5894#section-10.1>
- [3] [CITE[IDNA Parameters]] 
<http://www.iana.org/assignments/idnabis-tables/idnabis-tables.xml#idnabis-tables-properties>
- [17] [CITE@en[RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]] ([TIME[2015-12-21 04:49:41 +09:00]] 版) <https://tools.ietf.org/html/rfc7564#section-8>
- [31] [CITE@en[RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]] ([TIME[2015-12-21 04:49:41 +09:00]] 版) <https://tools.ietf.org/html/rfc7564#section-11.1>
- [33] [CITE[PRECIS Derived Property Value]] ([TIME[2015-05-23 06:21:43 +09:00]] 版) <https://www.iana.org/assignments/precis-tables>
]REFS]

* 特性値

[18] [[IDNA2008]] は次の4つの[[特性値]]を使っています。

[FIG(list)[
:[4] [CODE[[[PVALID]]]] ([[プロトコル妥当]]): [[ラベル]]で原則として利用できます
:[5] [CODE[[[CONTEXT]]]] ([[文脈的規則必須]]): [[ラベル]]で場合によっては利用できます
:[6] [CODE[[[DISALLOWED]]]] ([[禁止]]): [[ラベル]]で利用できません
:[7] [CODE[[[UNASSIGNED]]]] ([[未割当]]): [[文字]]が割り当てられていません
]FIG]

[9] すべての[[符号位置]]はこの4種類のいずれかの[[特性値]]を持ちます。[SRC[>>2 1.]]

[19] [[PRECIS]] は [CODE[[[IdentifierClass]]]] と [CODE[[[FreeformClass]]]]
の2つの[[文字列クラス]]を定義しているので、両者で扱いが違う[[符号位置]]について
[DFN[[[SPECIFIC CLASS PROTOCOL VALID]]]]
([DFN[[[FREE_PVAL]]]]、[DFN[[[ID_PVAL]]]]) と
[DFN[[[SPECIFIC CLASS DISALLOWED]]]]
([DFN[[[FREE_DIS]]]]、[DFN[[[ID_DIS]]]])
という値を使っています [SRC[>>17]]。
いずれも、[[文字列クラス]]が決まれば[[妥当]]か[[禁止]]のいずれかに決まります。

;; 実際には [CODE[[[ID_PVAL]]]] と [CODE[[[FREE_DIS]]]] は使っていません。

* 定義

[10] [[符号位置]][VAR[符号]]の
[[IDNA2008]] [[導出特性値]]は、次のようにして決定します [SRC[>>2 3.]]。

[FIG(steps)[
= [26] 次の条件のうち、最初に一致したものを実行します。
[FIG(switch)[
:[11] [VAR[符号]]が [CODE[[[Exceptions]]]] に含まれる: 
[CODE[[[Exceptions]]]] で指定された値を返します。
:[12] それ以外で、 [VAR[符号]]が [CODE[[[BackwardCompatible]]]] に含まれる:
[CODE[[[BackwardCompatible]]]] で指定された値を返します。
:[13] それ以外で、 [VAR[符号]]が [CODE[[[Unassigned]]]] に含まれる:
[CODE[[[UNASSIGNED]]]] を返します。
:[14] それ以外で、 [VAR[符号]]が [CODE[[[LDH]]]] に含まれる:
[CODE[[[PVALID]]]] を返します。
:[15] それ以外で、 [VAR[符号]]が [CODE[[[JoinControl]]]] に含まれる:
[CODE[[[CONTEXTJ]]]] を返します。
:[16] それ以外で、 [VAR[符号]]が [CODE[[[Unstable]]]], [CODE[[[IgnorableProperties]]]], [CODE[[[IgnorableBlocks]]]], [CODE[[[OldHangulJamo]]]] のいずれかに含まれる:
[CODE[[[DISALLOWED]]]] を返します。
:[20] それ以外で、 [VAR[符号]]が [CODE[[[LetterDigits]]]] に含まれる:
[CODE[[[PVALID]]]] を返します。
:[21] それ以外:
[CODE[[[DISALLOWED]]]] を返します。
]FIG]
]FIG]

[27] [[符号位置]][VAR[符号]]の
[[PRECIS]] [[導出特性値]]は、次のようにして決定します [SRC[>>17]]。

[FIG(steps)[
= [28] 次の条件のうち、最初に一致したものを実行します。
[FIG(switch)[
:[VAR[符号]]が [CODE[[[Exceptions]]]] に含まれる: 
[CODE[[[Exceptions]]]] で指定された値を返します。
:それ以外で、 [VAR[符号]]が [CODE[[[BackwardCompatible]]]] に含まれる:
[CODE[[[BackwardCompatible]]]] で指定された値を返します。
:それ以外で、 [VAR[符号]]が [CODE[[[Unassigned]]]] に含まれる:
[CODE[[[UNASSIGNED]]]] を返します。
:それ以外で、 [VAR[符号]]が [CODE[[[ASCII7]]]] に含まれる:
[CODE[[[PVALID]]]] を返します。
:それ以外で、 [VAR[符号]]が [CODE[[[JoinControl]]]] に含まれる:
[CODE[[[CONTEXTJ]]]] を返します。
:それ以外で、 [VAR[符号]]が [CODE[[[OldHangulJamo]]]], [CODE[[[PrecisIgnorableProperties]]]], [CODE[[[Controls]]]] のいずれかに含まれる:
[CODE[[[DISALLOWED]]]] を返します。
:それ以外で、 [VAR[符号]]が [CODE[[[HasCompat]]]] に含まれる:
[CODE[[[ID_DIS]]]] または [CODE[[[FREE_PVAL]]]] を返します。
:それ以外で、 [VAR[符号]]が [CODE[[[LetterDigits]]]] に含まれる:
[CODE[[[PVALID]]]] を返します。
:それ以外で、 [VAR[符号]]が [CODE[[[OtherLetterDigits]]]], [CODE[[[Spaces]]]], [CODE[[[Symbols]]]], [CODE[[[Punctuation]]]]  のいずれかに含まれる:
[CODE[[[ID_DIS]]]] または [CODE[[[FREE_PVAL]]]] を返します。
:それ以外:
[CODE[[[DISALLOWED]]]] を返します。
]FIG]
]FIG]

;; [29] 複数の[[文字カテゴリー]]に属する[[文字]]があるので、評価の順序を変えてはいけません。

[30] この定義で参照される[[文字カテゴリー]]は、 [[IDNA2008]] および
[[PRECIS]] で規定されています。

* 特性値の一覧

[23] [[RFC 5892]] は特性値の決定のための方法を定めているだけとされています [SRC[>>2 1.]]。
[[RFC 5892]] の[[附属書]]には [[Unicode 5.2]] での[[特性値]]の一覧が示されています [SRC[>>2 B.]] が、
[RUBYB[[[参考]]]@en[non-normative]]とされています [SRC[>>2 4.]]。

[22] 特性値の一覧は [[IANA登録簿]] (>>3) も存在しますが、それも[[参考]]です [SRC[>>24]]。
[[RFC 5892]] によればこの一覧は[RUBYB[[[指定専門家]]]@en[designated expert]]によって
[[Unicode]] 5.2 とそれ以降の版について [[IANA]] が登録簿を作るとされています [SRC[>>2 5.1]]。
[[Unicode]] の版が新しくなる度に更新されることになっているようです [SRC[>>24]]。
その作成の過程や[[指定専門家]]の評価において問題があれば [[IESG]] 
に通知する[RUBYB[べき]@en[should]]とされており、[[特性値]]の導出の方法の変更には [[IETF評価]]が必要とされています
[SRC[>>2 5.1]]。

[25] 2011年8月に [[IANA]] 登録簿が [[Unicode]] 6.0.0 対応に更新されています。ぱっとみた感じ
[[UNASSIGNED]] から新規に[[文字]]が割り当てられて [[PVALID]] や [[DISALLOWED]] 
になった変更ばかりのようです。

[32] [[PRECIS]] 版の[[IANA登録簿]]も別途用意されています [SRC[>>31]]。

[44] 各[[特性値]]を持つ[[符号位置]]の一覧が >>41、>>40 にあります。
[[JSON]] 形式のデータファイルが >>42 (説明が >>43) にあります。

[REFS[
- [41] [[IDNA2008]] - [CITE@en[Character sets]] ([TIME[2016-01-03 22:16:51 +09:00]] 版) <https://chars.suikawiki.org/set#sets-idna-tables-latest>
- [40] [[PRECIS]] - [CITE@en[Character sets]] ([TIME[2016-01-03 22:16:35 +09:00]] 版) <https://chars.suikawiki.org/set#sets-precis-tables-latest>
- [42] ([TIME[2016-01-03 22:17:56 +09:00]] 版) <https://raw.githubusercontent.com/manakai/data-chars/master/data/sets.json>
- [43] [CITE@en[data-chars/sets.txt at master · manakai/data-chars]] ([TIME[2016-01-03 22:18:25 +09:00]] 版) <https://github.com/manakai/data-chars/blob/master/doc/sets.txt>
]REFS]

* 安定性

[8] [[導出特性値]]は [[Unicode]] の[[特性]]の値から定まるので、 [[Unicode]]
の改訂により[[特性値]]が変わると、[[導出特性値]]が変わってしまうこともないとはいえません。
その場合には [[BackwardCompatible]] を使って調整するとされています [SRC[>>2 1.]]。

[34] [[IDNA2008]] は [CODE[[[PVALID]]]] や [CODE[[[DISALLOWED]]]]
に一旦決定したら [[Unicode]] の改訂により変更することはないとしていましたが、
[[Unicode 6.0.0]] で変更しています。

;; [CODE[[[PVALID]]]], [CODE[[[DISALLOWED]]]] を参照。

[36] [[PRECIS]] は [[IDNA]] の [[Unicode 7.0]] 対応のための調査で再検討の必要が指摘されたとして、
将来の非互換な改訂を予告しています [SRC[>>35]]。

[37] おそらくそのためなのでしょう、 [[IDNA]] 用の [[IANA登録簿]]は
[[Unicode 6.3.0]] 版を最後に更新されておらず、 [[PRECIS]]
用の [[IANA登録簿]]も [[Unicode 6.3.0]] 版となっています。

;; [[PRECIS]] が出版された2015年には既に [[Unicode 8.0.0]] も出版されています。

[REFS[
- [38] [CITE@en-US[IAB Statement on Identifiers and Unicode 7.0.0 | Internet Architecture Board]] ([TIME[2016-01-03 15:22:23 +09:00]] 版) <https://www.iab.org/documents/correspondence-reports-documents/2015-2/iab-statement-on-identifiers-and-unicode-7-0-0/>
- [39] [CITE@en[draft-klensin-idna-5892upd-unicode70-04 - IDNA Update for Unicode 7.0.0]] ([TIME[2015-12-01 13:10:21 +09:00]] 版) <https://tools.ietf.org/html/draft-klensin-idna-5892upd-unicode70-04>
- [35] [CITE@en[RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]] ([TIME[2015-12-21 04:49:41 +09:00]] 版) <https://tools.ietf.org/html/rfc7564#section-13.4>
]REFS]

* 歴史

[45] [CITE[Microsoft Word - Proposal-derived-idna-property-2.docx - 21227-derived-idna-prop.pdf]], [TIME[2021-11-11T17:13:19.000Z]], [TIME[2021-11-12T01:00:21.327Z]] <https://www.unicode.org/L2/L2021/21227-derived-idna-prop.pdf>
