Что плохого в расширении типа XML-схемы с использованием xs: all? - PullRequest
4 голосов
/ 15 января 2010
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://tempuri.org/ServiceDescription.xsd" xmlns:mstns="http://tempuri.org/ServiceDescription.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://tempuri.org/ServiceDescription.xsd" elementFormDefault="qualified" id="ServiceDescription">
    <xs:element name="Template">
        <xs:complexType>
            <xs:complexContent>                                     
                <xs:extension base="ServiceType">
                    <xs:all>
                        <xs:element name="TemplateCode" type="xs:string"/>
                    </xs:all>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="ServiceType">
        <xs:all>
            <xs:element name="ServiceCode" type="xs:string"/>
        </xs:all>
    </xs:complexType>
</xs:schema>

Когда я пытаюсь сохранить это в XMLSpy, он говорит мне

Группа моделей 'all' не допускается ни в определении сложного типа 'mstns: ServiceType', ни в расширении '{anonymous}'.

Нажатие на кнопку Подробности дает ссылку на абзац в спецификации XML-схемы , который я не понимаю.

Добавлено: Ах, да, забыл упомянуть - вот строка ошибки:

<xs:element name="TemplateCode" type="xs:string"/>

1 Ответ

4 голосов
/ 15 января 2010

Проблема в том, что у вас не может быть всего, если вы расширяете другой тип. Поскольку XML знает, что родительский тип может иметь модель последовательности, и поскольку XML запрещает помещать группу all внутри группы последовательности (так как это разрушит порядок группы последовательности), XML также запрещает помещать группу all в расширение комплекса тип. Вы можете использовать последовательность вместо всех для обоих, и все будет в порядке.

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