Digamos que tengo un documento XML (representado como texto, un W3C DOM, lo que sea), y también un Esquema XML. El documento XML tiene todos los elementos correctos definidos por el esquema, pero en el orden incorrecto.Usar un esquema para reordenar los elementos de un documento XML de conformidad con el esquema
¿Cómo utilizo el esquema para "reordenar" los elementos en el documento para cumplir con el orden definido por el esquema?
Sé que esto debería ser posible, probablemente utilizando XSOM, ya que el generador de código JAXB XJC anota sus clases generadas con el orden correcto de serialización de los elementos.
Sin embargo, no estoy familiarizado con la API de XSOM, y es bastante denso, así que espero que alguno de ustedes tenga algo de experiencia y pueda orientarme en la dirección correcta. Algo así como "¿Qué elementos secundarios están permitidos dentro de este elemento primario y en qué orden?"
Déjeme dar un ejemplo.
que tienen un documento XML como esto:
<A>
<Y/>
<X/>
</A>
que tienen un esquema XML que dice que el contenido de <A>
debe ser un <X>
seguido de un <Y>
. Ahora, claramente, si intento validar el documento con el esquema, falla, ya que <X>
y <Y>
están en el orden incorrecto. Pero sé que mi documento está "equivocado" de antemano, así que no estoy usando el esquema para validar por el momento. Sin embargo, I do sepa que mi documento tiene todos los elementos correctos definidos por el esquema, simplemente en el orden incorrecto.
Lo que quiero hacer es examinar mediante programación el esquema (probablemente utilizando XSOM, que es un modelo de objeto para el esquema XML), y preguntarle cuál debería ser el contenido de <A>
. La API expondrá la información que "necesita un <X>
seguido de un <Y>
".
Así que tomo mi documento XML (usando una DOM API) y lo reorganizo y en consecuencia, de modo que ahora el documento se validará contra el esquema.
Es importante entender qué XSOM está aquí; es una API de Java que representa la información contenida en un Esquema XML, no la información contenida en mi documento de instancia.
Lo que no quiero hacer es generar código desde el esquema, ya que el esquema no se conoce en tiempo de compilación. Además, XSLT no sirve, ya que el ordenamiento correcto de los elementos está determinado únicamente por el diccionario de datos contenido en el esquema.
Esperemos que ahora sea lo suficientemente explícito.
¿Cuáles son las limitaciones de la entrada? Usted da un ejemplo bastante simple, pero obviamente puede haber casos mucho más complicados como la elección (secuencia (elección (...))). Además, ¿se sabe de antemano que el documento de entrada puede ponerse en conformidad con el esquema reordenando los elementos? Si no es una garantía, francamente, no veo por dónde empezar. –
Sí, sé de antemano que los elementos correctos están todos allí, pero el orden se ha aleatorizado de forma efectiva mediante un paso de procesamiento anterior. Tiene razón en que la complejidad potencial de las definiciones del tipo de esquema puede ser desalentadora, por lo que espero que XSOM pueda descifrar eso para mí y representarlo en términos simples. – skaffman
Por lo que puedo ver, XSOM realmente no simplifica nada, es más como un DOM fuertemente tipado para el Esquema XML. En general, le compra la conveniencia de tener un analizador listo para usar y una estructura similar a AST para trabajar, pero nada que lo ayude en lo que desea. Entonces, la solución sería genérica, independientemente de la forma en que procese el esquema XML. –