Relax NG
Principio de Relax NG
Para describir el árbol de un documento ya contamos con DTD y XMLSchema, los cuales hemos presentado en los capítulos anteriores. Se puso de relieve que la DTD no era lo suficientemente potente en lo que respecta a la definición de tipos y XMLSchema acabaría reemplazándola. De hecho, XMLSchema, a nivel de los elementos y atributos, permite definir de manera precisa los tipos de datos utilizando una gramática XML.
Sin embargo, XMLSchema sigue siendo bastante complejo en cuanto a su escritura.
Así, Relax NG (REgular LAnguage for XML Next Generation) se creó con el objetivo de simplificar la descripción de un documento XML. Este lenguaje proviene de la fusión de dos lenguajes: TreX de James Clark y Relax de Murata Makoto.
Relax NG se ocupa de la descripción y no de la coherencia de los valores de los elementos (de la cual se encarga XMLSchema). Por lo tanto, Relax NG no reemplaza a XMLSchema, pero simplifica el lenguaje.
En este capítulo, vamos a aprender a describir documentos XML más fácilmente que con XMLSchema.
A diferencia de las DTD y los esquemas XML, no es posible vincular directamente un documento XML a un esquema Relax NG. Por lo tanto, le recomendamos que en la práctica utilice validadores Relax NG como JING en http://www.thaiopensource.com/download/.
Sintaxis XML y sintaxis compacta
Existen dos tipos de sintaxis de Relax NG: la sintaxis XML y la sintaxis compacta.
La sintaxis XML, como su propio nombre indica, utiliza XML para describir un documento XML, a diferencia de la sintaxis compacta, que no está en XML, pero es más concisa y simple.
Para ilustrar el uso del lenguaje Relax NG vamos a trabajar sobre las dos sintaxis con el siguiente documento XML simple, que representa a los miembros de una asociación:
<asociación>
<miembro>
<nombre>Pedro Durán</nombre>
<email>Pedro@web.com</email>
</miembro>
<miembro>
<nombre>Juan Querol</nombre>
<email>Juan@web.com</email>
</miembro>
</asociación>
1. Sintaxis XML
En la sintaxis XML, definiremos los elementos y los atributos en un documento XML, que se guardará con la extensión .rng.
En nuestro ejemplo, tenemos los elementos asociación, miembro, nombre y email. Con el patrón element, vamos a definir estos últimos. Con el patrón zeroOrMore, vamos a indicar si el elemento puede aparecer varias veces o ninguna.
Esto nos da un esquema simple:
<element name="asociación" xmlns="http://relaxng.org/ns/structure/1.0">
<zeroOrMore>
<element name="miembro">
<element name="nombre">
<text/>
</element>
<element name="email">
<text/>
</element>
</element>
</zeroOrMore>
</element>
El nombre de los elementos se describe mediante el argumento...
Conclusión
Relax NG es fácil de aprender y de utilizar. En la descripción de documentos XML, este lenguaje permite ir más lejos que las DTD. Es más simple que XMLSchema. Existen herramientas como Trang, disponible para su descarga en http://www.thaiopensource.com/relaxng/trang.html, que permiten pasar de XMLSchema, DTD a Relax NG y viceversa.
Parece impensable que Relax NG reemplace a XMLSchema, que es mucho más maduro. Sin embargo, los programadores valoran la simplicidad del lenguaje.