barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

среда, 14 марта 2012 г.

XMLSchema: расширение базового типа элементами в начале

Иногда хочется использовать наследование типов с помощью элемента extension так, чтобы добавить к sequence базового типа элементы в начале (перед указанными в базовом типе), а не в конце. Скажем, расширить тип:
<xs:complexType name="TypeA">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
<xs:complexType/>
До типа:
<xs:complexType name="TypeB">
<xs:sequence>
<xs:element name="id" type="xs:integer"/>
<xs:element name="number" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
<xs:complexType/>
Но так делать нельзя: в спецификации XMLSchema 1.1 указано, что:
For the most part, this specification allows only appending, and not other kinds of extensions. This decision simplifies application processing required to cast instances from the derived type to the base type. 
Т.е. при использовании extension для расширения sequence базового типа можно дополнять эту последовательность только элементами в конце.

Комментариев нет:

Отправить комментарий