Почему бы просто не включить определение? Вы определяете его в одной XML-схеме, а затем включаете его везде, где вы хотите использовать его в другой XML-схеме, например:
<include schemaLocation="http://www.example.com/schemas/barDef.xsd"/>
<include schemaLocation="http://www.example.com/schemas/fooDef.xsd"/>
Есть еще один аспект вашего вопроса: чтобы в XML-документе можно было указать, какой тип tableSchema это.
Вот аналогия с ОО-программированием: (1) определить суперкласс, (2) определить foo и bar как его подклассы. Затем (3) определите тип поля для их общего суперкласса; и сейчас (4). объект во время выполнения может иметь любой подкласс. Имеет ли это смысл? Я думаю, это то, о чем ты думаешь в любом случае.
Для завершения аналогии: в XML классом является complexType ; подкласс является расширением этого; поле является элементом , а его класс является его атрибутом type - а классом объекта времени выполнения является xsi: type элемента в XML-документе . Главное, что последняя часть, xsi: type .
* * Тысяча тридцать один (1). Определите общий суперкласс - XML complexType:
<complexType name="MySuperType">
...
</complexType>
* 1 034 * (2). Определите подклассы - расширения вышеуказанного complexType:
<complexType name="Foo">
<complexContent>
<extension base="MySuperType">
...
</extension>
</complexContent>
</complexType>
<complexType name="Bar">
<complexContent>
<extension base="MySuperType">
...
</extension>
</complexContent>
</complexType>
* * Тысяча тридцать-семь (3). Определите поле для суперкласса - элемент для complexType, расширенный с:
<element name="tableSchema" type="mySuperType"/>
(4). Теперь в XML можно указать, что элемент имеет определенный complexType в самом XML :
<report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<page>
<table>
<tableSchema xsi:type="foo"/>
<dataSource>fooData</dataSource>
</table>
</page>
<page>
<table>
<tableSchema xsi:type="bar"/>
<dataSource>barData</dataSource>
</table>
</page>
</report>
Обратите внимание, что type является специальным и определяется в заданном пространстве имен. На самом деле, есть несколько проблем с пространством имен, которые могут расстраивать, но главное в том, что позволяет делать то, что вы хотите.
Более полный пример приведен в Учебник по XML-схеме .