Смешивание xsd:choice с xsd:any или xsd:sequence?

У меня есть следующие два (неизменяемых) файла XML с одним и тем же пространством имен, для которых мне нужно создать XSD:

пример псевдо-xml #1:

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

пример псевдо-xml #2:

<Project>
    <Installations/>
</Project>

Без элементов HistoryEntry и UserFiles я бы использовал xsd:choice для ProjectInformation и Installations. Но как ввести в игру элементы HistoryEntry и UserFiles?!

Есть ли стандартный механизм XSD, который позволяет это сделать?


person Alex    schedule 27.10.2016    source источник


Ответы (1)


Неупорядоченный переоценен. Просто используйте 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>
person kjhughes    schedule 27.10.2016
comment
Спасибо, я не знал, что я могу смешивать последовательность и элемент по выбору. Теперь у меня работает. - person Alex; 27.10.2016