XSD - переопределить элемент - PullRequest
1 голос
/ 10 июня 2011

У меня есть базовый класс, помеченный как абстрактный:

<!-- TYPE: BASE CLASS -->
<xs:complexType name="BaseClass" abstract="true">
    <xs:sequence>
        <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
        <xs:element name="implementation" type="BaseClass" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
</xs:complexType>

Теперь класс, который наследует BaseClass и переопределяет «реализацию» с помощью null:

<xs:complexType name="MyClass">
    <xs:complexContent>
        <xs:extension base="BaseClass"/>
    </xs:complexContent>
</xs:complexType>

Я пробовал это, но неверно:

<xs:complexType name="MyClass">
    <xs:complexContent>
        <xs:extension base="BaseClass">
            <xs:sequence>
                <xs:element name="implementation" fixed="xs:nil"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

Есть ли способ сделать это?

1 Ответ

1 голос
/ 10 июня 2011

Пометка чего-либо как абстрактного в схеме XSD в основном означает, что оно не может появиться в экземпляре документа.Он должен использоваться с атрибутом substitutionGroup.

Например,

<xs:element name="replaceme" abstract="true" /> 
<xs:element name="replacement1" substitutionGroup="replaceme" />
<xs:element name="replacement2" substitutionGroup="replaceme" />

Это означает, что в экземпляре документа вы будете вынуждены использовать элемент «replace1» или «replace2», т. Е. Xsd заставляет вас подставитьэлемент replaceme с одной из замен из группы замещения.

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

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