Я работаю над XSD. Я хотел бы иметь элемент container
(сложный тип), который содержит любой элемент, базовый тип которого - component
.Абстракция в xsd
Один подход ...
<complexType name="Container">
<sequence>
<element name="Child" type="am:Component"></element>
</sequence>
</complexType>
Но проблема есть мои компоненты называются дети. Предположим, у меня есть 3 компонента, foo
, bar
и baz
. Я хотел бы быть в состоянии сделать документ, который был похож ...
<container>
<foo fooTag="foo"/>
<foo fooTag="foo"/>
<baz bazTag="baz"/>
<bar barTag="bar"/>
</container>
При первом подходе я бы в конечном итоге с ...
<container>
<child fooTag="foo"/>
<child fooTag="foo"/>
<child bazTag="baz"/>
<child barTag="bar"/>
</container>
я мог бы просто использовать xs:any
но тогда я бы потерял свое утверждение о том, что ребенок должен быть component
. Есть ли способ получить то, что я хочу?
Я боялся. Спасибо за хороший ответ и примеры. – Pace
Да ... к сожалению, это поведение противоречит интуиции любому, кто приходит с точки зрения программирования. Хотя это ограничение подтверждается, например, в веб-службах .NET: генератор WSDL недостаточно умен, чтобы иметь возможность обрабатывать подтипы, если вы явно не указали, какие подтипы данного типа действительны (через XmlIncludeAttribute). –