Вы можете сделать что-то подобное, используя абстрактный тип.
<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"/>
Таким образом, возможно иметь элементы с одинаковым именем, но ограничивать их из-за определения разных типов, НО вы не можете «выбирать» эти типы, используя значение атрибута. Это должно быть сделано с использованием нотации xsi: type.