XML 中的交叉引用验证:ID/IDREF 与 IDREFS 的高级模式
超越简单的 ID/IDREF 配对,学习如何在复杂文档中利用 IDREFS 实现多对多关系验证,以及跨多个文档的引用约束。 · 难度:入门 · +10XP
XML 中的交叉引用验证:ID/IDREF 与 IDREFS 的高级模式
ID 属性要求全局唯一,但 IDREF/IDREFS 只能检查存在性,无法保证引用语义的正确性(如类型匹配)。本教程首先展示基本的一对一关联,然后引入 IDREFS 属性实现列表引用(例如一个分类包含多个项目ID)。接着通过 DTD 约束模拟外键行为,并讨论多个文档间无法直接验证的局限,最后给出利用 Schematron 或自定义脚本增强交叉引用校验的思路。
<!DOCTYPE catalog [
<!ELEMENT catalog (category*, item*)>
<!ELEMENT category (name, items)>
<!ATTLIST category id ID #REQUIRED>
<!ELEMENT items (#PCDATA)> <!-- IDREFS -->
<!ELEMENT item (title)>
<!ATTLIST item id ID #REQUIRED>
]>
<catalog>
<category id='c1'>
<name>Tools</name>
<items>it1 it2</items>
</category>
<item id='it1'><title>Hammer</title></item>
</catalog>