1. 引言
统一资源名称 (Uniform Resource Name, URN) 是一种统一资源标识符 (Uniform Resource Identifier, URI) [RFC3986], 它在 "urn" URI scheme 和特定 URN namespace 下分配, 其意图是让该 URN 成为持久且与位置无关的资源标识符. URN namespace 是此类 URN 的集合, 其中每个 URN 都 (1) 唯一, (2) 以一致且受管理的方式分配, 并且 (3) 按照共同定义分配. (某些 URN namespace 创建只作为 URN 存在的名称, 另一些则基于非 URN identifier system 中已创建的名称分配 URN, 例如 ISBN [RFC3187], ISSN [RFC3044] 或 RFC [RFC2648].)
URN 的分配由某个组织完成 (在某些情况下, 也可以按照算法或其他自动化过程完成), 该组织已在 "urn" scheme 内被正式委派一个 URN namespace (例如, "example" URN namespace [RFC6963] 中的某个 URN 可以采用 "urn:example:foo" 这种形式).
本文档基于两个关键假设:
-
URN 的分配是一个受管理的过程.
-
URN namespace 的空间本身也是受管理的.
其他 URI scheme 可能允许自由选择和分配资源标识符, 但 URN 并非如此. 一个以 "urn:" 开头的名称仅在语法上正确, 并不足以使其成为 URN. 要使该名称成为有效 URN, namespace identifier (NID) 需要按照本文定义的规则注册, 并且 URN 中 assigned-name 部分的其余部分需要按照已注册 URN namespace 的规则生成.
为使 URN syntax 和 URN namespace 的相关信息集中在一处, 本文档执行以下工作:
-
定义一般 URN 的 canonical syntax (以与 URI syntax 一致的方式), 规定确定 URN-equivalence 的方法, 并讨论 URI conformance.
-
规定定义 URN namespace 并将其与特定 NID 关联的方法, 并描述向 Internet Assigned Numbers Authority (IANA) 注册 URN NID 的过程.
对于 URN syntax 和 URN namespace, 本文档对原始的 URN syntax 规范 [RFC2141] 以及 URN namespace 定义和注册规范 [RFC3406] 进行了现代化更新并取代它们. 这些修改基于 URN 原始功能描述 [RFC1737] 中给出的关键要求, 也基于多年经验得到的经验教训. 在这些原始文档以及本文档中, 目标都是以一致方式定义 URN, 从而在可行时使 URN 的解析, 处理和解析服务 (resolution) 能够独立于分配该 URN 的 URN namespace.
结合若干关键用户社区的输入, URN 的历史和实践经验要求扩展 URN 定义以支持新功能, 包括使用 RFC 2141 中明确保留给未来标准化的语法. 所有在早期规范下有效的 URN namespace 和 URN 仍然有效, 尽管更新某些 URN namespace 的定义以利用新特性可能会有帮助.
上述考虑, 加上 URN 与作为 locator 的 URI (特别是 URL) 之间的各种差异, 以及 RFC 3986 作为 [RFC1738] 和 [RFC1808] 的最终继承者而更侧重 URL, 可能导致对 RFC 3986 和本规范的一些解释看起来 (或实际上) 并不完全一致, 尤其是在基本语法本身以外的动作或语义方面. 如果出现这种情况, 对 URN 和 URN namespace 的讨论应按照本文档解释, 而不应从 RFC 3986 推演.
相对于 RFC 2141 和 RFC 3406 的变更摘要分别见附录 B 和附录 C. 本文档废止 [RFC2141] 和 [RFC3406]. 虽然本文档没有显式更新或取代 [RFC1737] 或 [RFC2276], 但引用那些文档的读者应注意, 本文档中的 URN 概念模型与那些较早规范略有不同.