Xml 在XSD中一次无法获取集合atmost的子元素

Xml 在XSD中一次无法获取集合atmost的子元素,xml,xsd,Xml,Xsd,我有以下模式- <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Type"> <xsd:complexType> <xsd:sequence> <xsd:choice minOccurs="0" maxOccurs="unbounded">

我有以下模式-

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="Type">
<xsd:complexType>
<xsd:sequence>
<xsd:choice  minOccurs="0" maxOccurs="unbounded">
<xsd:element name="First">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="5">
        <xsd:element name="a" type="xsd:decimal" minOccurs="0" maxOccurs="1"/>
        <xsd:element name="b" type="xsd:int" minOccurs="0" maxOccurs="1"/>
        <xsd:element name="c" type="xsd:int" minOccurs="0" maxOccurs="1"/>
        <xsd:element name="d" type="xsd:int" minOccurs="0" maxOccurs="1"/>
        <xsd:element name="e" type="xsd:int" minOccurs="0" maxOccurs="1"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>

<xsd:element name="Second" type="xsd:base64Binary"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>


我想要生成的模式是,XML可以包含第一个和第二个元素任意次数和顺序,但第一个元素的子元素最多只能出现一次。i、 e、a、b、c、d、e最多只能出现一次。我无法实现子元素最多出现一次的第二部分。知道为什么吗?

使用允许元素以任何顺序出现的
xsd:all
而不是
xsd:choice
。通过引用,每个子元素下面的面可以出现一次,也可以根本不出现

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <xsd:element name="Type">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:choice  minOccurs="0" maxOccurs="unbounded">
                    <xsd:element name="First">
                        <xsd:complexType>
                            <xsd:all maxOccurs="1">
                                <xsd:element name="a" type="xsd:decimal" minOccurs="0" />
                                <xsd:element name="b" type="xsd:int" minOccurs="0"/>
                                <xsd:element name="c" type="xsd:int" minOccurs="0"/>
                                <xsd:element name="d" type="xsd:int" minOccurs="0"/>
                                <xsd:element name="e" type="xsd:int" minOccurs="0"/>
                            </xsd:all>
                        </xsd:complexType>
                    </xsd:element>

                    <xsd:element name="Second" type="xsd:base64Binary"/>
                </xsd:choice>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

根据此架构进行验证,文档如下

<?xml version="1.0" encoding="UTF-8"?>
<Type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="Untitled7.xsd">
    <First>
        <b>10</b>
        <a>10.0</a>
        <c>3</c>
        <d>4</d>
        <e>5</e>
    </First>
    <Second></Second>
</Type>

10
10
3.
4.
5.
是有效的,但以下内容无效:

<?xml version="1.0" encoding="UTF-8"?>
<Type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="Untitled7.xsd">
    <First>
        <b>10</b>
        <a>10.0</a>
        <c>3</c>
        <d>4</d>
        <e>5</e>
        <a>10.0</a>
    </First>
    <Second></Second>
</Type>

10
10
3.
4.
5.
10

因为
a
在同一
First
元素中出现两次。

@raghav请不要在注释中发布代码-它不可读。我不理解你的评论。你想告诉我什么?试着使用我建议的模式,我会试试的。谢谢我想补充一点,我能够用我的原始模式生成您发布的“无效”XML。引用方面不与子元素一起工作吗?Muller//每个子元素下面的引用方面可以出现一次,也可以根本不出现//这是必需的。因此我写了“最多一次”。为什么不使用子元素?您的模式不符合我的要求。我希望子元素最多出现一次。而您的模式强制子元素只出现一次。@raghav是的,您是对的,我已经编辑了我的答案-现在,
minOccurs
应该分别应用于每个子元素。