Relax NG Pablo Prol Sobrado Alexandre Ramilo Conde Índice 1. Introducción 2. Relax NG a. b. c. d. ¿Qué es Relax NG? Diferencias y similitudes Modelo de datos 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 ● Archivos de extensión ".rng" o ".rnc" 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 ● Secuencia ordenada de hijos 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 attribute type { 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"> ○ default namespace = "http://www.example.com/ns" 3. Elementos ● <optional> = ? (En DTD y compacta) ● <oneOrMore> = + (En DTD y compacta) ● <zeroOrMore> = * (En DTD y compacta) ● <choice> = | (En DTD y compacta) ● <group> = () (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> element year { xsd:gYear {minInclusive="2002" maxInclusive="2005"} } 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> element vertex {list {xsd:float, xsd:float, xsd:float}} 4. Referencias ● Web de Relax NG (http://relaxng.org/) ● Especificación de Relax NG en Oasis (https: //www.oasis-open.org/committees/relaxng/spec-20010811.html) ● Validación XML en la Wikipedia en español (http://es.wikipedia.org/wiki/Validaci%C3% B3n_XML) ● Relax NG en la Wikipedia en inglés (http: //en.wikipedia.org/wiki/RELAX_NG) 4. Referencias ● "Relax NG" de Eric van der Vlist (http: //books.xmlschemata.org/relaxng/page2. html) ● "Relax NG, A Schema Language for XML" de Michael Fitzgerald (http://www.slideshare. net/booksoverdue/relax-ng-a-schemalanguage-for-xml) ● "XML Schema y DTDs" de Luis Alvarado (http://www.programacion. com/articulo/xml_schema_y_dtds_161/4) Relax NG Pablo Prol Sobrado Alexandre Ramilo Conde ¡Gracias por vuestra atención! ¿Preguntas?