Вы можете сделать что-то подобное, используя абстрактный тип.
<xs:complexType name="basePqrameterType" abstract="true"/>
Вслед за конкретным (бетон) определений типа:
<xs:complexType name="Param_uniform">
<xs:complexContent>
<xs:extension base="baseParameterType">
<xs:attribute name="type" use="required" fixed="uniform"/>
...<!--other specific restrictions for type uniform-->
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Param_normal">
<xs:complexContent>
<xs:extension base="baseParameterType">
<xs:attribute name="type" use="required" fixed="normal"/>
...<!--other specific restrictions for type normal-->
</xs:extension>
</xs:complexContent>
</xs:complexType>
Ваш XML будет выглядеть следующим образом:
<Param xsi:type="Param_normal" type="normal"/>
<Param xsi:type="Param_uniform" type="uniform"/>
Таким образом, можно иметь элементы с таким же именем но сдерживают их из-за определения разных типов, НО вы не можете «выбрать» эти типы, используя значение атрибута. Это должно быть doen, используя нотацию «xsi: type».
Это то, что я подозревал в этом деле. Спасибо, что подтвердил мои мысли. –