gpt4 book ai didi

xml - XSD 中至少有一个不重复的 XML 元素

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

我正在尝试创建一个验证场景,我想从列表中选择至少一个非重复元素

某处沿线:

<xs:choice minOccurs="1" maxOccurs="7">
<xs:element name="Sunday"/>
<xs:element name="Monday"/>
<xs:element name="Tuesday"/>
<xs:element name="Wednesday"/>
<xs:element name="Thursday"/>
<xs:element name="Friday"/>
<xs:element name="Saturday"/>
</xs:choice>

但是上述解决方案允许重复元素出现在列表中,这是我不希望的。

有效 XML 示例:

<Monday/>
<Tuesday/>
<Friday/>

无效 XML 示例:

<Monday/>
<Monday/>

这可以通过 XSD 实现,而不必对所有可能的序列进行硬编码吗?如果是怎么办?

最佳答案

XSD 1.0 解决方案

我不相信您的约束可以在 XSD 1.0 中表达“而不必对所有可能的序列进行硬编码”(但请参阅 C. M. Sperberg-McQueen's clever solution,这大大减少了组合)。可以使用 xsd:unique 强制元素的值是唯一的,但是 xsd:unique 使用的 XPath 子集不包括 name(),这可能有助于对元素名称做出唯一性声明。

XSD 1.1 解决方案

您的约束可以使用 xs:assert 在 XSD 1.1 中表达:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:element name="Days">
<xs:complexType>
<xs:choice minOccurs="1" maxOccurs="7">
<xs:element name="Sunday"/>
<xs:element name="Monday"/>
<xs:element name="Tuesday"/>
<xs:element name="Wednesday"/>
<xs:element name="Thursday"/>
<xs:element name="Friday"/>
<xs:element name="Saturday"/>
</xs:choice>
<xs:assert test="count(*[name() = following-sibling::*/name()]) = 0"/>
</xs:complexType>
</xs:element>
</xs:schema>

关于xml - XSD 中至少有一个不重复的 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35063801/

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