3.1. 过程
出于缓存等各种目的, 通常需要判断两个 URN 是否 "the same". 最一般的做法 (即独立于 scheme) 是测试等价性 (见 [RFC3986] 第 6.1 节).
通用 URI 规范 [RFC3986] 对相等性比较非常灵活, 重点在于允许 false negative 并避免 false positive. 如果以 scheme-independent 的方式进行比较, 即只作为 URI 比较, 那么许多本规范认为相等的 URN 会被拒绝. 下文讨论适用于已知涉及的 URI 是 URN 的情况, 因而使用术语 "URN-equivalent" 和 "URN-equivalence" 指代本文档规定的等价性.
如果两个 URN 的 assigned-name 部分在对以下构造应用 case normalization (如 [RFC3986] 第 6.2.2.1 节所规定) 后逐 octet 相等, 则这两个 URN 是 URN-equivalent:
-
URI scheme "urn", 通过转换为小写实现
-
NID, 通过转换为小写实现
-
NSS 中任何 percent-encoded 字符 (即匹配基础 URI 规范 [RFC3986] 第 2.1 节中
<pct-encoding>产生式的所有字符三元组), 通过将数字 A-F 转换为大写实现.
Percent-encoded 字符 MUST NOT 被解码, 即 percent-encoding normalization (如 [RFC3986] 第 6.2.2.2 节所规定) MUST NOT 作为比较过程的一部分应用.
如果 URN 中包含 r-component, q-component 或 f-component (或它们的任意组合), 在确定 URN-equivalence 时 MUST 忽略它们.
URN namespace 定义 MAY 包含关于 URN-equivalence 的额外规则, 例如 NSS (或其中一部分) 大小写不敏感. 此类规则 MUST 始终只起到消除上述过程产生的部分 false negative 的作用, 并且如果此处过程认为两个 URN 是 URN-equivalent, 这些规则 MUST NOT 导致将它们视为不 "the same".