Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML模式中任意顺序、任意数字和“Choice”元素;一元限制;?_Xml_Xsd_Xsd Validation - Fatal编程技术网

XML模式中任意顺序、任意数字和“Choice”元素;一元限制;?

XML模式中任意顺序、任意数字和“Choice”元素;一元限制;?,xml,xsd,xsd-validation,Xml,Xsd,Xsd Validation,我想做的是,声明一个名为“data”的父元素,它有6个子元素,其中一个元素是有条件的,这意味着一个元素只出现一次,另一个元素可以以任何顺序出现任意次数 Example: <data> <Child1>text1</Child1> <Child2>text1</Child2> <Child3>text1</Child3> <Child4>text1</Child4>

我想做的是,声明一个名为“data”的父元素,它有6个子元素,其中一个元素是有条件的,这意味着一个元素只出现一次,另一个元素可以以任何顺序出现任意次数

Example:

<data>
   <Child1>text1</Child1>
   <Child2>text1</Child2>
   <Child3>text1</Child3>
   <Child4>text1</Child4>
   <Child5>text1</Child5>
   <Child6>text1</Child6> <!-- Only one times-->


</data>
示例:
文本1
文本1
文本1
文本1
文本1
文本1
1:所有元素可以以任何顺序和次数出现

2:Child6只出现一次

XSD代码

<xs:element name="data">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="sequence" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:choice minOccurs="0" maxOccurs="unbounded" >
                            <xs:element ref="Child1" />
                            <xs:element ref="Child1" />
                            <xs:element ref="Child3" />
                            <xs:element ref="Child4" />                          
                            <xs:element ref="Child5" />
                            <xs:element ref="Child6" minOccurs="0" maxOccurs="1"/>

                        </xs:choice>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>


请建议我怎么做。?

下面的XSD将根据这些规则进行验证:

  • 允许
    Child1
    以任意顺序对
    Child5
    元素执行所有可选操作,重复任意次数
  • 仅允许一个
    Child6
    元素,如果存在该元素,则必须位于所有其他元素之后


使用XSD 1.0,您可以在两者之间取得一些成就,但您必须决定是否值得编写一个更复杂、可重用性更低的模式,以允许您在放置元素时具有所需的灵活性。

先生,我希望以任意顺序从Child1到Child6,包括发生Child6时。谢谢。您是在设计这个XSD吗?如果是这样,最好将非重复元素放在另一个上下文中(例如包装重复元素,并将非重复元素作为同级元素)。如果确实需要验证与受限元素混合在一起的任何顺序无界元素,那么就不会这么简单了(除非你可以使用XSD 1.1,它支持无限元素的xs:all)。我将用一些替代方法编辑答案。是的,我正在设计这个XSD,你能给我一个简单的例子吗?
<xs:element name="data">
    <xs:complexType>
        <xs:sequence>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="Child1" />
                <xs:element name="Child2" />
                <xs:element name="Child3" />
                <xs:element name="Child4" />                          
                <xs:element name="Child5" />
            </xs:choice>
            <xs:element name="Child6" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"> 

    <xs:element name="data">
        <xs:complexType>
            <xs:all>
                <xs:element name="Child1" minOccurs="0" maxOccurs="unbounded" />
                <xs:element name="Child2" minOccurs="0" maxOccurs="unbounded" />
                <xs:element name="Child3" minOccurs="0" maxOccurs="unbounded" />
                <xs:element name="Child4" minOccurs="0" maxOccurs="unbounded" />                          
                <xs:element name="Child5" minOccurs="0" maxOccurs="unbounded" />
                <xs:element name="Child6" minOccurs="0" maxOccurs="1"/>
            </xs:all>
        </xs:complexType>
    </xs:element>

</xs:schema>