Я нахожусь в процессе переписывания схемы проверки xsd, это первый из трехэтапных планов по приведению в порядок некоторого внутреннего и служебного кода.Итак, я ищу способ переписать xsd, который позволит нам изменить код генерации xml, в то же время корректно проверяя его по xsd.По сути, я просто хочу знать, возможна ли моя идея.
Это моя попытка создания структуры XSD, и она работает как надо, но я хочу внести изменения, чтобы позволить любому элементу бытьв любом порядке и не требуя ни одного из них.Я знаю, что есть опция типа xsd All вместо последовательности, но это не работает для меня и моей ситуации, поскольку вызывает принудительное упорядочение элементов.
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="BaseArticle">
<xsd:sequence minOccurs="1" maxOccurs="1">
<xsd:element name="ID" type="xsd:integer"/>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="Source" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Book">
<xsd:complexContent>
<xsd:extension base="BaseArticle">
<xsd:sequence minOccurs="1" maxOccurs="1">
<xsd:element name="Aurther" type="xsd:string"/>
<xsd:element name="PublishDate" type="xsd:date"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Digital">
<xsd:complexContent>
<xsd:extension base="BaseArticle">
<xsd:sequence minOccurs="0" maxOccurs="1">
<xsd:element name="Website" type="xsd:string"/>
<xsd:element name="Size" type="xsd:int"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="Library">
<xsd:complexType>
<xsd:all minOccurs="1" maxOccurs="1">
<xsd:element name="Articles">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="Book" type="Book"/>
<xsd:element name="Digital" type="Digital"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Пример xml, который я пытаюсь выполнитьпроверьте здесь, здесь есть элементы, отсутствующие как в BaseArticle, так и в дочернем типе.Также есть переупорядоченные элементы, смешивающие BaseArticle и дочерний тип.
<?xml version="1.0" encoding="utf-8"?>
<Library>
<Articles>
<Book>
<ID>1</ID>
<Source>Source1</Source>
<PublishDate>1900-01-01</PublishDate>
</Book>
<Book>
<Name>Name1</Name>
<Source>Source1</Source>
<PublishDate>1900-01-01</PublishDate>
<Aurther>Aurther1</Aurther>
<ID>1</ID>
</Book>
<Digital>
<ID>1</ID>
<Name>Name1</Name>
<Source>Source1</Source>
<Website>Website1</Website>
<Size>1</Size>
</Digital>
</Articles>
</Library>
Я знаю, что потенциально существует способ реализовать это без метода иерархии, то есть с использованием BaseArticle и дочерних типов, но это будетзначат много повторяющихся элементов.Это, очевидно, пример, xsd, который я пытаюсь очистить, содержит гораздо больше элементов, чем только 5, показанные здесь.