Действительно ли для XSD определение сложного элемента как обязательного, но все дочерние элементы являются необязательными? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь написать генератор XML из набора значений xpath и значений. И сгенерированный XML должен быть действительным в соответствии с его XSD. Так что пример как ниже

XSD. Версия XSD - 1.0.

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="products">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="books">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="book" maxOccurs="unbounded" minOccurs="0"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="cards" minOccurs="1" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="card" maxOccurs="unbounded" minOccurs="0"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Согласно XSD, требуется cards. Хотя никакая карта не требуется с minOccurs="0".

Набор значений xpaths и значений находится в файле CSV. Значения могут быть из базы данных, поэтому не обязательно иметь cards.

/products/books/book[0],book1_name
/products/books/book[1],book2_name

Сгенерировано XML

<products>
    <books>
        <book>book1_name</book>
        <book>book2_name</book>
    </books>
</products>

Так что XML недопустимо для его XSD, потому что cards узел не существует.

  • С точки зрения XSD допустимо ли сделать родительский (cards) обязательным, но все дочерние (card) необязательными?
  • С точки зрения значения XML, имеет ли смысл иметь cards, но без каких-либо детей или значения?

1 Ответ

0 голосов
/ 26 апреля 2020

Спасибо за объяснение - это действительно помогает понять, какова общая задача.

С точки зрения XSD, действительно ли родитель (карточки) является обязательным, но все дети (карточки) ) необязательно?

Да, это действительно. Спецификация XML Schema не требует, чтобы сложный элемент имел какое-либо содержимое. Есть способы проверить, что XSD действителен между прочим. Большинство процессоров XSD (включая Java) будут проверять XSD при загрузке. Будьте осторожны - некоторые XML правила действительности схемы не реализованы на всех процессорах (например, https://en.wikipedia.org/wiki/Unique_Particle_Attribution)

С точки зрения значения XML, делает ли это есть смысл иметь карты, но без детей или стоимости?

Конечно. Это в точности эквивалентно наличию ненулевого массива, содержащего ноль элементов. Почему вы думаете, что это не имеет смысла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...