2.2. ネームスペース固有文字列 (Namespace Specific String - NSS)
NSS は、URN ネームスペース内で一意であり、一貫した方法で割り当ておよび管理され、関連する URN ネームスペースの定義に準拠する文字列です。NID("urn" スキーム全体で一意)と NSS(URN ネームスペース内で一意)の組み合わせにより、結果として得られる URN がグローバルに一意であることが保証されます。
この文書で指定されている NSS は、以前の仕様では許可されていないいくつかの文字を許可します(附属書 B を参照)。特に、現在許可されている "/" 文字により、非 URN 識別子システムからの階層的な名前をカプセル化することが事実上可能になります。たとえば、名前が "/" 文字で区切られた数字のシーケンスの形式をとる階層的識別子システムの仮想的な例("1/406/47452/2" など)を考えてみましょう。そのような名前の権限が URN を使用する場合、既存の名前を NSS に配置することが自然であり、"urn:example:1/406/47452/2" のような URN になります。
NSS の構文に対するこれらの変更は、[RFC2141] に従って定義された URN ネームスペースのエンコーディング規則を変更しません。URN コンテキストの外(つまり、非 URN 識別子システム内)で名前が使用される URN ネームスペースで、その識別子システム内のネイティブ形式で "/"、"~"、または "&" の使用も許可されている場合、その URN ネームスペースのエンコーディング規則はこの仕様によって変更されません。
非 URN 識別子システムとそれに関連する URN ネームスペースを管理する規則に応じて、その識別子システムで有効な名前には、上記で参照されている "pchar" 生成規則で許可されていない文字(たとえば、ASCII 範囲外の文字、または RFC 3986 の制限と一致する文字 "/"、"?"、"#"、"["、および "]")が含まれる場合があります。そのような名前は非 URN 識別子システム内では有効かもしれませんが、その特定の URN ネームスペースの規則に準拠する NSS に変換されるまでは、有効な URN ではありません。非 URN 識別子システムに個別に存在する名前から形成される URN の場合、名前を「ネイティブ」形式から URN 形式に変換することは、URN 一般に対して定義された正規化およびエンコーディング方法、またはその URN ネームスペースの特定の規則を使用することによって達成されます。ネームスペース固有の正規化およびエンコーディング規則を認識していないソフトウェアは、非 URN 識別子システムの名前から URN を構築してはなりません (MUST NOT)。
特に、ASCII 範囲外の文字に関して、プロトコルに現れる、またはシステム間で渡される URN は、UTF-8 でエンコードされた Unicode 文字のみを使用し、RFC 3986 で要求されるようにさらにエンコードする必要があります (MUST)。実行可能で、他の場所で定義および標準化された名前の要件、ならびにセクション 1.2 で議論された原則と一致する範囲で、名前を表すために使用される文字は、ASCII 文字と数字、または アプリケーションでのドメイン名の国際化 (Internationalizing Domain Names in Applications, IDNA) [RFC5890]、国際化文字列の準備、実施、比較 (Preparation, Enforcement, and Comparison of Internationalized Strings, PRECIS) [RFC7613]、または Unicode 識別子およびパターン構文仕様 [UAX31] などの広く使用されているモデルの文字と構文のいずれかに制限されるべきです (SHOULD)。
プロトコルが進化し、それらを取り巻く環境が変化するときに URN を可能な限り安定で永続的にするために、特定の URN ネームスペースの性質がそのような文字を必要とする場合を除き、URN ネームスペースは ASCII 範囲 [RFC20] 外の文字を許可すべきではありません (SHOULD NOT)。