Как я могу повторно использовать сложный тип, чтобы определить его последовательность (схема XML) - PullRequest
0 голосов
/ 19 октября 2018

Я новичок в XML-схеме.Я должен конвертировать вручную dtd файл.Это две строки

<!ENTITY % field "a|b|c">
<!ELEMENT article (%field;)*>

Я бы хотел определить комплексный тип, который эквивалентен (a | b | c), а также тот, который эквивалентен (a | b | c) * без переписываниякод.То, как я определяю (a | b | c):

<xs:complexType name="abc">
    <xs:choice>
        <xs:element ref="a"/>
        <xs:element ref="b"/>
        <xs:element ref="c"/>
    </xs:choice>
</xs:complexType>

Однако я не знаю, как определить (a | b | c) *, используя предыдущее определение и без добавления подэлемента, как яниже

<xs:element name="article">
<xs:complexType name="abc*">
    <xs:sequence>
        <xs:element name="abcelement" type="abc" minOccur="0" maxOccur="unbounded"/>
    </xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="article>
 <xs:complexType name="abc*">
        <xs:choice minOccur="0" maxOccur="unbounded">
            <xs:element ref="a"/>
            <xs:element ref="b"/>
            <xs:element ref="c"/>
        </xs:choice>
    </xs:complexType>
</xs:element>

Спасибо

1 Ответ

0 голосов
/ 19 октября 2018

Определите abc как именованную группу xs:, которая является выбором a | b | c, тогда вы можете ссылаться на эту именованную группу (a) непосредственно внутри сложного типа и (b) внутри другого сложного типа, который допускает повторение

<xs:group name="abc">
    <xs:choice>
        <xs:element ref="a"/>
        <xs:element ref="b"/>
        <xs:element ref="c"/>
    </xs:choice>
</xs:group>

<xs:complexType name="abc">
  <xs:group ref="abc"/>
</xs:complexType>

<xs:complexType name="abc-repeated">
  <xs:sequence>
    <xs:group ref="abc" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>

Не проверено - возможны опечатки.

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