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。
特别是,关于 ASCII 范围之外的字符,出现在协议中或在系统之间传递的 URN 必须仅使用以 UTF-8 编码的 Unicode 字符,并根据 RFC 3986 的要求进一步编码。在可行且与其他地方定义和标准化的名称要求以及第 1.2 节讨论的原则一致的情况下,用于表示名称的字符应限制为 ASCII 字母和数字,或限制为某些广泛使用的模型的字符和语法,例如应用程序中国际化域名 (Internationalizing Domain Names in Applications, IDNA) [RFC5890]、国际化字符串的准备、实施和比较 (Preparation, Enforcement, and Comparison of Internationalized Strings, PRECIS) [RFC7613] 或 Unicode 标识符和模式语法规范 [UAX31]。
为了在协议演变和周围环境发生变化时使 URN 尽可能稳定和持久,URN 命名空间不应允许 ASCII 范围 [RFC20] 之外的字符,除非特定 URN 命名空间的性质使此类字符成为必需。