gpt4 book ai didi

xml - This OR That 或 This AND That 的最有效模式

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

我正在尝试编写一个 XML 模式,允许以下列方式表达 XML:

pets 可以同时包含 cat 和 dog 元素:

<root>
<pets>
<cat />
<dog />
</pets>
</root>

宠物可以只包含猫或狗元素

<root>
<pets>
<cat />
</pets>
</root>
-----------
<root>
<pets>
<dog />
</pets>
</root>

如果 pets 没有子元素,那么它应该不存在:

<root>
</root>

我想出的满足这些条件的最佳模式是这样的:

<xs:element name="pets">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="cat"/>
<xs:element name="dog" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="dog"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>

在我看来,对于这样一个简单的概念来说,它的架构太多了。有没有更简单的方法来编写这个模式?谢谢!

最佳答案

我认为这是使用 xs:group 元素的理想情况:如果你将它包裹在你的元素周围并使其成为可选的(同时使元素的内容成为强制性的),你将获得所需的效果。

<xs:group name="pets_group">
<xs:element name="pets" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="cat"/>
<xs:element name="dog" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="dog"/>
<xs:element name="cat" minOccurs="0"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:group>

然后不使用 pets 元素,而是使用 pets_group 组:

<xs:element name="root">
<xs:complexType>
<xs:group ref="pets_group"/>
</xs:complexType>
</xs:element>

在一只猫后面跟着一只可选的狗和一只狗后面跟着一只可选的猫之间进行选择确保宠物标签中有东西。由于没有宠物标签,您可以不指定任何宠物。

或者,您可以一起定义它们,只需“内联”组引用即可。如果 pets 标签只用在一个地方,这可能是您想要做的。

关于xml - This OR That 或 This AND That 的最有效模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2064885/

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