0

我有一个模式 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(不能同时拥有)。??

4

2 回答 2

2

将 maxOccurs=unbounded 的 xs:choice 视为意味着您可以拥有任意数量的元素,并且每个元素必须是 foo 或 bar 或 baz(或 xs:choice 中的任何列表)。

于 2013-07-23T21:49:27.443 回答
1

首先,第二个示例既不是有效的也不是格式良好的 xml(XML 不能包含多个根元素)。

第一个很好,因为xs:choicemaxOccurs="unbounded"一起使用。

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

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

<?xml version="1.0" encoding="utf-8"?>
<Emp>
  <E4></E4>
  <E4></E4>
  <E2></E2>
  <E3></E3>
</Emp>
于 2013-07-23T16:10:54.667 回答