与xsd架构和xml文件元素混淆

时间:2013-07-23 14:23:38

标签: xml xsd xsd-validation

我有一个架构xsd文件。在那个xsd文件中,我对“选择”感到困惑。

例如 myschema.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Emp">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="E1" />
        <xs:element ref="E2" />
        <xs:element ref="E3" />
        <xs:element ref="E4" />
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

myxmlfile1.xml - 例如1

编辑:根元素员工已添加。

<?xml version="1.0" encoding="utf-8"?>
<Employee>
  <Emp>
    <E1></E1>
    <E2></E2>
  </Emp>
</Employee>

myxmlfile2.xml - 例如2

编辑:根元素员工已添加。

<?xml version="1.0" encoding="utf-8"?>
<Employee>
  <Emp>
    <E1></E1>
  </Emp>
  <Emp>
    <E2></E2>
  </Emp>
</Employee>

在这2个xml文件中,根据模式,myxmlfile1.xml是正确的,否则myxmlfile2.xml是正确的?

向我解释说明......

编辑:

Here i want to know, 
  • Emp元素可以按任意顺序包含E1和E2子元素(或)??

  • 可以有任何子元素,即E1或E2(不能同时具有)。??

2 个答案:

答案 0 :(得分:2)

考虑xs:选择maxOccurs = unbounded意味着你可以拥有任意数量的元素,每个元素必须是foo或bar或baz(或xs中的任何列表:选择恰好发生在定)。

答案 1 :(得分:1)

首先,第二个示例既不有效也不well-formed xml(XML不能包含多个根元素)。

第一个很好,因为 xs:choice maxOccurs =“unbounded”一起使用。

xs:choice 会强制您选择只提供一个元素,而 maxOccurs =“unbounded”允许您根据需要多次执行此操作。

在这种情况下,订单无关紧要,例如这样的文件也是有效的:

<?xml version="1.0" encoding="utf-8"?>
<Emp>
  <E4></E4>
  <E4></E4>
  <E2></E2>
  <E3></E3>
</Emp>