You can do something similar using abstract type.
<xs:complexType name="basePqrameterType" abstract="true"/>
Followed by the specific (concrete) type definitions:
<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>
Your xml will look like this:
<Param xsi:type="Param_normal" type="normal"/>
<Param xsi:type="Param_uniform" type="uniform"/>
Thus, it IS possible to have elements with the same name but constrain them due the definition of different types, BUT you cannot 'select' these types by using an attribute value. It has to be doen using the 'xsi:type' notation.