Я хочу создать схему XML — файл XSD — для применения к документам XML. Рассмотрим следующий XML-документ:
<root>
<a />
<b />
<c />
<a />
<a />
<b />
</root>
Если соблюдаются следующие желаемые ограничения:
- ‹ root > — корневой элемент.
- Элементы ‹ a >, ‹ b > и ‹ c > могут встречаться неограниченное количество раз.
- Элементы ‹ a >, ‹ b > и ‹ c > не группируются. Например, элемент может предшествовать элементу ‹ b > и следовать за ним.
Если бы мне нужно было создать XML-схему для применения к примеру XML-документа, я бы начал со следующего:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://doesnotmatter.com/"
xmlns="http://doesnotmatter.com/"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root"
min="1"
max="1">
<complexType>
<!-- ? -->
</complexType>
</xs:element>
</xs:schema>
Я не знаю, как заполнить элемент ‹ complexType > в моей схеме.
Я не могу использовать элемент ‹ sequence > из-за 3-го ограничения.
Как мне добиться, чтобы моя схема соблюдала все 3 ограничения.
Изменить
Элемент выбора был краеугольным камнем в моей проблеме.
Вот схема XML, соответствующая моим потребностям, описанным выше:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://doesnotmatter.com/"
xmlns="http://doesnotmatter.com/"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="a" />
<xs:element name="b" />
<xs:element name="c" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>