3. URN-Equivalence
3.1. 手順
キャッシュなどのさまざまな目的のために、2 つの URN が「同じ」かどうかを判定することがしばしば望まれます。これは最も一般的には (すなわちスキームに依存せずに) 等価性をテストすることによって行われます ([RFC3986] の 6.1 節を参照)。
汎用 URI 仕様 [RFC3986] は等価比較について非常に柔軟であり、偽陰性を許容し偽陽性を避けることに重点を置いています。比較がスキームに依存しない方法で、すなわち URI 比較のみとして行われる場合、本仕様が等しいと見なす多くの URN が拒否されることになります。以下の議論は、対象となる URI が URN であることが分かっている場合に適用され、したがって本書で規定される等価性を指すために "URN-equivalent" および "URN-equivalence" という用語を使用します。
2 つの URN は、以下の構成要素に大文字小文字の正規化 ([RFC3986] の 6.2.2.1 節で規定) を適用した後、それらの assigned-name 部分がオクテット単位で等しい場合に URN 等価です。
-
URI スキーム "urn" を小文字に変換する。
-
NID を小文字に変換する。
-
NSS 内の任意のパーセントエンコード文字 (すなわち、基本 URI 仕様 [RFC3986] の 2.1 節にある <pct-encoding> 生成規則に一致するすべての文字三つ組) の数字 A-F を大文字に変換する。
パーセントエンコードされた文字をデコードしてはなりません (MUST NOT)。すなわち、比較プロセスの一部としてパーセントエンコーディングの正規化 ([RFC3986] の 6.2.2.2 節で規定) を適用してはなりません (MUST NOT)。
URN に r-component、q-component、または f-component (あるいはその任意の組み合わせ) が含まれる場合、URN 等価性を判定する目的ではそれを無視しなければなりません (MUST)。
URN 名前空間の定義は、NSS (またはその一部) の大文字小文字の非区別など、URN 等価性に関する追加の規則を含んでもかまいません (MAY)。そのような規則は、常に上記の手順で得られる偽陰性の一部を排除する効果を持たなければならず (MUST)、ここでの手順が URN 等価であるとする 2 つの URN を「同じ」でないものとして扱う結果になってはなりません (MUST NOT)。NID 登録に関する関連する考慮事項については、以下を参照してください。
3.2. 例
この節では、URN 等価性の規則を際立たせるさまざまな URN ([RFC6963] で定義された "example" NID を使用) を示します。
第一に、スキームと NID は大文字小文字を区別しないため、以下の 3 つの URN は互いに URN 等価です。
-
urn:example:a123,z456
-
URN:example:a123,z456
-
urn:EXAMPLE:a123,z456
第二に、r-component、q-component、および f-component は URN 等価性のテストの目的では考慮されないため、以下の 3 つの URN は上記の最初の 3 つの例と URN 等価です。
-
urn:example:a123,z456?+abc
-
urn:example:a123,z456?=xyz
-
urn:example:a123,z456#789
第三に、NSS 内の "/" 文字 (およびそれに続くもの) は URN 等価性の目的で考慮されるため、以下の URN は互いに、また先行する 6 つの URN と URN 等価ではありません。
-
urn:example:a123,z456/foo
-
urn:example:a123,z456/bar
-
urn:example:a123,z456/baz
第四に、パーセントエンコーディングのため、以下の URN は互いにのみ URN 等価であり、上記のいずれとも URN 等価ではありません (注意: %2C は前の例の "," をパーセントエンコードした変換結果ですが、URN 等価性のテストの目的ではそのようなシーケンスはデコードされません)。
-
urn:example:a123%2Cz456
-
URN:EXAMPLE:a123%2cz456
第五に、パーセントエンコードされたシーケンス以外の NSS 内の文字は (当該 URN 名前空間について別途規定されていない限り) 大文字小文字を区別して扱われるため、以下の URN は最初の 3 つの URN と URN 等価ではありません。
-
urn:example:A123,z456
-
urn:example:a123,Z456
第六に、人間向けのインターフェースで提示された URN を何気なく目視した場合、以下の URN は最初の 3 つの URN と同じに見えるかもしれません (U+0430 CYRILLIC SMALL LETTER A は U+0061 LATIN SMALL LETTER A と混同され得るため) が、最初の 3 つの URN とは URN 等価ではありません。
- urn:example:%D0%B0123,z456