3. 命名空间注册模板
命名空间 ID: UUID
注册信息:
- 注册日期: 2003-10-01
命名空间的声明注册者:
- JTC 1/SC6 (ASN.1 Rapporteur Group)
语法结构声明:
UUID 是一种标识符 (identifier), 在所有 UUID 的空间中同时具有空间和时间上的唯一性. 由于 UUID 大小固定且包含时间字段, 因此其值可能发生回绕 (大约在 A.D. 3400, 具体取决于所使用的算法). UUID 可用于多种目的, 从标记生命周期极短的对象, 到在网络中可靠地标识非常持久的对象.
UUID 的内部表示是在内存中的特定位序列, 如 Section 4 所述. 为了准确地将 UUID 表示为 URN, 必须将该位序列转换为字符串表示.
每个字段都按整数处理, 并以前导零填充的十六进制数字字符串输出, 最高有效数字在前. 十六进制值 "a" 到 "f" 输出为小写字符, 输入时不区分大小写.
UUID 字符串表示的形式化定义由以下 ABNF [7] 给出:
UUID = time-low "-" time-mid "-"
time-high-and-version "-"
clock-seq-and-reserved
clock-seq-low "-" node
time-low = 4hexOctet
time-mid = 2hexOctet
time-high-and-version = 2hexOctet
clock-seq-and-reserved = hexOctet
clock-seq-low = hexOctet
node = 6hexOctet
hexOctet = hexDigit hexDigit
hexDigit =
"0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" /
"a" / "b" / "c" / "d" / "e" / "f" /
"A" / "B" / "C" / "D" / "E" / "F"
以下是 UUID 作为 URN 的字符串表示示例:
urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
相关辅助文档:
- [1][2]
标识符唯一性考虑:
本文档规定了三种生成 UUID 的算法: 第一种利用 802 MAC 地址的唯一值来保证唯一性, 第二种使用伪随机数生成器, 第三种使用密码学哈希和应用程序提供的文本字符串. 因此, 按照这里的机制生成的 UUID 将不同于已经分配或将要分配的所有其他 UUID.
标识符持久性考虑:
从全局意义上讲, UUID 本质上很难解析. 再加上 UUID 在其空间上下文内具有时间唯一性这一事实, 可以确保 UUID 尽可能保持持久.
标识符分配过程:
生成 UUID 不需要联系注册机构. 其中一种算法要求每个生成器在空间上具有唯一值. 该值通常是 IEEE 802 MAC 地址, 通常已经可用于连接到网络的主机. 该地址可以从 IEEE 注册机构获取的地址块中分配. 如果没有这样的地址可用, 或者隐私顾虑使其不适合使用, Section 4.5 规定了两种替代方案. 另一种方法是使用下面定义的版本 3 或版本 4 UUID.
标识符解析过程:
由于 UUID 不能全局解析, 因此此项不适用.
词法等价规则:
将 UUID 的每个字段视为无符号整数, 如 Section 4.1.2 中的表所示. 然后, 要比较一对 UUID, 按重要性顺序并根据其数据类型, 对每个 UUID 中对应的字段进行算术比较. 当且仅当所有对应字段都相等时, 两个 UUID 才相等.
作为实现说明, 在许多系统上可以先执行适当的字节序规范化, 然后将两个 UUID 视为 128-bit 无符号整数来执行相等性比较.
本文档定义的 UUID 也可以按字典序排序. 对于一对 UUID, 如果二者不同的最高有效字段在第一个 UUID 中更大, 则第一个 UUID 位于第二个之后. 如果二者不同的最高有效字段在第二个 UUID 中更大, 则第二个 UUID 位于第一个之前.
与 URN 语法的一致性:
UUID 的字符串表示与 URN 语法完全兼容. 将 UUID 从面向位的内存表示转换为 URN 时, 必须注意严格遵守字符串表示部分提到的字节序问题.
验证机制:
除了确定 UUID 的时间戳部分是否位于未来且因此尚不可分配之外, 没有机制可以确定 UUID 是否为 "valid".
作用域:
UUID 具有全局作用域.