У меня есть 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>
Это решило все мои проблемы.Спасибо!