gpt4 book ai didi

xml - 如何在 XML Schema 中获取元素顺序约束?

转载 作者:数据小太阳 更新时间:2023-10-29 02:07:30 26 4
gpt4 key购买 nike

下面有一个 XML 模式(xsd 文件)片段,其中我想要 NAMEADRESS元素以任何顺序出现,但总是在 FILM 之前顺序。

所以我一直在尝试这样做:

  <xs:element name="ROOM">
<xs:complexType>
<xs:all>
<xs:element ref="NAME"/>
<xs:element ref="ADRESS"/>
</xs:all>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="FILM"/>
</xs:sequence>
<xs:attribute name="group" type="xs:NCName"/>
<xs:attribute name="typ" use="required" type="xs:NCName"/>
</xs:complexType>
</xs:element>

我知道 <xs:all>标签不能与其他元素处于同一子级别的元素的一部分......但找不到出路......

有什么建议吗?提前致谢!

最佳答案

这是 XSD Schema 的限制。我将引用自:http://www.w3.org/TR/2001/REC-xmlschema-0-20010502/然后评论:


存在第三种限制组中元素的选项:组中的所有元素可以出现一次或根本不出现,并且它们可以以任何顺序出现。 all 组(提供 SGML &-Connector 的简化版本)仅限于任何内容模型的顶层。此外,组的子元素必须都是单独的元素(没有组),并且内容模型中的任何元素都不能出现超过一次,即 minOccurs 和 maxOccurs 的允许值为 0 和 1。例如,允许子元素purchaseOrder 出现在任何订单中,我们可以将 PurchaseOrderType 重新定义为:“全部”组

<xsd:complexType name="PurchaseOrderType">
<xsd:all>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element ref="comment" minOccurs="0"/>
<xsd:element name="items" type="Items"/>
</xsd:all>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>

根据这个定义,comment 元素可以选择性地出现在 purchaseOrder 中,它可以出现在任何 shipTo、billTo 和 items 元素之前或之后,但它只能出现一次。此外,all 组的规定不允许我们在组外声明诸如评论之类的元素,以使其能够多次出现。 XML Schema 规定 all 组必须作为内容模型顶部的唯一子项出现。换句话说,以下是非法的:带有“全部”组的非法示例

<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:all>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element name="items" type="Items"/>
</xsd:all>
<xsd:sequence>
<xsd:element ref="comment" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>

我当时对讨论的记忆是,如果 xsd:all 的限制比这少,那么它会太复杂而无法建模。它很快扩展到非确定性解析模型。所以限制是 0 或 1,并且没有 sibling 。

SGML 有一个使用 & 连接器的更强大的模型,但并非所有系统都实现了它。

编辑 如果您希望在此级别验证您的 XML,您可以使用 Schematron 作为模式之后的第二个验证器。它基于XSLT,这种类型的约束更容易表达。

关于xml - 如何在 XML Schema 中获取元素顺序约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1650541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com