Итак, вы хотите, чтобы атрибут type в метаэлементе управлял содержимым метаэлемента.Один из способов сделать это:
- позволить metaType быть пустым типом
- создать новый тип по расширению из metaType для каждой возможности
- иметь атрибут typeдля элемента meta это xsi: type
- значение атрибута type должно идентифицировать фактический используемый подтип metaType
Например, вы определяете meta_int как подтип metaType.Когда вы определите элемент value там, он будет иметь тип xs: int.Тогда вы получите в своем XML:
<meta xsi:type="meta_int">
<code>weight</code>
<value>12</value>
</meta>
Другой подход заключается в использовании других имен элементов, а не атрибута типа (например, элемента meta_int).Затем вы можете использовать группу выбора для выбора между различными элементами meta_ *.
Еще одним подходом может быть использование утверждений, но это особенность XSD 1.1, которая еще не является официальной (AFAIK).
Я не уверен, что вы делаете, но я думаю, что было бы справедливо сказать, что в XSD имена элементов, как правило, наиболее полезны для управления следующим контентом, тогда как вы пытаетесь сделать это с помощьюатрибут.