Relax NG
Pablo Prol Sobrado
Índice
1. Introducción
2. Relax NG
a. ¿Qué es Relax NG?
b. Diferencias y similitudes
c. Modelo de datos
d. Sintaxis XML vs. compacta
3. Elementos
4. Referencias
1. Introducción
● Validación XML: ¿Cómo?
● Varias soluciones:
○ DTD
○ XML Schemas (XSD)
○ Relax NG
2a. ¿Qué es Relax NG?
● Lenguaje de esquema XML basado en
gramática
● Fusión de RELAX y TREX
● Especifica un modelo de:
○ Estructura
○ Contenido
● En comparación, es simple
● Documento = Objeto
2b. Diferencias y similitudes
● Simplifica DTDs en general y XSDs en
particular
● No es oficial de W3C, ni siquiera una
recomendación
● No tiene <simpleType> ni <complexType>
● No tiene <minOccurs> ni <maxOccurs>
● Posee elementos y etiquetas especiales
(Número requerido de apariciones, tipo de
dato de un elemento...)
● Similitudes: Tipos de datos, expresiones
regulares, namespaces
2c. Modelo de datos
Un elemento consta de:
● Nombre
● Contexto
● Conjunto de atributos
2d. Sintaxis XML vs. compacta
●
Sintaxis XML
<element name="date"
xmlns="http://relaxng.org/ns/structure/1.0">
<text />
</ element>
●
Sintaxis compacta
element date { text }
3. Elementos
● <element>
○ Debe de tener la keyword
name
○ <element name="date"></ element>
○ element date { }
● <attribute>
○ En sintaxis XML,
text
es hijo por defecto
○ <attribute name="type" />
○ En sintaxis compacta, necesita la keyword
text
3. Elementos
● <empty>
○ Pueden tener atributos, pero no texto ni hijos
○ Si no hay atributos en un elemento, se debe
especificar
○ <element name="date"><empty /></ element>
○ element date { empty }
●
namespace
○ <element name="date"
ns="http://www.example.com/ns" xmlns="http://relaxng.
org/ns/structure/1.0">
3. Elementos
● <optional> = ? (En DTD y compacta)
● <oneOrMore> = + (En DTD y compacta)
● <zeroOrMore> = * (En DTD y compacta)
● <choice> = | (En DTD y compacta)
3. Elementos
<element name="dates"> <choice>
<group>
<element name=day"><text /></ element> <element name="month"><text /></ element> </ group>
<oneOrMore>
<element name="date"><text /></ element> </ oneOrMore>
</ choice> </ element>
element dates { (element day { text }, element month { text }) | element date { text }* }
3. Elementos
● <define>
○ Similar al complexType
○ Sin conflictos por culpa de nombres (Entre definición
y elemento, p.ej.)
○ <define name="date">
<element name="day"><text />< /element>
<element name="month"><text />< /element>
</ define>
○ date = element day { text }, element month { text }
○ Si se emplea, también se debe usar <grammar> y
<start>
3. Elementos
● <grammar>
○ Al usar <define>, se convierte en el elemento
principal del schema
● <start>
○ Similar a DOCTYPE
<grammar xmlns="http://relaxng.org/ns/structure/1.0"> <start> <ref name="date" /> </ start> <define name="date"> </ define> </ grammar>3. Elementos
●
Datatypes
○ Soporte para tipos de datos en librerías externas
<element name="year" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <data type="gYear"> <param name="minInclusive">2002</param> <param name="maxInclusive">2005</param> </data> </element>
3. Elementos
● Enumeraciones
<element name="day" xmlns="http://relaxng.org/ns/structure/1.0"> <choice> <value>m</value> <value>w</value> <value>f</value> </choice> </element> element day { "m" | "w" | "f" }
3. Elementos
● Listas
<element name="vertex" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <list> <data type="float"/> <data type="float"/> <data type="float"/> </list> </element>