ID和IDREF是XML中依赖DTD或XML Schema声明才能生效的内置类型,用于建立元素间唯一引用关系;未声明时仅是普通字符串,ID值须全局唯一且符合XML名称规则,IDREF必须严格匹配文档内已声明的ID值。
在XML中,ID和IDREF是用于建立元素间引用关系的内置类型,它们依赖DTD(文档类型定义)或XML Schema声明才能生效,不是单纯靠命名约定就能起作用的。
XML解析器只在有明确类型声明的前提下,才将ID属性识别为唯一标识符,把IDREF识别为对ID的引用。没有声明时,即使属性名叫id或ref,也仅是普通字符串。
ATTLIST指定:
xsd:ID和xsd:IDREF类型:
ID属性的值不能以数字开头,不能含空格、冒号、句点等特殊字符,只能是合法的XML名称(类似元素名规则)。
id="user123"、id="order_A"
id="123user"、id="my order"、id="user@2025"
ID值必须互不相同,否则验证会失败IDREF本身不定义标识,只是“指针”。它必须严格匹配某个ID属性的值(大小写敏感),且该ID需出现在当前XML文档内(不支持跨文件引用)。
张三 
customerID成功引用了person的id
customerID="p999"但文档中无id="p999",验证时会报错ID/IDREF机制简单,但功能有限,不支持多值引用、反向查询或复杂路径。
IDREF只能引用一个ID;如需多个引用,要用IDREFS(注意末尾S)data-id)配合程序解析,而非强依赖ID/IDREF验证