xsd验证xml可选子元素

时间:2013-04-09 17:47:28

标签: xml validation xsd

我一直在尝试构建一个XSD文件来验证某些xml

XSD示例

<xs:element name="person" type="persontype"/>
<xs:complexType name="persontype">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

XML示例

<persontype>
  <firstname/>
  <lastname/>
</persontype>

如何构造xsd以要求'firstname'是必需的,并且'lastname'甚至不需要xml有效,并且序列不必按顺序排列,只要层次结构受到尊重?

可以遇到的XML的最终结果,并且我希望根据我的最终xsd认为它有效。

有效方案1

<persontype>
  <firstname/>
</persontype>

有效方案2

<persontype>
  <lastname/>
  <firstname/>
</persontype>

在帮助下感谢您的时间。

1 个答案:

答案 0 :(得分:1)

我已经从XML Schema tutorial on indicators

改编了这个
<xs:element name="person">
  <xs:complexType>
    <xs:all>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
</xs:element>

如果使用all指示符,则元素的顺序可以是任意的,但默认情况下,每个元素必须恰好出现一次。 要使lastname可选,您可以通过提供minOccurs指示符并将其设置为零来更改默认值。

这将允许您选择为每个人指定一个姓氏,包含任何元素顺序。