XML XML es el lenguaje de marcado extensible. (extensible Markup Language) Es extensible porque los tags son definibles por el usuario Es la evolución de SGML: Standar Generalized Markup Language. Es la base de la interoperabilidad de muchos sistemas. Es el estándar para muchas tecnologías web (Ajax, Servicios web, etc) Es una recomendación de la W3C desde 1998. La idea central detrás de XML es proveer una forma de estructurar información general, con independiencia de la plataforma. Facilita intercambio, procesamiento, claridad de datos. <producto> <nombre> Flatron L17 </nombre> <descripcion> Monitor LCD de 17 pulgadas. </descripcion> </producto> <contacto> <nombre> Juan Perugia </nombre> <telefono tipo= cel >12345678</telefono> <telefono tipo= oficina >42346</telefono> </contacto> Para evitar colisiones de tags namespaces Colección de vocabularios Diego C. Martínez - DCIC-UNS 10 XML - validez Un documento XML es bien formado si sigue las reglas del estándar XML. Un documento XML es válido si es contrastado exitosamente contra un conjunto de reglas estructurales, especificadas en un documento DTD Document Type Definition, o Un XSD - XML Schema Definitions. Estos documentos dicen cómo es la estructura correcta del documento XML. Define el tipo de dato. DTD Document Type Definition XML Schema Descripción simple de qué elementos y atributos pueden existir en el XML NO utiliza la misma sintaxis que XML. Simple, pero con algunas limitaciones. e.g, no es posible restringir valores a enteros. Descripción de qué elementos y atributos pueden existir en el XML XSD y XML se almacenan separados Más poderoso que DTD, pero más complejo. e.g, es posible definir tipos numéricos con subrangos, o el orden de los elementos dentro de un nodo. Utiliza la misma sintaxis que XML Diego C. Martínez - DCIC-UNS 12
DTD- Document Type Definition Definición DTD: <!DOCTYPE nombre_nodo_raiz definiciones > <!ELEMENT elemento specif_contenido> <!ELEMENT apellido (#PCDATA)> <!ELEMENT contacto (nombre,telefono,direccion)> <!ELEMENT vehiculo (patente numidentificacion)> <!ELEMENT img EMPTY> <!ELEMENT descripcion ANY> <!ELEMENT subseccion (#PCDATA)> <!ELEMENT seccion (#PCDATA subseccion)> Puede incluirse en el mismo XML, o referenciar otro recurso. <!DOCTYPE nombre_nodo_raiz recurso >? = cero o uno, * = cero o muchos, + = uno o muchos <!ELEMENT articulo (titulo?, (parrafo+, grafico)*)> <!ATTLIST elemento atributo tipo defauldecl> <!ATTLIST contacto telefono (cel oficina casa)> <!ATTLIST mensaje prioridad (urgente normal) normal> <!ATTLIST producto oferta (si no) #REQUIRED> <!ATTLIST mensaje firma CDATA #IMPLIED> <!ATTLIST texto idioma CDATA> XSD XML Schema Definitions Al ser un documento XML, la estructura del XSD es previsible. Utiliza tags especiales con el prefijo xs: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="libro"> <xs:complextype> <xs:sequence> <xs:element name="titulo" type="xs:string"/> <xs:element name="autor" type="xs:string"/> </xs:sequence> </xs:complextype> </xs:element> </xs:schema> Define varios tipos de datos básicos para los elementos del XML: xs:string xs:decimal xs:integer xs:boolean xs:date xs:time xs:anyuri <xs:element name="autor" type="xs:string"/> <xs:element name="precio" type="xs:decimal"/> Diego C. Martínez - DCIC-UNS 13 Diego C. Martínez - DCIC-UNS 14 XSD - Ejemplos <xs:element name="edad"> <xs:simpletype> <xs:restriction base="xs:integer"> <xs:mininclusive value="0"/> <xs:maxinclusive value="120"/> </xs:restriction> </xs:simpletype> </xs:element> <xs:element name="auto" type="tipoauto"/> <xs:simpletype name="tipoauto"> <xs:restriction base="xs:string"> <xs:enumeration value="chevrolet"/> <xs:enumeration value="vw"/> <xs:enumeration value="nissan"/> </xs:restriction> </xs:simpletype> XSD Ejemplos <xs:complextype name="direccion"> <xs:sequence> <xs:element name="calle" type="xs:string"/> <xs:element name="ciudad" type="xs:string"/> </xs:sequence> </xs:complextype> <xs:complextype name="direccionarg"> <xs:complexcontent> <xs:extension base="direccion"> <xs:sequence> <xs:element name="provincia" type="xs:string"/> <xs:element name="codigopostal" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexcontent> </xs:complextype> Diego C. Martínez - DCIC-UNS 15 Diego C. Martínez - DCIC-UNS 16
XSD Ejemplos <xs:element name= listaenteros type= tipolistaenteros > <xs:simpletype name="tipolistaenteros"> <xs:list itemtype="xs:integer"/> </xs:simpletype> XSD Ejemplos <xsd:group name="direccion"> <xsd:sequence> <xsd:element name="calle" /> <xsd:element name="ciudad" /> <xsd:element name="provincia" /> <xsd:element name="cp" /> </xsd:sequence> </xsd:group> <listaenteros>343 1231 9 7654</listaEnteros> <xsd:element name="alumno"> <xsd:sequence> <xsd:element name="nombre" type="xsd:string" /> <xsd:element name="apellido" type="xsd:string" /> <xsd:group ref="direccion" /> <xsd:element name="libreta" type="xsd:integer" />... </xsd:sequence> </xsd:element> Diego C. Martínez - DCIC-UNS 17 Diego C. Martínez - DCIC-UNS 18 XPath XPath es un lenguaje para referenciar partes de un documento XML. Fuertemente relacionado con otros estándares como XSLT, XQuery y XPointer http://www.w3.org/tr/xpath/ Utiliza una sintaxis simple que permite integrarlo en otras tecnologías XPath modela un documento XML como un árbol de nodos. nodos elemento nodos atributo nodos texto comentarios instrucciones de procesado Relaciona strings (paths) con nodos del árbol del documento XML agenda contacto agenda/contacto/nombre Se pueden referenciar nodos individuales o grupos de nodos. XPath agenda contacto nombre telefono telefono Juan 123456 456789 agenda/contacto/telefono agenda/contacto/telefono[1] agenda /agenda nombre telefono telefono Juan 123456 456789 Diego C. Martínez - DCIC-UNS 19 Diego C. Martínez - DCIC-UNS 20
Xpath- expresiones Una expresión en Xpath es evaluada a un objeto, que puede ser un conjunto de nodos un booleano un número un string Expresión Significado / Referencia desde el nodo raíz /nodox Encontrar el nodo raíz llamado nodox //elementoa Seleccionar los nodos desde el nodo actual, cualquiera sea el path. El nodo actual.. El padre del nodo actual @atribn Selecciona el atributo atribn del nodo actual elemento[n] elemento[@atribn] elemento[@atribn='valorn'] text() Selecciona el elemento N-ésimo Selecciona los elementos que tengan el atributo atribn Selecciona los elementos cuyo valor de atributo atribn sea valorn Selecciona el texto del elemento actual Diego C. Martínez - DCIC-UNS 21 Xpath- expresiones <title>saludo</title> <p>hola</p> <p>mundo</p> <div><p>texto1</p></div> <div><p>texto2</p></div> <div><div><div> Texto3 </div></div></div> html/head/title html/head/title/text() /html/body/p[2] /html//p /html//p[1] //div //div[1] div/div /div/div //div/div[2] head title Diego C. Martínez - DCIC-UNS 22 html Saludo Hola Mundo body p p div div div //p/text() //div/../p p p div Texto1 //div/../../../../p //div/../p[1]/text() Texto2 div Texto3 Xpath- expresiones Otras expresiones interesantes: /libro/articulo[5]/seccion[3] libro/*/apellido //div[@class='noticia']/p[@class='encabezado']/div //div[last()] /stock/producto[@tipo='oferta' and precio<50] table[@border and @style] //div[@*] count(//div[@tipo='post']) //table/@class //graduado[@univ= UNS ] XSLT XPath es integrado en otros estándares de la W3C, entre ellos principalmente XSLT -extensible Stylesheet Language Transformation. Es un lenguaje de reglas de transformación, escrito en XML. Permite transformar un documento XML en otro documento de formato diferente, como HTML, PDF, SVG, RTF, Ascii plano, etc. Mucho más poderoso que CSS. Le otorga mayor universalidad al XML. <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template>... </xsl:template> <xsl:template>... </xsl:template> </xsl:stylesheet> Identifica un patrón dentro del XML para aplicarle una transformación. Usa XPath. Diego C. Martínez - DCIC-UNS 23 Diego C. Martínez - DCIC-UNS 24
XSLT tags comunes <xs:stylesheet> Tag raíz del documento stylesheet <xs:template name= nombre match= patron > Define reglas que se aplican cuando un nodo coincide con el patrón indicado <xs:value-of select= patron > Extrae el valor del nodo que coincide con el patrón indicado <xs:attribute> Agrega atributos a un elemento <xs:text> Contiene texto que es tomado literalmente. <xs:for-each select= patron > Cicla entre los elementos que son identificados por coincidencia con el patrón indicado XSL - ejemplo Una forma simple de trabajar con XSLT <films> <titulo>et</titulo> <estreno>1982</estreno> <titulo>piranha</titulo> <estreno>1978</estreno> <titulo>platoon</titulo> <estreno>1986</estreno> </films> fill-in-the-blanks <xsl:stylesheet version="1.0" xmlns:xsl="..."> <xsl:template match="/"> <title>peliculas!</title> <table class= pelis > <tr> <td> <xs:value-of select= films/film/titulo > <td> <xs:value-of select= films/film/estreno > </tr> <xs:if test= condicion > Alternativa entre transformaciones a aplicar a continuación Diego C. Martínez - DCIC-UNS 25 </table> Diego C. Martínez - DCIC-UNS 26 XSL - ejemplo XSL - ejemplo Una forma simple de trabajar con XSLT fill-in-the-blanks Una forma simple de trabajar con XSLT fill-in-the-blanks <films> <titulo>et</titulo> <estreno>1982</estreno> <titulo>piranha</titulo> <estreno>1978</estreno> <titulo>platoon</titulo> <estreno>1986</estreno> </films> <xsl:stylesheet version="1.0" xmlns:xsl="..."> <xsl:template match="/"> <title>peliculas!</title> <table class= pelis > <xsl:for-each select="films/film"> <tr> <td> <xsl:value-of select="titulo"/> <td> <xsl:value-of select="estreno"/> </tr> </xsl:for-each> <films> <titulo>et</titulo> <estreno>1982</estreno> <titulo>piranha</titulo> <estreno>1978</estreno> <titulo>platoon</titulo> <estreno>1986</estreno> </films> <xsl:stylesheet version="1.0" xmlns:xsl="..."> <xsl:template match="/"> <title>peliculas!</title> <table class= pelis > <xsl:for-each select="films/film"> <tr><td> <xsl:value-of select="titulo"/> <td> <xsl:value-of select="estreno"/> <xsl:if test="oscar"> <td><img src="oscar.jpg"> </xsl:if> </tr> </xsl:for-each> </table> </table> Diego C. Martínez - DCIC-UNS 27 Diego C. Martínez - DCIC-UNS 28
XSL - ejemplo Una forma simple de trabajar con XSLT fill-in-the-blanks <films> <titulo>et</titulo> <estreno>1982</estreno> <titulo>piranha</titulo> <estreno>1978</estreno> <titulo>platoon</titulo> <estreno>1986</estreno> </films> <xsl:stylesheet version="1.0" xmlns:xsl="..."> <xsl:template match="/"> <title>peliculas!</title> <table class= pelis > <xsl:for-each select="films/film"> <tr><td><xsl:value-of select="titulo"/> <td><xsl:value-of select="estreno"/> <xsl:choose> <xsl:when test="oscar"> <td><img src= oscar.jpg> </xsl:when> <xsl:otherwise> <td>nada! </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table> Diego C. Martínez - DCIC-UNS 29