¿Por qué reemplazar un atributo por elemento es válido y dos atributos no?

en untransformación de identidad podemos eliminar un atributo por

<xsl:template match="@myAttrib"/>

esto funciona para cualquier entrada ... Y podemos "reemplazar" el atributo por un elemento con

<xsl:template match="@myAttrib"><b>my new element</b></xsl:template>

... pero solo funciona cuando la entrada tiene un solo atributo.

Por otro lado, si necesito reemplazar el valor del atributo, elxsl:template el comportamiento es el mismo, es decir,

<xsl:template match="@myAttrib">newValue</xsl:template>

no reemplaza el valor, pero elimina el atributo e incluye "newValue" como textNode.

¿Por qué "reemplazar valor" no es válido?¿Por qué "reemplazar por elemento" no es un error?¿Por qué "reemplazar por elemento" en un contexto de "dos atributos (por elemento)" es un error?

EDITAR (para explicar "dos atributos"), suponga que la entrada

<root>
    <parent myAttrib1="1" myAttrib2="2">
         <child myAttrib="1" myAttrib3="1"/>
    </parent>
    <sibling myAttrib0="1"/>
</root>

solo el elemento hermano tiene un atributo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta