为什么 xs:choice 在结果 xml 中允许多个不同的 xs:element?

Why does xs:choice allow multiple different xs:element in the resulting xml?

我知道 this related question 并且我知道我的问题与答案相矛盾,但是下面的 XML 文件完全符合下面的 XMLSchema

我的XML数据:

<?xml version="1.0" encoding="utf-8"?>
<myElements>
    <el1>bla</el1>
    <el1>bla</el1>
    <el1>blabla</el1>
    <el2>bgt</el2>
    <el2>pel</el2>
    <el3>sdf</el3>
</myElements>

我的XML架构:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="myElements">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="el1" />
                <xs:element name="el2" />
                <xs:element name="el3" />
                <xs:element name="el4" />
            </xs:choice>
        </xs:complexType>
    </xs:element>
</xs:schema>

W3schools 和其他来源说:

XML Schema choice element allows only one of the elements contained in the declaration to be present within the containing element.

在我看来,这意味着我的 XML 数据应该只接受其中之一:

但是如果你 try to validate 我的 xml 数据到我的 xml 模式,它是有效的,我不明白为什么。

我是否完全误解了文档?

我用的验证器是不是松散不规范?如果是,什么是好的验证器,为什么有人会在我描述的情况下使用选择? (是的,我确实遇到过这个)

Why does xs:choice allow multiple different xs:element in the resulting xml?

因为您将 maxOccurs="unbounded" 添加到 xs:choice

您对 xs:choice/@maxOccurs="unbounded" 含义的理解需要调整。

并不意味着您首先做出选择,然后根据 [=10 上的出现限制重复选择的元素=].

确实意味着您可以在xs:choice的出现限制允许的范围内进行多次选择.选择是独立的,因此当 xs:choice/@maxOccurs 大于 1 时,xs:choice 的 child 个元素可能会交错。

如果你想表达可以做出单一选择并且选择的元素可以连续重复的约束,那么将maxOccurs="unbounded"放在xs:choice的children上而不是比 xs:choice 本身。