xsd: как расширить тип с помощью неупорядоченного списка элементов - PullRequest
9 голосов
/ 28 сентября 2010

Это часть моей XML-схемы.

<xs:complexType name="Friend">
    <xs:all>
        <xs:element name="name" type="xs:string" />
        <xs:element name="phone" type="xs:string" />
        <xs:element name="address" type="xs:string" />
    </xs:all>
</xs:complexType>

<xs:complexType name="Coworker">
    <xs:all>
        <xs:element name="name" type="xs:string" />
        <xs:element name="phone" type="xs:string" />
        <xs:element name="office" type="xs:string" />
    </xs:all>
</xs:complexType>

. Для удобства сопровождения я хотел бы иметь общие атрибуты в (абстрактном) супертипе или что-то в этом роде.Но что еще более важно, я хочу, чтобы все элементы были неупорядоченными, а также необязательными.

Возможно ли это и как это лучше всего сделать?

1 Ответ

15 голосов
/ 28 сентября 2010

Вы должны немного ограничить себя, некоторые вещи, которые вы пытаетесь сделать, невозможны в XML-схеме.

Предположим, вы вводите сложный тип, называемый Person, чтобы быть супертипом.Friend и Coworker.Вот ваши варианты:

  1. Заменить xs:all на xs:sequence, удалить name и phone из подтипов, добавить в супертип и добавить наследование.Ваши элементы теперь должны быть упорядочены, но вы можете сделать их индивидуально по желанию. Недопустимо использовать xs:all в иерархиях типов в XML-схеме, поскольку процессор не может определить, где останавливается модель родительского содержимого, и начинается модель дочернего содержимого.
  2. Заменить xs:all на<xs:choice maxOccurs="unbounded"> в обоих типах и добавьте свое наследство.Тогда ваши элементы снова станут неупорядоченными, но они могут повториться.

Итак, в заключение: учитывая ваши имена типов, я бы предположил, что ваши требования не будут точно выполнены.Я бы выбрал первый вариант: настаивать на произвольном порядке элементов часто не так полезно, как кажется.

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