Skip to main content

3.1. 过程 (Procedure)

出于缓存等各种目的,通常需要确定两个 URN 是否"相同"。这最一般地(即,独立于方案)通过测试等价性来完成(参见 [RFC3986] 的第 6.1 节)。

通用 URI 规范 [RFC3986] 对等价性比较非常灵活,重点是允许假阴性并避免假阳性。如果以方案无关的方式进行比较,即仅作为 URI 比较,则本规范认为相等的许多 URN 将被拒绝。下面的讨论适用于所涉及的 URI 已知为 URN 的情况,因此使用术语"URN 等价"和"URN 等价性"来指代本文档中指定的等价性。

如果两个 URN 的已分配名称部分在对以下结构应用大小写规范化(如 [RFC3986] 的第 6.2.2.1 节中指定)后逐字节相等,则它们是 URN 等价的:

  1. URI 方案 "urn",通过转换为小写

  2. NID,通过转换为小写

  3. NSS 中的任何百分号编码字符(即,匹配基础 URI 规范 [RFC3986] 第 2.1 节中找到的 <pct-encoding> 产生式的所有字符三元组),通过将数字 A-F 转换为大写。

百分号编码的字符不得解码,即,百分号编码规范化(如 [RFC3986] 的第 6.2.2.2 节中指定)不得作为比较过程的一部分应用。

如果 URN 中包含 r-component、q-component 或 f-component(或其任意组合),则在确定 URN 等价性时必须忽略它。

URN 命名空间定义可以包括 URN 等价性的附加规则,例如 NSS(或其部分)的大小写不敏感性。此类规则必须始终具有消除通过上述过程获得的一些假阴性的效果,并且如果此处的过程说它们是 URN 等价的,则不得导致将两个 URN 视为不"相同"。有关 NID 注册的相关考虑,请参见下文。