将xsd:choice与xsd:any或xsd:sequence混合使用?

时间:2016-10-27 17:58:47

标签: xml xsd xsd-validation xml-validation

我有以下两个(不可更改的)带有相同命名空间的XML文件,我需要为其创建一个XSD:

pseudo-xml示例#1:

<Project>
    <ProjectInformation/>
    <HistoryEntry/>
    <UserFiles/>
</Project>

pseudo-xml示例#2:

<Project>
    <Installations/>
</Project>

如果没有HistoryEntryUserFiles元素,我会将xsd:choice用于ProjectInformationInstallations。但是如何将HistoryEntryUserFiles元素带入游戏?!

是否有允许这样的标准XSD机制?

1 个答案:

答案 0 :(得分:0)

无序被高估了。只需使用xs:sequence而不是xs:any来避免XSD 1.0中的唯一粒子归因违规行为:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Project">
    <xs:complexType>
      <xs:choice>
        <xs:sequence>
          <xs:element name="ProjectInformation"/>
          <xs:element name="HistoryEntry"/>
          <xs:element name="UserFiles"/>
        </xs:sequence>
        <xs:element name="Installations"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>