У меня есть два XSD, которые определяют разные документы. Скажем A.xsd определяет элемент ElementA как корень, с некоторыми сложными правилами. Теперь B.xsd определяет элемент ElementB, который должен использовать ElementA где-то посередине.
Например, я хочу, чтобы XML файл для ElementB выглядел следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<ElementB xmlns="http://example.com/namespace/for/ElementB">
<foo>Bla</foo>
<bar>Blub</bar>
<ElementA xmlns="http://example.com/namespace/for/ElementA">
<!-- ... -->
</ElementA>
</ElementB>
Тогда B.xsd может выглядеть так:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://example.com/namespace/for/ElementB" targetNamespace="http://example.com/namespace/for/ElementB" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="ElementB">
<xs:complexType>
<xs:sequence>
<xs:element name="foo" type="xs:string" />
<xs:element name="bar" type="xs:string" />
<!-- And now I want to include ElementA somehow -->
<xs:element name="ElementA" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Дело в том, что я действительно не хочу клонировать спецификацию ElementA в B.xsd, так как есть также документы, которые имеют только ElementA в качестве корня (т.е. ElementB является своего рода контейнерный документ).
Итак, как я могу разрешить ElementA внутри ElementB, полностью опираясь на уже существующий XSD?