¿Puede relaxng especificar un conjunto desordenado de elementos con el mismo nombre, pero con atributos diferentes?

Estoy trabajando para automatizar las pruebas de una API que toma y devuelve XML, por lo que quiero traducir los datos de retorno documentados de la API en un esquema lo más posible. Elegí RelaxNG para esta tarea basada en la facilidad de uso y aprendizaje.

Antes de tirar toda la información, aquí está la pregunta:

¿Es posible describir "un conjunto de elementos desordenados, con el mismo nombre pero con atributos diferentes"?

Aquí hay un objeto de muestra para lo que me cuesta describir:

<item>
    <id>d395136e-d060-4a6e-887c-c0337dd7ad09</id>
    <name>The item has a name</name>
    <link rel="self" type="type1" href="url" />
    <link rel="download" type="type2" href="url" />
    <link rel="relatedData" type="type3" href="url" />
</item>

Los objetos de enlace son la parte de la que me estoy quedando colgado. Aquí está el problema:

El orden de los elementos dentro del elemento no está garantizado, por lo que estoy tratando de poner todos los elementos en<interleave> estructura.Habrá múltiples<link> elementos dentro<item>, con diferentes conjuntos de atributos (es decir,<item> DEBE tener un enlace 'propio', un enlace 'descargar' y un enlace 'relatedData' para que sea válido).Se requiere uno de cada tipo de enlace, pero nuevamente no se garantiza el pedido.

Intenté describir el esquema así:

<element name="item">
    <interleave>
        <element name="id"><text/></element>
        <element name="name"><text/></element>
        <ref name="selfLink"/>
        <ref name="launchLink"/>
        <ref name="thumbnailLink"/>
    </interleave>
</element>

Las referencias de 'enlace' se definen en otros lugares así:

 <define name="selfLink">
 <element name="link">
     <attribute name="href"><text/></attribute>
     <attribute name="rel"><value>self</value></attribute>
     <attribute name="type"><value>type1</value></attribute>
 </element>
 </define>

El analizador no está contento con esto - de jing me saleerror: the element "link" can occur in more than one operand of "interleave". Puedo ver a qué se refiere, pero esperaba que pudiera manejar la idea de 'elementos con el mismo nombre pero diferentes atributos' como elementos únicos.

Si se mueven las referencias del enlace fuera de la intercalación, se puede analizar, pero estaré esperando a que el validador explote cada vez que el orden cambie en los datos devueltos.

¿Alguna idea, o es esto imposible? ¿Existe un problema inherente con el XML que estoy procesando y requerirá que mueva algo de esto a una lógica de procesamiento superior en mi aplicación de prueba (verifique manualmente cada tipo de enlace después de ejecutar una validación XML más genérica?)

Respuestas a la pregunta(2)

Su respuesta a la pregunta