gpt4 book ai didi

xml - XSD - 如何描述第一个元素必须首先出现在序列中的无序元素类型集?

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

这是一个 XML 模式问题。

我知道 xsd:all 元素不能出现在序列中(必须是其类型的顶级元素)。

也就是说,我不能使用以下内容:

<xsd:complexType name="Application">
<xsd:sequence>
<xsd:element ref="Name"></xsd:element>
<xsd:all>
<xsd:element ref="ADD"></xsd:element>
<xsd:element ref="DELETE"></xsd:element>
</xsd:all>
</xsd:sequence>
</xsd:complexType>

我的问题是如何以任何顺序(无序集)声明上面的“ADD”和“DELETE”元素,但仍然确保元素“Name”是第一个并始终出现。 (想想我不仅有“ADD”和“DELETE”,还有大约 10 个或更多无序元素集的情况:ADD、DELETE、EDIT 等...)

重要提示:ADD 和 DELETE 可能只出现一次,但它们的顺序无关紧要:

<Application>
<NAME>
<DELETE>
<ADD>
</Application>

但不是:

<Application>
<NAME>
<DELETE>
<ADD>
<DELETE> <!--cannot appear twice-->
</Application>

最佳答案

如果我理解您的要求,那么您就没有错,您唯一缺少的是您选择的 maxOccurs="unbounded"。

我创建了以下架构:

<?xml version="1.0"?>
<xs:schema targetNamespace="http://someNamespace" xmlns="http://someNamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root" type="Application">
</xs:element>

<xs:complexType name="Application">
<xs:sequence>
<xs:element ref="Name"></xs:element>
<xs:choice maxOccurs="unbounded">
<xs:element ref="ADD"></xs:element>
<xs:element ref="DELETE"></xs:element>
</xs:choice>
</xs:sequence>
</xs:complexType>

<xs:element name="Name"/>
<xs:element name="ADD"/>
<xs:element name="DELETE"/>
</xs:schema>

而且效果很好

<ns0:Root xmlns:ns0="http://someNamespace">
<ns0:Name />
<ns0:ADD />
<ns0:ADD />
<ns0:DELETE />
<ns0:ADD />
<ns0:DELETE />
<ns0:DELETE />
</ns0:Root>

但不是为了

<ns0:Root xmlns:ns0="http://someNamespace">
<ns0:ADD />
<ns0:ADD />
<ns0:DELETE />
<ns0:ADD />
<ns0:DELETE />
<ns0:DELETE />
</ns0:Root>

关于xml - XSD - 如何描述第一个元素必须首先出现在序列中的无序元素类型集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/415955/

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