xslt - 具有不同属性的 xml dtd 或 xml 模式链接元素
问题描述
我需要创建 DTD 或 XMLSchema。如何将元素 collection@key="role" 与 collection@key="tie" 联系起来?这是可能的还是需要在不同的元素中完成?
我有 XML
<!DOCTYPE schema [
<!ELEMENT schema (collection+, part+)>
<!ELEMENT collection[key=role] (name, partref+)>
<!ATTLIST collection[key=role] collection-id ID #REQUIRED
key CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT partref EMPTY>
<!ATTLIST partref refid IDREF #REQUIRED>
<!ELEMENT collection[key=tie] (name)>
<!ATTLIST collection[key=tie] part-id ID #REQUIRED>
]>
<schema>
<collection collection-id="C28392-33-TT" key="role">
<name>Turnip Twaddler</name>
<partref refid="P81952-26-PK"/>
<partref refid="P86679-52-SP"/>
<partref refid="P81472-68-FD"/>
<partref refid="P88107-39-GT"/>
</collection>
<collection collection-id="C28772-63-OB" key="role">
<name>Olive Bruiser</name>
<partref refid="P80228-21-PT"/>
<partref refid="P82387-85-PA"/>
</collection>
<part part-id="P80228-21-PT">
<name>Pitter</name>
</part>
<collection part-id="P86994-25-RC" key="tie">
<name>Ribbon Curler</name>
</collection>
</schema>
解决方案
在 DTD 中,您可以将一个属性定义为 ID,将另一个属性定义为 IDREF;ID 值在文档中必须是唯一的,并且 IDREF 值必须“指向”文档中存在的 ID。
但是对于同一个元素名称,您不能有两个不同的内容模型,因此属性的类型不能取决于它出现的位置。
在 XSD 中,您可以通过定义本地元素声明来为同一个元素名称提供两种不同的内容模型;但是如果它们显示为兄弟姐妹(相同父元素的子元素),则不能这样做。
推荐阅读
- javascript - 如何用 axios 上传图片文件?
- android - android audiomanager setRingerMode RINGER_MODE_SILENT 不起作用
- .net - 使用订阅在本地测试 Azure 服务总线队列
- python - 如何将终端的输入数据保存到 CSV 文件中?
- javascript - Javascript:如何在函数内不延迟地执行函数?
- reactjs - 将数据写入firebase firestore中的嵌套对象
- reactjs - 在 React 中将 set-cookie 值保存到浏览器 cookie
- kubernetes - 为什么busybox容器处于完成状态而不是运行状态
- python - 如何等待选项加载 - Selenium
- excel - 无休止的处理并卡住替换并离开