ID、IDREF、IDREFS 是 XML 中用于定义和引用元素标识符的特殊属性类型,需在 DTD 或 Schema 中声明,分别实现唯一标识、单向引用和多引用功能,解析器仅在启用验证时校验其合法性与链接有效性。

ID、IDREF、IDREFS 是 XML 中用于定义和引用元素标识符的特殊属性类型,由 DTD(文档类型定义)或 XML Schema 声明,核心作用是实现元素间的内部链接——类似 HTML 中的 id 和 href="#xxx",但更严格、需提前声明。
ID:唯一标识一个元素
每个 ID 属性值在整篇文档中必须全局唯一,且只能出现在一个元素上。它不是普通字符串,而是一种数据类型,XML 解析器会校验其合法性(如不能以数字开头、不能含空格等)。
用法示例(在 DTD 中声明):
对应 XML 实例:
张三
zhang@example.com
IDREF:单向引用一个 ID
IDREF 属性的值必须匹配文档中某个已声明的 ID 值,解析器会在加载时验证该引用是否存在。常用于表示“属于”“指向”关系。
DTD 声明示例:
XML 使用示例:
李四
笔记本
这里 order 通过 customer_id “链接”到 customer 元素。
IDREFS:一次性引用多个 ID(空格分隔)
IDREFS 是 IDREF 的复数形式,允许一个属性引用多个 ID,各值之间用空白符(空格、制表符、换行)分隔。所有被引用的 ID 都必须存在。
DTD 声明:
XML 示例:
王五 赵六 钱七 开发组
创建内部链接的关键步骤
- 在 DTD 或 XML Schema 中明确定义哪些属性是
ID、IDREF或IDREFS - 确保所有
ID值符合命名规则(字母或下划线开头,只含字母、数字、连字符、下划线、英文句点) -
IDREF和IDREFS的值必须严格等于某个已存在的ID值(大小写敏感) - 使用支持 DTD/Scheme 验证的解析器(如 Java 的
DocumentBuilder启用验证,Python 的lxml)才能触发链接检查 - 注意:
ID属性不能出现在混合内容或仅含 PCDATA 的元素上(某些处理器有额外限制)
基本上就这些。不复杂但容易忽略声明环节——没在 DTD 里说清楚,XML 就只把它们当普通字符串,链接逻辑不会生效。










