Skip to main content

1. 引言 (Introduction)

统一资源名称 (Uniform Resource Name, URN) 是一种统一资源标识符 (Uniform Resource Identifier, URI) [RFC3986],它被分配在 "urn" URI 方案和特定的 URN 命名空间下,旨在成为持久的、位置无关的资源标识符。URN 命名空间是这类 URN 的集合,其中每个 URN 都是:(1) 唯一的,(2) 以一致和管理的方式分配的,(3) 根据共同定义分配的。(一些 URN 命名空间创建仅作为 URN 存在的名称,而另一些则基于已在非 URN 标识符系统中创建的名称分配 URN,例如 ISBN [RFC3187]、ISSN [RFC3044] 或 RFC [RFC2648]。)

URN 的分配由一个组织完成(或在某些情况下,根据算法或其他自动化过程),该组织已被正式委托在 "urn" 方案内管理 URN 命名空间(例如,"example" URN 命名空间 [RFC6963] 中的 URN 可能采用 "urn:example:foo" 的形式)。

本文档基于两个关键假设:

  1. URN 的分配是一个管理过程。

  2. URN 命名空间的空间本身也是被管理的。

虽然其他 URI 方案可能允许自由选择和分配资源标识符,但 URN 并非如此。以 "urn:" 开头的名称在语法上的正确性不足以使其成为 URN。为了使名称成为有效的 URN,命名空间标识符 (Namespace Identifier, NID) 需要按照此处定义的规则进行注册,并且 URN 的已分配名称部分的其余部分需要按照已注册 URN 命名空间的规则生成。

为了在一个地方提供关于 URN 语法和 URN 命名空间的信息,本文档执行以下操作:

  1. 定义 URN 的规范语法(以与 URI 语法一致的方式),指定确定 URN 等价性的方法,并讨论 URI 一致性。

  2. 指定定义 URN 命名空间并将其与特定 NID 关联的方法,并描述向互联网号码分配机构 (Internet Assigned Numbers Authority, IANA) 注册 URN NID 的程序。

对于 URN 语法和 URN 命名空间,本文档现代化并取代了 URN 语法 [RFC2141] 和 URN 命名空间定义与注册 [RFC3406] 的原始规范。这些修改建立在 URN 原始功能描述 [RFC1737] 中提供的关键要求以及多年经验教训的基础上。在那些原始文档和本文档中,目的是以一致的方式定义 URN,以便在实际可行的情况下,URN 的解析、处理和解析可以独立于分配给定 URN 的 URN 命名空间。

根据几个关键用户社区的输入,URN 的历史和经验要求扩展 URN 定义以支持新功能,包括使用 RFC 2141 中明确保留用于未来标准化的语法。在早期规范下有效的所有 URN 命名空间和 URN 仍然有效,尽管更新某些 URN 命名空间的定义以利用新功能可能是有用的。

前述考虑因素,连同 URN 和作为定位器的 URI(特别是 URL)之间的各种差异,以及 RFC 3986 作为 [RFC1738] 和 [RFC1808] 的最终继任者对 URL 的更大关注,可能导致对 RFC 3986 和本规范的某些解释看起来(或可能实际上)不完全一致,特别是在基本语法本身之外的操作或语义方面。如果出现这种情况,应根据本文档解释 URN 和 URN 命名空间的讨论,而不是从 RFC 3986 进行推断。

附录 B 和附录 C 中分别总结了与 RFC 2141 和 RFC 3406 的变更。本文档废弃了 [RFC2141] 和 [RFC3406]。虽然它没有明确更新或替换 [RFC1737] 或 [RFC2276],但参考这些文档的读者应该意识到,本文档中 URN 的概念模型与那些较旧规范略有不同。