Это сводит меня с ума в течение нескольких часов.Я прочитал каждый соответствующий вопрос XSD по SO и остальной части Интернета, кажется, и до сих пор ответ ускользает от меня.
Мне нужна схема XML, которая требует наличия хотя бы одного из списка элементов, но каждыйэлемент может появляться только 0 или 1 раз.
Это похоже на вопрос: Конструкция XML-схемы для "любого одного или нескольких из этих элементов, но должна быть хотя бы один"
но я не смог ограничить верхний предел: я, очевидно, неправильно использую maxOccurs
.
Вот где я остановился на своей схеме:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="Selects">
<xs:sequence minOccurs="2" maxOccurs="4">
<xs:choice>
<xs:element name="aaa" minOccurs="1" maxOccurs="1"/>
<xs:element name="bbb" minOccurs="1" maxOccurs="1"/>
<xs:element name="ccc" minOccurs="1" maxOccurs="1"/>
<xs:element name="ddd" minOccurs="1" maxOccurs="1"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:element name="baseElement">
<xs:complexType>
<xs:sequence>
<xs:element name="MyChoice" type="Selects"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Я пыталсяminOccurs
и maxOccurs
на выбор и элемент без удачи.Вот XML, который проверяет, хотя я не хочу его:
<?xml version="1.0" encoding="UTF-8"?>
<baseElement xsi:noNamespaceSchemaLocation="myTest.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<MyChoice>
<ddd/>
<ddd/>
</MyChoice>
</baseElement>
Вот пример того, что я хотел бы, если это возможно:
<?xml version="1.0" encoding="UTF-8"?>
<baseElement xsi:noNamespaceSchemaLocation="myTest.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<MyChoice>
<ddd/>
<aaa/>
<ccc/>
</MyChoice>
</baseElement>
Я бы хотел, чтобыпожаловаться на множественные элементы ddd
, но разрешить любой или все остальные в любом порядке.Я получаю сообщение об ошибке, если у меня только один элемент в MyChoice, так что по крайней мере что-то работает.
Что я делаю не так?Как запретить проверку нескольких одинаковых элементов?
ОБНОВЛЕНИЕ
Это было мое решение (из комментариев ниже):
На самом деле, хз: все сделали свое дело.Я поменял выбор для всех и добавил minOccurs = "0" maxOccurs = "1" для каждого элемента.С xs: all minOccurs должно быть либо 0, либо 1, а maxOccurs должно быть 1. Спасибо за вашу помощь - я в порядке!