2016-12-28 2 views
0

У меня есть иерархия сложных типов.xsd имя элемента по типу

Например: Абстрактный тип адреса с элементами StreetNumber, StreetName и PostalCode Бетон Тип HomeAddress с базой Адрес Бетон Тип BusinessAddress с базой Адрес

Типы HomeAddress и BusinessAddress не имеют каких-либо дополнительных элементов и только тип другой.

Возможно ли иметь более одного типа адресов в моем XML?

<HomeAddress> 
... 
</HomeAddress> 

<HomeAddress> 
... 
</HomeAddress> 

В XSD:

<xs:element name="address" type="Address" maxOccurs="unbounded"/> 

Я хочу, чтобы имя элемента, чтобы быть динамическим на основе фактического типа.

ответ

0

Используйте «абстрактный» атрибут и хз: удлинительный элемент:

<xs:complexType name="address" abstract="true"> 
    ... 
</xs:complexType> 

<xs:complexType name="homeAddress"> 
    <xs:complexContent> 
    <xs:extension base="mynamespace:address"></xs:extension> 
    </xs:complexContent> 
</xs:complexType> 
+0

Подобно Java, может подтип быть назначен супер-типа? Как узнать, что является фактическим типом? –

+0

Да. Попробуйте запустить XSD с помощью инструмента генерации кода сериализации, такого как jaxb (для Java) или xsd.exe (для C#), чтобы увидеть, как концепции наследования OO отображают 1: 1 в типы XML. Что касается «фактического типа», адрес homeAddress - это адрес, так что это и то, и другое. Добавьте еще один сложный подтип (например, «businessAddress») в пример выше, если это поможет. –

+0

Возможный дубликат http://stackoverflow.com/questions/5020313/polymorphism-in-xsd-schema-and-jaxb-classes –

Смежные вопросы