En informática , RELAX NG ( REgular LAnguage for XML Next Generation ) es un lenguaje de esquema para XML : un esquema RELAX NG especifica un patrón para la estructura y el contenido de un documento XML. Un esquema RELAX NG es en sí mismo un documento XML , pero RELAX NG también ofrece una sintaxis compacta y popular que no es XML. [1] En comparación con otros lenguajes de esquema XML, RELAX NG se considera relativamente simple.
Fue definido por una especificación del comité técnico OASIS RELAX NG en 2001 y 2002, basado en RELAX de Murata Makoto y TREX de James Clark , [2] [3] [4] y también por la segunda parte del estándar internacional ISO / IEC 19757: Lenguajes de definición de esquema de documento ( DSDL ). [5] [6] ISO/IEC 19757-2 fue desarrollado por ISO/IEC JTC 1/SC 34 y publicado en su primera versión en 2003. [7]
Supongamos que queremos definir un esquema de marcado XML extremadamente simple para un libro: un libro se define como una secuencia de una o más páginas; cada página contiene solo texto. Un ejemplo de documento XML podría ser:
<book> <page> Esta es la página uno. </page> <page> Esta es la página dos. </page> </book>
Un esquema RELAX NG se puede escribir en una estructura anidada definiendo un elemento raíz que contenga más definiciones de elementos, que a su vez pueden contener definiciones integradas. Un esquema para nuestro libro en este estilo, utilizando la sintaxis XML completa, se escribiría así:
<elemento nombre= "libro" xmlns= "http://relaxng.org/ns/structure/1.0" > <oneOrMore> <elemento nombre= "página" > <texto/> </elemento> </oneOrMore> </elemento>
La estructura anidada se vuelve difícil de manejar con muchos subniveles y no puede definir elementos recursivos, por lo que la mayoría de los esquemas RELAX NG complejos utilizan referencias a definiciones de patrones con nombre ubicadas por separado en el esquema. Aquí, un "esquema aplanado" define exactamente el mismo marcado de libro que el ejemplo anterior:
<grammar xmlns= "http://relaxng.org/ns/structure/1.0" > <start> <element name= "book" > <oneOrMore> <ref name= "page" /> </oneOrMore> </element> </start> <define name= "page" > <element name= "page" > <text/> </element> </define> </grammar>
La sintaxis compacta de RELAX NG es un formato no XML inspirado en la forma extendida de Backus–Naur y en las expresiones regulares , diseñado para que pueda traducirse sin ambigüedades a su contraparte XML y viceversa, con una correspondencia uno a uno en estructura y significado, de la misma manera que el XML de esquema simple (SOX) se relaciona con XML . Comparte muchas características con la sintaxis de las DTD . Aquí está la forma compacta del esquema anterior:
elemento libro { elemento página { texto } + }
Con patrones nombrados, esto se puede simplificar a:
inicio = elemento libro { página+ }
página = elemento página { texto }
Un analizador RELAX NG compacto tratará estos dos como el mismo patrón.
Aunque la especificación RELAX NG se desarrolló aproximadamente al mismo tiempo que la especificación XML Schema del W3C , se podría decir que esta última era más conocida y se implementó más ampliamente en los analizadores y editores XML de código abierto y propietarios cuando se convirtió en una Recomendación del W3C en 2001. Sin embargo, desde entonces, el soporte de RELAX NG se ha abierto camino cada vez más en el software XML, y su aceptación se ha visto facilitada por su adopción como esquema principal para lenguajes de marcado centrados en documentos populares como DocBook , las Directrices TEI , OpenDocument y EPUB .
RELAX NG comparte con el esquema XML del W3C muchas características que los diferencian de los DTD tradicionales : tipificación de datos , soporte de expresiones regulares , soporte de espacios de nombres , capacidad para hacer referencia a definiciones complejas.
Por convención informal, los esquemas RELAX NG en la sintaxis regular suelen tener la extensión de nombre de archivo ".rng". Para los esquemas en la sintaxis compacta, se utiliza la extensión ".rnc".
Los esquemas Relax NG no son necesariamente "deterministas" o "inequívocos".
Los esquemas de Relax NG se pueden convertir en DTD mediante la aplicación de Trang, que se puede encontrar en: [1]. El manual de Trang se encuentra en [2]. Tenga en cuenta que Trang no puede convertir el esquema OASIS DITA 1.3 en DTD y muestra mensajes como:
Lo sentimos, no se admite la combinación de definiciones con combine="choice"