Последовательность XSD показывает как однозначно! - PullRequest
2 голосов
/ 10 апреля 2010

У меня есть XSD, который был преобразован из схемы RELAX NG с несколькими ошибками, которые я пытаюсь исправить.У меня большая проблема со следующим

  <xs:element name="list">
    <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:sequence>
            <xs:element minOccurs="0" ref="preamble"/>
            <xs:element minOccurs="0" ref="title"/>
          </xs:sequence>
          <xs:sequence>
            <xs:element minOccurs="0" ref="title"/>
            <xs:element minOccurs="0" ref="preamble"/>
          </xs:sequence>
        </xs:choice>
        <xs:group maxOccurs="unbounded" ref="block-selectionListItem"/>
      </xs:sequence>
      <xs:attributeGroup ref="attlist-selectionList"/>
    </xs:complexType>
  </xs:element>

Как вы можете видеть, блок xs: choice позволяет выбирать между двумя блоками xs: sequence.Кажется, имеет смысл, за исключением того, что Visual Studio выдает следующее предупреждение о втором элементе <xs:element minOccurs="0" ref="title/>, который отбрасывает все:

Множественное определение элемента title приводит к тому, что модель содержимого становится неоднозначной.Модель содержимого должна быть сформирована таким образом, чтобы во время проверки последовательности элементов информации об элементе, частица, содержащаяся прямо, косвенно или неявно в ней, чтобы попытаться проверить каждый элемент в последовательности, в свою очередь, может быть однозначно определена без изучения содержимого или атрибутовэтот элемент, и без какой-либо информации об элементах в оставшейся части последовательности.

Поскольку вы можете выбрать только один, я не вижу, как это неоднозначно.Любая помощь будет принята с благодарностью!

Ответ:

Как указывалось в ответе ниже, я не учитывал все возможности.Вот что я должен был сделать:

  <xs:element name="list">
    <xs:complexType>
      <xs:sequence>
        <xs:group minOccurs ="0" maxOccurs="1" ref ="list-titlePreambleChoice"/>
        <xs:group maxOccurs="unbounded" ref="block-basicListItem"/>
      </xs:sequence>
      <xs:attributeGroup ref="attlist-basicList"/>
    </xs:complexType>
  </xs:element>

Это решило все мои проблемы.Спасибо!

1 Ответ

1 голос
/ 10 апреля 2010

Это неоднозначно из-за minOccurs="0". Если средство проверки находит элемент preamble, это первый элемент первого выбора или второй элемент второго выбора, а элемент title отсутствует?

...