Tecnologías XML Pedro J. Muñoz Merino http://www.it.uc3m.es/pedmume/ XML: Introducción ● XML es un formato para almacenamiento y estructuración de datos que se encuentra en ficheros de texto ● Un conjunto de datos de una base de datos puede ser pasado a XML y viceversa ● Algunos usos de XML ― Información de usuarios, productos, cosas, etc. ― Descripción de comportamiento o procesos ― Descripción de protocolos de comunicaciones ― Descripción de lenguajes Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 2 XML: Reglas Básicas de Formación ● Un fichero XML debe seguir las siguientes reglas ― Empezar por la línea <?xml version="1.0"?> ― Todo elemento en XML tiene un delimitador de inicio y otro de fin y puede tener atributos asociados Inicio: <nombre_elemento atributo1=“valor1” atributo2= “valor2” …> Fin: </nombre_elemento> ― Se tiene un único elemento raíz ― El elemento raíz puede tener en su interior un número indefinido de elementos anidados (implica que los elementos que haya en su interior sus delimitadores de inicio y fin estarán dentro del delimitador de inicio y fin del elemento raíz) así como texto ― Cualquier elemento puede tener en su interior un número indefinido de elementos anidados, así como texto ― Para insertar comentarios: <!-- Comentario insertado --> Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 3 XML: Reglas Adicionales de Formación ● Un fichero XML debe además seguir las siguientes reglas ― Se pueden escapar caracteres para que no se interpreten como caracteres especiales del fichero XML <(&lt), > (&gt), & (&amp), ‘ (&apos), “ (&quot) <![CDATA[" texto que no será interpretado"]]> ― Cualquier elemento puede llevar un atributo especial que sirve para definir espacios de nombres. Sirve para poder tener diferentes vocabularios XML de diferentes fuentes. La forma es la siguiente <nombre_elemento xmlns=“URIdefecto” xmlns:n1=“URI1“ xmnls:n2=“URI2” …> ― Otros elementos que estén contenidos en aquel donde se definió un espacio de nombres, llevarán el nombre del espacio de nombres precediendo al elemento (<n1:nombre_elemento>), excepto el definido por defecto que no lleva nada Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 4 XML: Reglas de Nombres y de Convención ● ● Cualquier nombre de elemento XML debe seguir las siguientes reglas ― Los nombres no pueden contener espacios ― No pueden empezar con signos de puntuación ni con ciertas palabras reservadas ― Los valores de sus atributos deben ir o bien entre comillas simples o bien entre comillas dobles ― Son sensibles a las letras mayúsculas y minúsculas ― Ciertas convenciones en los nombres de elementos y atributos Se suelen indentar los diferentes elementos anidados a la hora de escribirse Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 5 XML: Ejemplo <?xml version="1.0"?> <alimentos xmlns=“http://www.it.uc3m.es/pedmume/a” xmlns:carne=“http://www.it.uc3m.es/pedmume/b” xmlns:legumbres=“http://www.it.uc3m.es/pedmume/c” xmlns:garbanzos=“http://www.it.uc3m.es/pedmume/d”> <carne id=“3”> La carne que vendemos es la siguiente: <carne:ternera> <carne:tipo> filete </carne:tipo> <preparacion> guisada </preparacion> </carne:ternera> </carne> <legumbres id=“7”> Las legumbres que vendemos son las siguientes: <legumbres:lentejas> <preparacion> guisada </preparacion> </legumbres:lentejas> <legumbres:garbanzos> <procedencia> <garbanzos:Casa_Mayor/></procedencia> <preparacion> guisada </preparacion> </legumbres:garbanzos> </legumbres> </alimentos > Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 6 XML como un Árbol ● Todo fichero XML puede ser visto como un árbol en el que cada elemento puede contener otros de una manera jerárquica ● Cualquier realidad se puede modelar como un árbol. Técnicas orientadas a objetos pueden facilitar la tarea ● Si definimos nodo XML como cualquier elemento, atributo o texto, entonces son nodos hoja los siguientes ― Todos los atributos porque no pueden contener nada más ellos mismos ― Todos los textos porque no pueden contener nada más ellos mismos ― Los elementos que no tienen otros elementos ni atributos ni texto contenidos en ellos Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 7 XML: Ejemplo de Árbol alimentos carne id legumbres Texto 1 Texto 2 carne:ternera carne:tipo Texto 3 id preparacion Texto 4 legumbres: garbanzos legumbres: lentejas preparacion Texto 5 preparacion garbanzos: procedencia Texto 6 garbanzos: CasaMayor Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 8 XML: Ejemplo de Utilidad de Datos <?xml version="1.0"?> <alimentos xmlns=“http://www.it.uc3m.es/pedmume/a” xmlns:carne=“http://www.it.uc3m.es/pedmume/b” xmlns:legumbres=http://www.it.uc3m.es/pedmume/c” xmlns:garbanzos=“http://www.it.uc3m.es/pedmume/d”> <carne id=“3”> La carne que vendemos es la siguiente: <carne:ternera> <carne:tipo> filete </carne:tipo> <preparacion> guisada </preparacion> </carne:ternera> </carne> <legumbres id=“7”> Las legumbres que vendemos son las siguientes: <legumbres:lentejas> <preparacion> guisada </preparacion> </legumbres:lentejas> <legumbres:garbanzos> <procedencia> <garbanzos:Casa_Mayor/></procedencia> <preparacion> guisada </preparacion> </legumbres:garbanzos> </legumbres> </alimentos > Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 9 XML: Ejemplo de Utilidad de Comportamiento <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="urn:Datos" xmlns=http://schemas.xmlsoap.org/wsdl/> <wsdl:message name="setResponse“> <wsdl:part name="setReturn" type="xsd:string"/> </wsdl:message> <wsdl:message name="setRequest"> <wsdl:part name="in0" type="xsd:string"/> <wsdl:part name="in1" type="xsd:string"/> <wsdl:part name="in2" type="xsd:string"/> </wsdl:message> <wsdl:portType name="Datos"> <wsdl:operation name="set" parameterOrder="in0 in1 in2"> <wsdl:input message="impl:setRequest" name="setRequest"/> <wsdl:output message="impl:setResponse" name="setResponse"/> </wsdl:operation> </wsdl:portType> …. …. </wsdl:definitions> Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 10 XML: Ejemplo de Utilidad de Protocolo: SOAP de respuesta <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <setResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <setReturn xsi:type="xsd:string">ok</setReturn> </setResponse> </soapenv:Body> </soapenv:Envelope> Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 11 XML: Comparación con Bases de Datos y HTML ● ● XML vs Bases de Datos ― Se puede representar lo mismo, de hecho hay bases de datos basadas en XML ― XML posibilita la interoperabilidad, el reuso, la compartición, el intercambio, etc. XML vs HTML ― XML no está orientado a la presentación de contenidos sólo a la estructura, mientras que HTML incluye cuestiones de presentación. XML contiene datos, HTML mezcla datos y presentación Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 12 XMLSchema: XSD ● ● Además de las reglas que un fichero XML debe cumplir por el hecho de ser XML, se pueden describir más reglas relativas a: ― Los tipos de datos que tendrán los elementos y los atributos ― Qué elementos puede contener otro elemento y qué combinaciones son posibles (orden, número, etc.) ― Si un nodo puede o no contener texto Este establecimiento de reglas adicionales se realizan mediante descripciones textuales, siendo metalenguajes que describen otros lenguajes ― DTD. Ficheros con extensión dtd ― XML Schema. Es XML también. Ficheros con extensión xsd Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 13 XMLSchema: Tipos de datos simples ● Números: ― ● Strings: ― ● xs:int, xs:integer, xs:decimal, xs:long, xs:short, xs:double, xs:float, xs:byte, etc. xs:string, xs:ID, xsd:IDREF, xsd:token, xsd:normalizedString, etc. Fechas: ― xs:date, xs:time, xs:datetime, xs:duration, etc. ● Booleanos: xs:boolean ● URIs: xs:anyURI Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 14 XMLSchema: Restricciones en los tipos de datos simples ● Los tipos de datos se pueden ajustar para concretar más cuales son los valores posibles del nuevo tipo de datos ● La manera de establecer restricciones en un tipoA <xs:simpleType name=“tiposimpleconrestricciones”> <xs:restriction base="xs:tipoA"> <!-- Por aquí se establecen las restricciones --> </xs:restriction> </xs:simpleType> ● Dentro de las etiquetas de restricción se pueden poner tantas etiquetas XSD de restricciones como se requieran ● El nuevo tipo definido se puede enlazar tanto para los elementos como los atributos Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 15 XMLSchema: Etiquetas de restricción ● xs:minInclusive, xs:minExclusive, xs:maxInclusive, xs:maxExclusive ● xs:length, xs:minlength, xs:totalDigits, xs:fractionDigits ● xs:enumeration ● xs:pattern ● xs:whiteSpace Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 16 XMLSchema: Tipos de Descripciones ● En el XMLSchema hay que describir: ― Atributos ― Elementos simples. No pueden contener ni atributos ni otros elementos. Sólo pueden contener texto ― Elementos complejos Elementos vacios. Sólo puede contener atributos Elementos que sólo pueden contener texto y atributos Elementos que sólo pueden contener otros elementos y atributos Elementos que pueden contener de todo: texto, atributos y otros elementos Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 17 XMLSchema: Descripción de atributos ● ● La manera básica es ― <xs:attribute name=“nombre" type=“tipo"/> ― El tipo puede ser por defecto o definido según restricciones Se pueden añadir atributos a la descripción de atributos ― default ― fixed ― use: puede ser ‘optional’ o ‘required’ que implica si es obligatorio o no el poner dicho atributo al elemento en cuestión. Por defecto es opcional si no se pone dicho parámetro Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 18 XMLSchema: Descripción de elementos simples ● ● La manera básica es ― <xs:element name=“nombre" type=“tiposimple"/> ― El tiposimple puede ser uno definido por defecto en la especificación o definido según restricciones Se pueden añadir atributos a la descripción de atributos ― default ― fixed Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 19 XMLSchema: Descripción de elementos vacios (con atributos) ● La manera básica es ― <xs:element name=“nombre" type=“idtipocomplejo"/> ― El idtipocomplejo enlaza a algo de la siguiente forma: <xs:complexType name=“idtipocomplejo"> <xs:attribute name=“nombre" type=“tiposimple"/> <!-- Por aquí tantos atributos como sean necesarios--> </xs:complexType> Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 20 XMLSchema: Descripción de elementos con texto y atributos ● La manera básica es ― <xs:element name=“nombre" type=“idtipocomplejo"/> ― El idtipocomplejo enlaza a algo de la siguiente forma: <xs:complexType name=“idtipocomplejo"> > <xs:simpleContent> <xs:extension base=“tiposimple"> .... <!-- Por aquí tantos atributos como sean necesarios--> .... </xs:restriction> </xs:simpleContent> </xs:complexType> ● El texto será del tiposimple definido Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 21 Descripción de elementos con otros elementos y atributos ● La manera básica es ― <xs:element name=“nombre" type=“idtipocomplejo"/> ― El idtipocomplejo enlaza a algo de la siguiente forma: <xs:complexType name=“idtipocomplejo"> <xs:attribute name=“nombre" type=“tiposimple"/> <!-- Por aquí tantos atributos como sean necesarios--> <xs:sequence> <!-- Por aquí tantos otros elementos como sean necesarios--> </xs:sequence> </xs:complexType> ● No solo puede ser xs:sequence, también xs:all, xs:choice ● Cada elemento contenido puede tener xs:minOccurs, xs:maxOccurs Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 22 Descripción de elementos con otros elementos, atributos y texto ● Es como en el caso anterior, pero se incluye el atributo mixed al elemento <xs:complexType> y se le asigna el valor de ‘true’ Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 23 Agrupaciones y Extensiones de elementos y atributos ● Un conjunto de elementos se pueden agrupar con <xs:group> y luego con el identificador del grupo se puede referenciar desde otro lado. El grupo deberá empezar con alguna etiqueta <xs:sequence>, <xs:all> o <xs:choice> ● Un conjunto de atributos se pueden agrupar con <xs:groupAttributes> y luego con el identificador del grupo se puede referenciar desde otro lado ● De manera análoga, <xs:any> sirve para extender una definición con cualquier elemento, mientras que <xs:anyAtributte> hace lo mismo para atributos Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 24 Ejemplo de XMLSchema a mejorar <?xml version="1.0" encoding="utf-16"?> <xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="alimentos" type="alimentosType" /> <xsd:complexType name="alimentosType"> <xsd:sequence> <xsd:element name="carne" type="carneType" /> <xsd:element name="legumbres" type="legumbresType" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="legumbresType"> <xsd:sequence> <xsd:element name="legumbres:lentejas" type="legumbres:lentejasType" /> <xsd:element name="legumbres:garbanzos" type="legumbres:garbanzosType" /> </xsd:sequence> <xsd:attribute name="id" type="xsd:int" /> </xsd:complexType> <xsd:complexType name="legumbres:garbanzosType"> <xsd:sequence> <xsd:element name="procedencia" type="procedenciaType" /> <xsd:element name="preparacion" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="procedenciaType"> <xsd:sequence> <xsd:element name="garbanzos:Casa_Mayor" type="xsd:string" /> Pedro J. Muñoz Merino </xsd:sequence> </xsd:complexType> <xsd:complexType name="legumbres:lentejasType"> <xsd:sequence> <xsd:element name="preparacion" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="carneType"> <xsd:sequence> <xsd:element name="carne:ternera" type="carne:terneraType" /> </xsd:sequence> <xsd:attribute name="id" type="xsd:int" /> </xsd:complexType> <xsd:complexType name="carne:terneraType"> <xsd:sequence> <xsd:element name="carne:tipo" type="xsd:string" /> <xsd:element name="preparacion" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:schema> Diseño de Aplicaciones Telemáticas 25 Ejercicios ● Mejorar el XMLSchema anterior para hacer algo más significativo y diferenciando los diferentes espacios de nombres ● Hacer un XMLSchema para almacenar la información de la aplicación de gestor de actividades deportivas explicada en la sesión de bases de datos Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 26 XSLT: Introducción ● XSLT: EXtensible Stylesheet Language ● Idea general ― XML: Almacena datos y estructura ― XML Schema: Da las reglas de cómo formar documentos XML ― XSLT: Sirve para transformar documentos XML en otros documentos, como puede ser otros documentos XML con otro XML Schema, HTML, etc. ― CSS vs XSLT ― XSLT utiliza XPath para navegar por los diferentes elementos y atributos de un documento XML Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 27 XSLT: Etiquetas de inicio y enlace desde fichero XML ● Se empieza con la siguiente línea en el fichero XSL ― <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> ● El stylesheet se puede reemplazar por transform ● Desde un fichero XML, se le indica el fichero XSL que será tenido en cuenta para realizar la transformación ― ● <?xml-stylesheet type="text/xsl" href=“nombrefichero.xsl"?> Es importante saber en cada momento en que nodo está el procesador en una transformación XSLT, en principio empezamos en el nodo raíz Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 28 XSLT: templates ● Define una plantilla que se aplicará a una serie de nodos para generar una determinada salida ● Sintaxis ― ● <xsl:template name= nombre1 match = patron priority = numero mode = nombre2> …. </xsl:template> Explicación de parámetros ― name es el nombre de la plantilla y se puede referenciar ― match es una expresión XPath que indica el nodo o nodos a los que se aplicará la plantilla, que serán todos los que cumplan el patrón ― priority es un número entre -9 y 9, si varias coincidencias, lo de menos prioridad no se aplican ― mode permite procesar un elemento varias veces Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 29 XSLT: Introducción a expresiones XPath ● Es un lenguaje para poner expresiones que permiten localizar nodos en un documento XML ● La selección de nodos es parecida a cómo poner rutas en un sistema de ficheros ● Algunos operadores importantes ― / ― // ― . ― .. ― @ Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 30 XSLT: value-of ● Imprime el valor de texto del nodo seleccionado ● Sintaxis ― ● <xsl:value-of select = patron disable-output-escaping = "yes" | "no“> … </xsl:value-of> Explicación de parámetros ― select. Obligatorio, tiene que ser una expresión XPath que indica el nodo a los que se aplicará el obtener el valor y mostrarlo. Si hay varios que lo cumplen, sólo se muestra el valor del primero de ellos ― Disable-output-escaping. Opcional. Por defecto vale “No”, pero si se indica como “Yes” entonces no se escapan los caracteres del atributo select Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 31 XSLT: for-each ● Selecciona una serie de nodos y realizará una pasada por el bucle por cada nodo, representando en cada pasada uno de dichos nodos seleccionados ● Sintaxis ― ● <xsl:for-each select = patron> … </xsl:for-each> Explicación de parámetros ― select. Obligatorio, tiene que ser una expresión XPath que indica los nodos que va a recorrer. Por cada nodo seleccionado, se realizará una pasada por el bucle con su valor Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 32 XSLT: apply-templates ● Enlaza con la template que se debe aplicar para un conjunto de nodos ● Sintaxis ― ● <xsl:apply-templates select = patron mode = nombre> … </xsl:apply-templates> Explicación de parámetros ― select. Opcional, tiene que ser una expresión XPath que indica los nodos a los que se va a aplicar el patrón. Por cada nodo seleccionado, se irá al patrón correspondiente indicado ― mode. Opcional, permite que se pueda procesar varias veces un elemento Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 33 XSLT: sort ● Ordena la lista de nodos desordenada obtenida por foreach o apply-templates ● Sintaxis ― ● <xsl:sort select = patron lang = { string } data-type = { "text" | "number" | nombre } order = { "ascending" | "descending" } caseorder = { "upper-first" | "lower-first" } /> Explicación de parámetros más importantes ― select. Opcional, tiene que ser una expresión XPath que indica en base a que nodos se va a proceder a realizar la ordenación Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 34 XSLT: if ● Realiza un cierto procesado si se cumple una determinada condición ● Sintaxis ― ● <xsl:if test = boolean-expression> … </xsl:if> Explicación de parámetros más importantes ― Test. Obligatorio, se pone una expresión de la que se valida su certeza o falsedad. Si es cierta, entonces se realiza el procesado adecuado. Algo se considera cierto cuando existe al menos un nodo que cumple la expresión Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 35 XSLT: choose, when, otherwise ● Realiza un cierto procesado si se cumple una determinada condición ● Sintaxis ― ● <xsl:choose> <xsl:when test="expression"> ... some output ... </xsl:when> <xsl:otherwise> ... some output .... </xsl:otherwise> </xsl:choose> Se realiza aquel procesado tal que cumpla la condición, si hay varios se realiza el primero de ellos. Si no se cumple ninguno, se hará el de otherwise Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 36 XSLT: text ● Genera un nodo de texto ● Sintaxis ― <xsl:text disable-output-escaping = "yes" | "no"> </xsl:text> Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 37 XSLT: Ejemplo <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <!--Generate the initial RDF headers--> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <!--Generate the different annotations of subject for each different resource--> <!--For every resource--> <xsl:for-each select="loms/results/lom"> <!--Write the description of a resource with some identifier given by the entry--> <xsl:text disable-output-escaping="yes">&lt;rdf:Description rdf:about="</xsl:text> <xsl:value-of select="general/identifier/entry"/> <xsl:text disable-output-escaping="yes">"&gt;</xsl:text> Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 38 XSLT: Ejemplo (continuación) <!--For every subject given by the keyword--> <xsl:for-each select="general/keyword/string"> <xsl:if test="@language = 'en'"> <dc:subject rdf:datatype="http://www.w3.org/2001/XMLSchema#string"> <xsl:value-of select="."/> </dc:subject> </xsl:if> </xsl:for-each> <!--For every subject given by the purpose--> <!-- <xsl:for-each select="classification/purpose/value"> <dc:subject rdf:datatype="http://www.w3.org/2001/XMLSchema#string"> <xsl:value-of select="."/> </dc:subject> </xsl:for-each> --> <!--For the title--> <xsl:for-each select="general/title/string"> <xsl:if test="@language = 'en'"> <dc:title rdf:datatype="http://www.w3.org/2001/XMLSchema#string"> <xsl:value-of select="."/> </dc:title> </xsl:if> </xsl:for-each> <xsl:text disable-output-escaping="yes">&lt;/rdf:Description&gt;</xsl:text> </xsl:for-each> </rdf:RDF> </xsl:template> </xsl:stylesheet> Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 39 Trabajo propio del alumno asociado a la sesión ● Tutorial de XML (básico, avanzado, ejemplos): http://www.w3schools.com/xml/default.asp ● Tutorial de XML Schema (tutorial de esquema, tipos simples, tipos complejos, tipos de datos, referencias de esquema): http://www.w3schools.com/schema/default.asp ● Tutorial de XSLT (básico, avanzado, ejemplos, referencias); http://www.w3schools.com/xsl/default.asp ● Tutorial de Xpath: http://www.w3schools.com/XPath/default.asp Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 40 Referencias Extra ● XML por el W3C, http://www.w3.org/TR/2008/REC-xml20081126/ ● XML Schema por el W3C, http://www.w3.org/XML/Schema ● XSLT por el W3C, http://www.w3.org/TR/xslt ● XPath por el W3C, http://www.w3.org/TR/xpath/ ● A. Skonnard, M. Gudgin, “Essential XML Quick Reference: A Programmer's Reference to XML, XPath, XSLT, XML Schema, SOAP, and More” http://www.theserverside.net/books/addisonwesley/Essen tialXML/downloads/EssentialXML.zip Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 41