具有不同属性的 xml dtd 或 xml 模式链接元素

Posted

技术标签:

【中文标题】具有不同属性的 xml dtd 或 xml 模式链接元素【英文标题】:xml dtd or xml schema link elements with different attribute 【发布时间】:2020-01-31 07:19:59 【问题描述】:

我需要创建 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 中的 [...] 表示法,我不知道你想施加什么约束。投反对票。 抱歉造成混淆 ATTLIST 集合 [key = tie] part-id ID #REQUIRED 这是一个不正确的代码,我想向他们展示 属性等于 属性的值。所以他们是有联系的,但是我不知道如何在DTD中体现出来 【参考方案1】:

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

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

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

【讨论】:

以上是关于具有不同属性的 xml dtd 或 xml 模式链接元素的主要内容,如果未能解决你的问题,请参考以下文章

未检测到文档的语法约束(DTD 或 XML 模式)

DTD 或 XML 模式。哪一个更好? [关闭]

未检测到文档的语法约束(DTD 或 XML 模式) (Android)

xsd 后缀文件用啥软件打开

XML--- XML文档类型定义(DTD)

DTD 是不是仍用于符合 xml?