Семантика расширения XML-схемы - PullRequest
2 голосов
/ 03 декабря 2011

Интуитивно, «расширение» означает добавить что-либо к базовому типу, а не изменять базовый тип. Следующие XSD

<complexType name="B">
    <attribute name="A1" type="int" use="required" />
    <anyAttribute namespace="##other" processContents="strict" />
</complexType>
<complexType name="D">
    <complexContent >
        <extension base="tns:B">
            <!--???-->
            <attribute name="A1" type="int" use="optional" />
            <anyAttribute namespace="##other" processContents="lax" />
        </extension>
    </complexContent>
</complexType>

не должен компилироваться. Но компилятор XML-схемы (System.Xml.Schema.XmlSchema) не выдает ошибок. Что такое рациональный дизайн против интуиции?

1 Ответ

0 голосов
/ 29 декабря 2011

Проблема со схемой:

  • В D вы пытаетесь добавить атрибут A1 во второй раз.

Включение чего-либо в расширение добавляет его к определению. В этом случае «А1» уже есть. Любой расширенный экземпляр должен быть действительным экземпляром базы. Если бы А1 не присутствовал, он не был бы действительным членом базы.

Похоже, вам нужно ограничить тип B, если вы хотите сделать его необязательным.

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