XSD Schema Rewrite - PullRequest
       10

XSD Schema Rewrite

0 голосов
/ 27 ноября 2018

Я нахожусь в процессе переписывания схемы проверки 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, показанные здесь.

...