XSD абстрактный тип, возможно, не сгенерирован в XML - PullRequest
0 голосов
/ 24 декабря 2018

это общий вопрос проверки XSD.Я пытаюсь адаптировать схему XSD к существующему XML.Давайте создадим следующую ветку XML:

<briefing>
   <date/>
   <supplier/>
   <customer/>
   ...
   <q>question 1</q>
   <a>answer 1</a>
   <q>question 2</q>
   <a>answer 2</a>
   ...
</briefing>

Теперь для каждого брифинга у меня может быть 1 клиент, 1 поставщик и N пар вопросов и ответов: если я хочу получить контроль над парой q + a, я долженсоздать элемент <qa>, имеющий maxOccurs=unbounded и включающий в последовательность <q>+<a>, каждый из которых имеет minOccurs=maxOccurs=1.Но что, если элемент <qa> недоступен в XML?Я хотел бы создать «абстрактный» <qa> элемент (или группу) таким образом, чтобы родительский абстрактный элемент НЕ генерировался вообще, но его дети все еще могут присутствовать со своими атрибутами (вроде virtual) элемент).В любом случае, ни абстрактные элементы, ни группы не были проверены таким образом, и я не смог найти что-то похожее в спецификациях ...
Итак, наконец, что мы можем сказать об элементах такого типа?
Это так?обязательно, чтобы каждый родительский элемент XSD присутствовал в окончательном XML, чтобы его дочерние элементы присутствовали внутри?

1 Ответ

0 голосов
/ 24 декабря 2018

То, что вам нужно сделать, это поместить элементы q и a в последовательность, для которой minOccurs 0 и maxOccurs установлены в значение или не ограничены, как показано ниже.

<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="briefing">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="date" nillable="true" type="xs:date" />
        <xs:element name="supplier" type="xs:string" />
        <xs:element name="customer" type="xs:string" />
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:element name="q" type="xs:string" />
          <xs:element name="a" type="xs:string" />
        </xs:sequence>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Это будет довольно счастливоразбирать

<briefing>
  <date>1999-05-31</date>
  <supplier>supplier_0</supplier>
  <customer>customer_0</customer>
  <q>question 1</q>
  <a>answer 1</a>
  <q>question 2</q>
  <a>answer 2</a>
</briefing>

или

<briefing>
  <date>1999-05-31</date>
  <supplier>supplier_0</supplier>
  <customer>customer_0</customer>
</briefing>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...