首页 > 解决方案 > 具有不同属性的 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>

标签: xsltdtdxml-schema-collection

解决方案


在 DTD 中,您可以将一个属性定义为 ID,将另一个属性定义为 IDREF;ID 值在文档中必须是唯一的,并且 IDREF 值必须“指向”文档中存在的 ID。

但是对于同一个元素名称,您不能有两个不同的内容模型,因此属性的类型不能取决于它出现的位置。

在 XSD 中,您可以通过定义本地元素声明来为同一个元素名称提供两种不同的内容模型;但是如果它们显示为兄弟姐妹(相同父元素的子元素),则不能这样做。


推荐阅读