Beruflich Dokumente
Kultur Dokumente
LAS TECNOLOGÍAS
XML Y SUS
APLICACIONES
1 de 76
Las Tecnologías XML y sus aplicaciones
INDICE
INDICE ............................................................................................................... 2
Capitulo 1: ¿Qué es XML?. ................................................................................ 4
1.1. Introducción. ........................................................................................ 4
1.2. Origen de XML. .................................................................................... 4
1.3. Características generales de XML. ...................................................... 4
1.4. Estructura del estándar XML................................................................ 5
1.5. Uso de XML. ........................................................................................ 5
Capítulo 2: Estructura y sintaxis de XML............................................................ 6
2.1. Estructura de los documentos XML. .................................................... 6
2.1.1. Documentos XML bien formados.................................................. 6
2.1.2. Documentos XML validos. ............................................................ 7
2.2. Sintaxis XML. ....................................................................................... 7
2.2.1. Cabecera XML. ............................................................................. 7
2.2.2. Comentarios.................................................................................. 8
2.2.3. Elementos. .................................................................................... 8
2.2.3.1. Elementos sin atributos con datos. ........................................ 9
2.2.3.2. Elementos con atributos y datos............................................ 9
2.2.3.3. Elementos con atributos sin datos. ........................................ 9
2.2.3.4. Elementos vacíos. ............................................................... 10
2.2.4. Atributos...................................................................................... 10
2.2.5. Entidades. ................................................................................... 10
2.2.6. Primer ejemplo............................................................................ 11
Capítulo 3: Restricciones sobre los documentos XML. .................................... 12
3.1. Introducción. ...................................................................................... 12
3.2. DTD.................................................................................................... 12
3.2.1. Introducción y concepto. ............................................................. 12
3.2.2. Sintaxis DTD. .............................................................................. 12
3.2.2.1. Elementos............................................................................ 12
3.2.2.2. Atributos............................................................................... 15
3.2.2.3. Entidades............................................................................. 16
3.2.2.4. Relación entre DTD y XML. ................................................. 16
3.2.2.5. Ejemplos. ............................................................................. 17
3.3. XML Schema. .................................................................................... 20
3.3.1. Introducción y concepto. ............................................................. 20
3.3.2. Sintaxis XML Schema................................................................. 21
3.3.2.1. Tipos de datos ..................................................................... 21
3.3.2.2. Ejemplo................................................................................ 26
Capítulo 4: XML Namespaces.......................................................................... 29
Capítulo 5: XSL ................................................................................................ 31
5.1. Introducción ....................................................................................... 31
5.2. XSLT .................................................................................................. 31
5.2.1. Introducción y concepto. ............................................................. 31
5.2.2. Sintaxis. ...................................................................................... 31
5.2.2.1. Estructura básica. ................................................................ 32
5.2.2.2. Etiquetas.............................................................................. 32
5.2.2.3. Ejemplos. ............................................................................. 34
5.3. XPath ................................................................................................. 41
2 de 76
Las Tecnologías XML y sus aplicaciones
3 de 76
Las Tecnologías XML y sus aplicaciones
XML es de vital importancia para los Webservices, una de las tecnologías más pujantes
actualmente, ya que muchos de los estándares involucrados en la implementación y el uso de
éstos están basados en tecnologías XML (tales como WSDL, WSIL o SOAP).
En 1986, ISO comenzó los trabajos de normalización de GML, creando SGML, que es
un estándar sobre cómo especificar un lenguaje de marcas. Es lo que se conoce como
metalenguaje.
Como derivado de SGML, surgió en 1989 el lenguaje HTML, utilizado para la creación
de páginas Web. Y a partir de 1996, el W3C, comenzó el desarrollo de XML, en el que aún
continúa.
Llamaremos marca, etiqueta o tag a un elemento encerrado entre los elementos menor
que y mayor que (< y >).
4 de 76
Aplicación SGML
Las Tecnologías XML y sus aplicaciones HTML
SGML
5 de 76
Las Tecnologías XML y sus aplicaciones
Según la especificación de XML del W3C, un documento XML está bien formado si:
• Tomado como un todo, cumple la regla denominada "document". Lo que significa que:
• Que contiene uno o más elementos.
• Hay exactamente un elemento, llamado raíz, o elemento documento, del cual
ninguna parte aparece en el contenido de ningún otro elemento.
• Para el resto de elementos, si la etiqueta de comienzo está en el contenido de
algún otro elemento, la etiqueta de fin está en el contenido del mismo elemento. Es
decir, los elementos delimitados por etiquetas de principio y final se anidan
adecuadamente mutuamente.
• Respeta todas las restricciones de buena formación dadas en la especificación.
• Cada una de las entidades analizadas que se referencia directa o indirectamente en el
documento está bien formada.
6 de 76
Las Tecnologías XML y sus aplicaciones
Una DTD puede residir en un fichero externo, y quizás compartido por varios (puede
que miles) de documentos. O bien, puede estar contenido en el propio documento XML, como
parte de su declaración de tipo de documento.
• Documentos XML bien formados. Son aquellos que respetan la sintaxis del XML.
• Documentos XML validos. Son aquellos que además de bien formados se ajustan a
la DTD que define su estructura.
7 de 76
Las Tecnologías XML y sus aplicaciones
Declaración de Tipo de Documento: Puede ser externa o interna. Si forma parte del
documento XML se denomina interna, y si esta en un archivo independiente, para que pueda
ser reutilizada en otros documentos XML, se denomina externa..
Las DTD externas pueden ser privadas o públicas, siendo las primeras solo accesibles
localmente y las segundas accesibles mediante una URI.
Si la DTD es externa, las declaraciones pueden ser SYSTEM (indica que el archivo
externo esta en el ordenador local) o PUBLIC (indica que el fichero esta disponible en un
servidor Web público).
2.2.2. Comentarios.
Como el resto de lenguajes, XML permite que se inserten comentarios, de manera que
se pueda aclarar la codificación. Los comentarios en XML tienen la misma estructura que en
HTML:
2.2.3. Elementos.
Los elementos son los principales componentes del contenido del documento. Pueden
contener texto u otros elementos, denominando elemento padre a aquel que contiene otros
elementos, y elementos hijos a los contenidos.
8 de 76
Las Tecnologías XML y sus aplicaciones
<elemento1>Uno</elemento1>
<elemento1>
<subelemento1>Uno</subelemento1>
</elemento1>
<etiqueta1>Valor</etiqueta1>
Equivaldría a asignar:
etiqueta1 = Valor.
Un ejemplo será:
<elemento1 atributo=”valor”>Datos</elemento1>
9 de 76
Las Tecnologías XML y sus aplicaciones
<elemento1></elemento1>
<elemento1/>
Este modo abreviado permite indicar el comienzo y cierre del elemento con una sola
marca, que representa a ambos, con lo que cumple la normativa XML.
2.2.4. Atributos.
Como se ha comentado anteriormente, los atributos son modificadores que se añaden
a los elementos, a los que añaden información adicional.
Los elementos pueden contener uno o varios atributos, pero cada elemento solo puede
contener un mismo atributo una única vez, de lo contrario sería un documento XML “no bien
formado”, como se vio en el capitulo anterior.
<elemento1 atributo=”valor”>Datos</elemento1>
2.2.5. Entidades.
Las entidades son unidades de almacenamiento, que pueden contener desde un
carácter hasta el nombre de un fichero que se quiera incluir en el XML.
&entidad;
Suelen usarse para reemplazar una cadena que aparece muchas veces en el
documento, de forma similar a como se usan las constantes en otros lenguajes.
Las entidades pueden ser de dos tipos: definibles (si las define el programador) y
predefinidas (que son aquellas definidas de antemano y que permiten mostrar los caracteres
reservados, tales como < o >).
<elemento1>&entidad;</elemento1>
10 de 76
Las Tecnologías XML y sus aplicaciones
11 de 76
Las Tecnologías XML y sus aplicaciones
Existen varios lenguajes para definir este tipo de documentos, pero los más usados son
los DTD y los XML Schema, que son los que se describirán a continuación
3.2. DTD.
El DTD tiene una sintaxis distinta a la de XML, muy sencilla, ya que esta basada en
SGML, sin embargo es un lenguaje menos flexible que XML Schema, y su uso no esta
permitido en muchas aplicaciones (como es el caso de SOAP), sin embargo su estudio puede
facilitar la comprensión de los esquemas XML.
• Elementos.
• Atributos.
• Entidades.
3.2.2.1. Elementos
La declaración de un elemento en una DTD define las características que tendrá una
etiqueta XML. Su sintaxis es:
12 de 76
Las Tecnologías XML y sus aplicaciones
<nombreElemento/>
Elementos conteniendo datos: Definen etiquetas que contienen datos. Estos datos
pueden ser de dos tipos: #PCDATA (Si los datos pueden ser analizados) o #CDATA (Si los
datos no pueden ser analizados), o ambos con ANY.
<nombreElemento>Valor</nombreElemento>
Su sintaxis es:
Cuando se realiza una declaración como esta, en la que se tiene varios elementos hijos
separados por comas, a continuación hay que declarar estos en el mismo orden.
Los elementos hijos pueden ser a su vez elementos padres de otros elementos, lo cual
habrá que definir en la DTD.
<nombre_completo>
<nombre>Antonio</nombre>
<apellido1>Lopez</apellido1>
<apellido2>Perez</apellido2>
</nombre_completo>
13 de 76
Las Tecnologías XML y sus aplicaciones
<elemento1>
<subelemento1>Valor</subelemento1>
</elemento1>
O también:
<elemento1/>
+: Indica El elemento aparece una o más veces, pero al menos una vez. Un ejemplo:
<elemento>
<subelemento>Valor</subelemento>
</elemento>
O también:
<elemento>
<subelemento>Valor1</subelemento>
<subelemento>Valor2</subelemento>
<subelemento>Valor3</subelemento>
</elemento>
<elemento/>
*: Indica que el elemento aparece ninguna, una o más veces. Un ejemplo podría ser:
<elemento>
<subelemento>Valor</subelemento>
</elemento>
O también:
<elemento>
<subelemento>Valor1</subelemento>
<subelemento>Valor2</subelemento>
<subelemento>Valor3</subelemento>
</elemento>
E incluso:
<elemento></elemento>
|: Este modificador se usa para indicar una operación O (OR),es decir que aparece el
elemento de la derecha, o el de la izquierda, pero no los dos.
14 de 76
Las Tecnologías XML y sus aplicaciones
<elemento>
<subelemento1>Valor</subelemento2>
</elemento>
O también:
<elemento>
<subelemento2>Valor</subelemento2>
</elemento>
<elemento>
<subelemento1>Valor</ subelemento1>
<subelemento2>Valor</subelemento2>
</elemento>
Es posible usar combinaciones entre estos modificadores para conseguir los elementos
que se necesite.
En este caso, por cada elemento, solo podría aparecer un sub1, uno o ningún sub2,
uno o más sub3 y uno, muchos o ningún sub4.
También es posible aplicar estos modificadores a listas de varios elementos como por
ejemplo:
De manera que por cada libro puede haber uno o más autor, capitulo y pagina.
3.2.2.2. Atributos
Los atributos son modificadores de los elementos que complementan la información
que estos proporcionan.
Su sintaxis es:
Donde:
15 de 76
Las Tecnologías XML y sus aplicaciones
3.2.2.3. Entidades
Se utilizan para abreviar textos a la hora de escribir el XML.
Las entidades son referenciadas con &nombreEntidad, y con ellas podemos referenciar
caracteres extraños (ñ) o frases largas que se repiten mucho.
Su sintaxis es:
Y su uso:
<curso>&titulo;</curso>
• Dentro del documento XML, al principio de este, tras la cabecera XML, con una
declaración de tipo de documento:
<!DOCTYPE elementoRaiz [
<!-- Aquí se incluyen el resto de declaraciones -->
]>
16 de 76
Las Tecnologías XML y sus aplicaciones
3.2.2.5. Ejemplos.
Se quiere diseñar un modelo para que los funcionarios propongan preguntas para los
exámenes de oposición, cada pregunta debe incluir el autor, indicando el cuerpo, sus datos
personales, su teléfono y su email, y también la pregunta, con su enunciado, su respuesta
correcta, cinco señuelos y la justificación de la respuesta.
Vamos a diseñar primero el modelo del objeto documento que debe seguir este
documento, tras lo cual generaremos la DTD, y por ultimo mostraremos un ejemplo del citado
documento.
Pregunta_Candidata
Señuelo1
Autor Pregunta
Señuelo5
17 de 76
Las Tecnologías XML y sus aplicaciones
<pregunta_candidata>
<autor>
<cuerpo>Superior de Sistemas y Tecnología de la
Información</cuerpo>
<nombre>Luis</nombre>
<apellido1>Perez</apellido1>
<apellido2>Sala</apellido2>
<telefono numero= "91999999"/>
<mail direccion="luisperezsala@map.es"/>
</autor>
<pregunta>
<enunciado>¿En que puerto opera el protocolo
LDAP?</enunciado>
<respuesta>En el puerto 389</respuesta>
<senyuelo> En el puerto 300</senyuelo>
<senyuelo> En el puerto 395</senyuelo>
<senyuelo> En el puerto 24</senyuelo>
<senyuelo> En el puerto 46</senyuelo>
<senyuelo> En el puerto 89</senyuelo>
<justificacion>Este es el puerto registrado por la
ICANN para el protocolo LDAP</justificacion>
</pregunta>
</pregunta_candidata>
Otro ejemplo podría ser el modelado de un sistema para otorgar citas a personas
físicas o jurídicas, indicando la fecha y quien les atenderá.
18 de 76
Las Tecnologías XML y sus aplicaciones
RESPUESTA
Apellido1 Apellido2
Nombre
19 de 76
Las Tecnologías XML y sus aplicaciones
<nombre>Jose Lopez</nombre>
<ubicacion>Despacho 670</ubicacion>
</asesor>
<asesor telefono="987987987">
<nombre>Luis Martinez</nombre>
<ubicacion>Despacho 350</ubicacion>
</asesor>
</respuesta>
Y también:
• DTD tiene una sintaxis distinta a la de XML, lo que provoca problemas a la hora del
aprendizaje.
• DTD tiene un tipado de datos extremadamente limitado.
• DTD no permite un control estricto del número de ocurrencias
20 de 76
Las Tecnologías XML y sus aplicaciones
evita la necesidad de utilizar un nuevo lenguaje con su sintaxis particular, a costa de ser un
poco más complicado que DTD.
XML Schema.xsd
Fichero.xsd
Fichero.xml
Tipos de datos simples: Los datos simples pueden ser de múltiples categorías:
Además a los datos simples que vienen definidos, se les pueden hacer restricciones,
para adaptarlos a cada necesidad, haciendo uso de la etiqueta <restriction>
21 de 76
Las Tecnologías XML y sus aplicaciones
<sympleType name=”dorsal>
<restriction base=”integer”>
<minInclusive value=”1”>
<maxExclusive=”12”>
</restriction>
</sympleType>
Donde hemos definido el tipo dorsal, con base entera, y con valores comprendidos
entre el 1 y el 12 ambos inclusive.
Otra restricción son los patrones o patterns, que se usan con cadenas de texto y
permiten dejar claramente identificada su morfología. La sintaxis que permite definir patrones
es:
<pattern value=”patron”>
Podemos ver un ejemplo usando el código INE de una población, que se compone de
provincia (dos caracteres), municipio (tres caracteres), código de entidad colectiva (dos
caracteres), código de entidad singular (dos caracteres) y núcleo (dos caracteres), para un total
de 11, con lo que el esquema para este tipo de dato sería:
<simpleType name=”cod_INE”>
<restriction base=”string”>
<pattern value=”\d{2}-\d{3}-\d{2}-\d{2}-\d{2}”/>
</restriction>
</simpleType>
Otro patrón sería la definición de un ISBN, en el cual los dos primeros caracteres son
84, seguidos de un espacio, un dígito, y luego una secuencia de 6 caracteres que pueden ser
un dígito decimal o un espacio. Tras esta secuencia se espera un dígito decimal, un espacio, y
se termina con un dígito o una “x”:
<simpleType name=”ISBN”>
<restriction base=”string”>
<pattern value=”84\s\d{1}\d([0-9]|\s){6}\d{1}\s[0-
9|x]”/>
</restriction>
</simpleType>
Los datos simples se pueden agrupar en Listas, que son colecciones de datos
semejantes a los arrays, en las que se indica, si se desea, su tipo base y su longitud.
22 de 76
Las Tecnologías XML y sus aplicaciones
<list base=”tipoBase”/>
<length value=”longitud”/>
También se pueden enumerar los valores que compondrán la lista, con la siguiente
sintaxis:
<enumeration value=”valor”/>
Por ejemplo, podemos definir una lista de cadenas de caracteres, de longitud dos, y
con los valores prefijados:
<simpleType name=”lista”>
<list base=”string/>
<length value=”2”/>
<enumeration value=”uno”/>
<enumeration value=”dos”/>
</simpleType>
Tipos de datos complejos: Los tipos de datos complejos nos permiten definir nuevos
tipos de datos a partir de los tipos de datos simples.
<complexType name=”nombre”>
<!-- Definicion de elementos -->
<!-- Definicion de atributos -->
</complexType>
<complexType name=”nombre”>
<sequence>
<!-- Definicion de elementos -->
</sequence>
<!-- Definicion de atributos -->
</complexType>
Donde name indica el nombre del atributo, type, el tipo del mismo, y use, como usarlo,
pudiendo tomar los siguientes valores:
23 de 76
Las Tecnologías XML y sus aplicaciones
Podemos ver un ejemplo en la definición del tipo complejo lista, que consta de dos
elementos, que deben aparecer como mínimo una vez y como máximo dos, y un atributo
obligatorio de tipo entero:
<complexType name=”lista”>
<sequence>
<element name=”uno” type=”string” minOccurs=”1”
maxOccurs=”2”/>
<element name=”dos” type=”string” minOccurs=”1”
maxOccurs=”2”/>
</sequence>
<attribute name=”atributo” type=”integer” use=”required”/>
</complexType>
Que se usará:
<element name=”nombre”>
<complexType>
<sequence>
<!-- Definicion de elementos -->
</sequence>
<!-- Definicion de atributos -->
</complexType>
</element>
Si se dispone de un conjunto de atributos que van a ser usados por varios elementos,
se pueden definir Grupos de atributos. Su sintaxis es:
<attributeGroup name=”grupo”>
<attribute name=”atributo1” type=”string”/>
<attribute name=”atributo2” type=”string”/>
<attribute name=”atributo3” type=”string”/>
</attributeGroup>
24 de 76
Las Tecnologías XML y sus aplicaciones
<element name=”nombre”>
<complexType>
<sequence>
<element name=”uno” type=”string” />
<element name=”dos” type=”string” />
</sequence>
<attribute ref=”grupo”/>
</complexType>
</element>
Mediante la etiqueta <all>, se obliga a incluir una serie de elementos aunque no sea
en orden. Su uso
<complexType name=”lista”>
<all>
<element name=”uno” type=”string” />
<element name=”dos” type=”string” />
</all>
</complexType>
<complexType name=”lista”>
<sequence>
<choice>
<element name=”uno” type=”string” />
<element name=”dos” type=”string” />
</choice>
<element name=”tres” type=”string” />
</sequence>
</complexType>
O bien:
XML Schema incluye algo similar a la herencia, de manera que se puede generar un
objeto con características básicas y luego extenderlo para obtener el objeto deseado. Para ello
se hace uso de la etiqueta:
25 de 76
Las Tecnologías XML y sus aplicaciones
Podemos ver un ejemplo si creamos un tipo vehículo y después dos tipos, motocicleta y
coche, que lo extiendan:
<complexType name=”vehiculo”>
<sequence>
<element name=”nruedas” type=”integer”/>
<element name=”caballos” type=”integer”/>
<element name=”marca” type=”string”/>
</sequence>
<attribute name=”dueño” type=”string” use=”optional”/>
</complexType>
<complexType name=”motocicleta”>
<complexContent>
<extension base=”vehiculo”>
<element name=”cilindrada” type=”decimal”/>
</extension>
</complexContent>
</complexType>
<complexType name=”coche”>
<complexContent>
<extension base=”vehiculo”>
<element name=”numPuertas” type=”integer”/>
</extension>
</complexContent>
</complexType>
<schema>
<!-- Declaración de elementos -->
</schema>
La relación entre los XML Schema y los documentos XML se hace mediante espacios
de nombres o namespaces, que se explicarán en el capitulo siguiente.
3.3.2.2. Ejemplo.
El ejemplo del apartado anterior, haciendo uso de XML Schema sería:
26 de 76
Las Tecnologías XML y sus aplicaciones
<xs:element name="telefono">
<xs:attribute name="numero" type="xs:string"
use="required"/>
</xs:element>
<xs:element name="email">
<xs:attribute name="direccion" type="xs:string"
use="required"/>
</xs:element>
<xs:element name="autor">
<xs:complexType>
<xs:sequence>
<xs:element ref="cuerpo"/>
<xs:element ref="nombre"/>
<xs:element ref="apellido1"/>
<xs:element ref="apellido2"/>
<xs:element ref="telefono"/>
<xs:element ref="email"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="pregunta">
<xs:complexType>
<xs:sequence>
<xs:element ref="enunciado"/>
<xs:element ref="respuesta"/>
<xs:element ref="senyuelo"/>
<xs:element ref="justificacion"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="pregunta_candidata">
<xs:complexType>
<xs:sequence>
<xs:element ref="autor"/>
<xs:element ref="pregunta"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
27 de 76
Las Tecnologías XML y sus aplicaciones
</xsi:autor>
<xsi:pregunta>
<xsi:enunciado>¿En que puerto opera el protocolo
LDAP?</xsi:enunciado>
<xsi:respuesta>En el puerto 389</xsi:respuesta>
<xsi:senyuelo> En el puerto 300</xsi:senyuelo>
<xsi:senyuelo> En el puerto 395</xsi:senyuelo>
<xsi:senyuelo> En el puerto 24</xsi:senyuelo>
<xsi:senyuelo> En el puerto 46</xsi:senyuelo>
<xsi:senyuelo> En el puerto 89</xsi:senyuelo>
<xsi:justificacion>Este es el puerto registrado por
la ICANN para el protocolo LDAP</xsi:justificacion>
</xsi:pregunta>
</xsi:pregunta_candidata>
28 de 76
Las Tecnologías XML y sus aplicaciones
Es decir, que si se están utilizando dos DTD diferentes para validar un mismo
documento XML, es posible que se hayan diseñado etiquetas con el mismo nombre en cada
una de las DTD, lo que provocaría un error al analizar el documento, pues el analizador no
sabría a que DTD corresponde la citada etiqueta, una posible solución sería el modificar el
nombre de una de ellas para evitar la colisión, pero eso redundaría en contra de la flexibilidad
propia de XML, ya que estaríamos limitando la elección de nombres de etiquetas, la solución
para evitar las colisiones de nombres y no eliminar la flexibilidad en el etiquetado es el uso de
espacios de nombres o namespaces
Los XML Schema se añaden a los documentos XML como namespaces. Pero esta
dependerá de la ubicación del documento de validación.
<elemento_raiz xmlns:xs="http://www.w3.org/2001/XMLSchema-
instance" xs:schemaLocation="URL file:agenda.xsd">
Indicando en el elemento raíz cual va a ser el prefijo que se va a utilizar para identificar
el esquema (en este caso, xs), y cual es la localización del documento XML que contiene la
definición del esquema.
Podemos ver un ejemplo, imaginando que existen dos DTD que definen, la primera una
clasificación por edades y la otra una clasificación cultural, y que ambas incluyen la etiqueta
clasificación:
29 de 76
Las Tecnologías XML y sus aplicaciones
<elemento_raiz xmlns:xs="http://www.w3.org/2001/XMLSchema-
instance"
xs:noNamespaceSchemaLocation="file:nombre.xsd">
30 de 76
Las Tecnologías XML y sus aplicaciones
Capítulo 5: XSL
5.1. Introducción
El XSL (eXtensible Stylesheet Language – Lenguaje Extensible de Hojas de Estilo) es
un lenguaje para crear hojas de estilo adaptadas al XML
5.2. XSLT
5.2.1. Introducción y concepto.
XSLT es un lenguaje para transformar documentos XML en otros documentos XML,
puede convertir un XML que obedezca a un DTD en otro que obedezca a otro diferente, o, lo
más habitual, transformarlo a “formatos finales”, tales como WML o HTML.
XSLT hace uso de XPath para definir las partes del documento fuente que coinciden
con uno o varios de los templates predefinidos. Cuando se encuentra una coincidencia, XSLT
transformará la parte coincidente del documento fuente en el documento resultante. Las partes
del documento original que no coincidan con un template, quedarán sin modificar en el
documento final.
XSLT no es completamente soportado por todos los navegadores (por ejemplo Internet
Explorer 5.0 y Netscape 6 no lo soportan 100%, pero Internet Explorer 6.0 si lo hace, ya que
incluye MSXML Parser 3.0 y también lo hace Netscape 7).
• La salida no tiene por que ser HTML, puede estar en muchos formatos.
• Permite manipular de diversas formas un documento XML.
• Permite acceder a todo el documento XML, no solo a los contenidos.
• XSLT es un lenguaje XML.
Y como inconvenientes:
• Su uso es complejo.
• Consume cierta capacidad de memoria y proceso.
5.2.2. Sintaxis.
31 de 76
Las Tecnologías XML y sus aplicaciones
El prologo contiene la cabecera XML que indica la versión y el tipo de codificación que
se ha utilizado:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Para que un documento XML haga referencia a una hoja de estilo determinada se ha
de incluir en él, tras la cabecera XML la instrucción de procesamiento necesaria para añadir
una referencia a la hoja de estilos, de la siguiente manera:
5.2.2.2. Etiquetas.
En esta sección vamos a describir algunas de las etiquetas más importantes de XSLT.
Una hoja de estilos XSL consiste en un conjunto de reglas llamadas templates, que se
definen utilizando la etiqueta <xsl:template>, y en cada uno de ellos se especifica las
reglas que se van a aplicar cuando se encuentre un nodo coincidente:
El atributo name es el nombre asociado a la etiqueta, el atributo match indica los nodos
afectados por el template, pudiendo incluir todo el árbol usando match=”/”.
32 de 76
Las Tecnologías XML y sus aplicaciones
El atributo select procesará solo los elementos hijo que coincidan con el valor del
atributo. Se suele usar para especificar el orden en que se tratan los elementos
<xsl:value-of select=”expresion”/>
El atributo select de este nodo puede contener una expresión XPath, similar a un
sistema de ficheros, por el que navegar utilizando / para acceder a los distintos nodos.
<xsl:for-each select=”conjuntoNodos”>
</xsl:for-each>
Su atributo select contiene también una expresión XPath. Se puede filtrar la salida
que se obtiene utilizando este elemento añadiendo criterios de selección, que según la sintaxis
XPath van entre corchetes:
<xsl:for-each select="/ruta[condicion]">
• = (igual)
• != (distinto)
• < menor que
• > mayor que
El elemento sort (<xsl:sort>) se usa para ordenar la salida, para lo que se añade
esta etiqueta dentro del elemento for-each:
<xsl:for-each select="ruta">
<xsl:sort select="que_ordenar"
order=”ascending|descending”/>
</xsl:for-each>
Donde el atributo select especifica que ordenar y el atributo order cómo ordenarlo.
<xsl:if test="condicion”>
...
</xsl:if>
<xsl:choose>
<xsl:when test="condicion">
...
</xsl:when>
33 de 76
Las Tecnologías XML y sus aplicaciones
<xsl:otherwise>
....
</xsl:otherwise>
</xsl:choose>
Donde se evalúa la condición incluida en el atributo test para ver si aplicar lo que esta
contenido en el when (si se cumple) o en el otherwise (si no se cumple). Se pueden
combinar muchos when, para verificar el cumplimiento de varias condiciones dentro de un
mismo choose.
<xsl:element name=”element-name”>
...
</xsl:element>
<xsl:attribute name=”attribute-name”>
...
</xsl:attribute>
Además, en XSLT podemos definir variables y constantes, que nos pueden ser útiles a
la hora de la programación, lo cual se hace mediante la etiqueta variable.
<xsl:variable name=”Variable-name”>
Valor
</xsl:variable>
Lo que es equivalente a:
Variable-name = Valor
5.2.2.3. Ejemplos.
Vamos a exponer algunos ejemplos del uso de las etiquetas especificadas, para su
mejor comprensión:
34 de 76
Las Tecnologías XML y sus aplicaciones
</raiz>
A continuación podemos ver algunos ejemplos del uso de las etiquetas antes
definidas:
<xsl:template match="cd">
<xsl:choose>
<xsl:when test="especif/@type='Directo'">
<h1>
<xsl:apply-templates select="*"/>
</h1>
</xsl:when>
<xsl:when test="especif/@type='Estudio'">
<h2>
<xsl:apply-templates select="*"/>
</h2>
</xsl:when>
<xsl:otherwise>
<h3>
35 de 76
Las Tecnologías XML y sus aplicaciones
<xsl:apply-templates select="*"/>
</h3>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="autor">
<b>Autor: <xsl:value-of select="."/></b>,
</xsl:template>
<xsl:template match="titulo">
Disco: <xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
<xsl:template match="cd">
<xsl:if test="especif[@type='Directo']">
Disco en Directo
<br/>
<xsl:apply-templates select="*"/>
</xsl:if>
<xsl:if test="especif[@type='Estudio']">
Disco en Estudio
<br/>
<xsl:apply-templates select="*"/>
</xsl:if>
</xsl:template>
<xsl:template match="autor">
<b>Autor: <xsl:value-of select="."/></b>,
</xsl:template>
<xsl:template match="titulo">
Disco: <xsl:value-of select="."/><hr/>
</xsl:template>
</xsl:stylesheet>
36 de 76
Las Tecnologías XML y sus aplicaciones
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<title>
<xsl:value-of select="lista/@titulo"/>
</title>
<body>
<center><h3><xsl:value-of
select="lista/@titulo"/></h3></center>
<hr/>
<br/>
<center>
<table border="1">
<tr>
<td>Autor</td>
<td>Album</td>
<td>Tipo</td>
</tr>
<xsl:for-each
select="lista/cd">
<xsl:apply-templates
select="."/>
</xsl:for-each>
</table>
</center>
</body>
</html>
</xsl:template>
<xsl:template match="cd">
<tr>
<xsl:apply-templates select="*"/>
</tr>
</xsl:template>
<xsl:template match="autor">
<td>
<b><xsl:value-of select="."/></b>
</td>
</xsl:template>
<xsl:template match="titulo">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="especif">
<td>
<xsl:value-of select="@type"/>
</td>
</xsl:template>
</xsl:stylesheet>
Vamos a realizar un ejemplo en el cual haciendo uso del parser Xalan y una hoja de
estilo XSL, se va a transformar un documento XML que sigue una determinada DTD en un
documento XML que sigue una DTD diferente.
37 de 76
Las Tecnologías XML y sus aplicaciones
Y el documento XML:
<xsl:template match="/">
<xsl:apply-templates select="respuesta"/>
</xsl:template>
<xsl:template match="respuesta">
<!--Etiqueta de apertura-->
<xsl:text disable-output-
escaping="yes"><</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text disable-output-
escaping="yes">></xsl:text>
<!--Plantillas-->
<xsl:choose>
<xsl:when test="count(nif)=1">
<xsl:apply-templates select="nif"/>
</xsl:when>
<xsl:otherwise>
38 de 76
Las Tecnologías XML y sus aplicaciones
<xsl:apply-templates select="cif"/>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="datos"/>
<xsl:element name="fecha">
<xsl:value-of select="/respuesta/@fecha"/>
</xsl:element>
<xsl:apply-templates select="asesor"/>
<!--Etiqueta cierre-->
<xsl:text disable-output-
escaping="yes"></</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text disable-output-
escaping="yes">></xsl:text>
</xsl:template>
<xsl:template match="nif">
<!--Etiqueta apertura-->
<xsl:text disable-output-
escaping="yes"><identificacion tipo="fisica"</xsl:text>
<xsl:text disable-output-
escaping="yes">></xsl:text>
<xsl:value-of select="."/>
<xsl:text disable-output-
escaping="yes"></identificacion</xsl:text>
<xsl:text disable-output-
escaping="yes">></xsl:text>
</xsl:template>
<xsl:template match="cif">
<!--Etiqueta apertura-->
<xsl:text disable-output-
escaping="yes"><identificacion tipo="juridica"</xsl:text>
<xsl:text disable-output-
escaping="yes">></xsl:text>
<xsl:value-of select="."/>
<xsl:text disable-output-
escaping="yes"></identificacion</xsl:text>
<xsl:text disable-output-
escaping="yes">></xsl:text>
</xsl:template>
<xsl:template match="datos">
<!--Etiqueta apertura-->
<xsl:element name="datos">
<xsl:element name="nombre">
<xsl:value-of select="@nombre"/>
</xsl:element>
<xsl:element name="apellido1">
<xsl:value-of select="@apellido1"/>
</xsl:element>
<xsl:element name="apellido2">
<xsl:value-of select="@apellido2"/>
</xsl:element>
</xsl:element>
</xsl:template>
39 de 76
Las Tecnologías XML y sus aplicaciones
<xsl:template match="asesor">
<xsl:element name="asesor">
<xsl:attribute name="telefono">
<xsl:value-of select="@telefono"/>
</xsl:attribute>
<xsl:element name="nombre_asesor">
<xsl:apply-templates select="nombre"/>
</xsl:element>
<xsl:element name="ubicacion">
<xsl:apply-templates select="ubicacion"/>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
40 de 76
Las Tecnologías XML y sus aplicaciones
5.3. XPath
XPath es una sintaxis para definir partes de documentos XML., que usa rutas para
navegar en documentos XML.
XPath es un estándar del W3C, que forma parte de XSLT, también de XQuery.
5.3.2. Sintaxis
La sintaxis básica de XPath esta basada en el uso de expresiones. Una expresión
puede aplicarse a cuatro tipos de objetos:
• Booleanos.
• Números.
• Cadenas de caracteres.
• Conjuntos de nodos.
• Un eje, que define la relación entre el nodo actual y el conjunto de nodos a localizar.
• Un nodo, que especifica el conjunto de nodos a localizar.
• De 0 a n predicados que permiten refinar la búsqueda.
La sintaxis es la siguiente:
eje::nodo[predicado]
Sin embargo, a la hora de usar ejes en XPath, lo normal es usar abreviaturas, entre las
que cabe destacar:
• . : nodo actual
• .. : nodo padre
• // : descendiente, con profundidad arbitraria
41 de 76
Las Tecnologías XML y sus aplicaciones
Predicados: Se usan para buscar un nodo específico o un nodo que contiene un valor
específico, su contenido es una expresión, que siempre va entre corchetes.
Funciones de nodo:
Funciones posicionales:
Funciones numéricas:
Funciones booleanas:
Funciones de cadena
5.3.3. Ejemplos.
La mejor manera de comprender el funcionamiento de XPath es viendo algunos
ejemplos. Sea el siguiente documento XML:
<ProductDescription ProductModelId=”19”>
<Summary>Bicicleta de Montaña de Competición</Summary>
<Manufacturer>
<Name>AdventureWorks</Name>
42 de 76
Las Tecnologías XML y sus aplicaciones
<ProductURL>http://www.adventureworks.com</ProductURL
>
</Manufacturer>
<Features>
<Warranty>
<WarrantyPeriod>3 años</WarrantyPeriod>
<Description>Piezas y mano de
obra</Description>
</Warranty>
<Maintenance>
<NoOfYears>10 años</NoOfYears>
<Description>Contrato de mantenimiento
disponible durante...</Description>
</Maintenance>
</Features>
<Picture>
<Angle>frente</Angle>
<Size>pequeña</Size>
<ProductPhotoID>31</ProductPhotoID>
</Picture>
</ProductDescription>
• //Summary: Selecciona todos los elementos <Summary> que se encuentran dentro del
documento. Con la doble barra indicamos profundidad arbitraria. El resultado de su
aplicación:
• //Warranty: Selecciona todos los elementos <Warranty> que se encuentran dentro del
documento. Con la doble barra indicamos profundidad arbitraria. El resultado de su
aplicación:
<Warranty>
<WarrantyPeriod>3 años</WarrantyPeriod>
<Description>Piezas y mano de obra</Description>
</Warranty>
<Picture>
<Angle>frente</Angle>
<Size>pequeña</Size>
<ProductPhotoID>31</ProductPhotoID>
</Picture>
43 de 76
Las Tecnologías XML y sus aplicaciones
<ProductDescription ProductModelID="19">
<Summary>Bicicleta de Montaña de Competición</Summary>
<Manufacturer>
<Name>AdventureWorks</Name>
<ProductURL>http://www.adventureworks.com</ProductURL
>
</Manufacturer>
<Features>
<Warranty>
<WarrantyPeriod>3 años</WarrantyPeriod>
<Description>Piezas y mano de
obra</Description>
</Warranty>
<Maintenance>
<NoOfYears>10 años</NoOfYears>
<Description>Contrato de mantenimiento disponible
durante...</Description>
</Maintenance>
</Features>
<Picture>
<Angle>frente</Angle>
<Size>pequeña</Size>
<ProductPhotoID>31</ProductPhotoID>
</Picture>
</ProductDescription>
ProductModelID="19"
<Size>pequeña</Size>
5.4. XSL-FO
5.4.1. Introducción.
Una de las ventajas del formato XML es que los datos pueden ser visualizados de
diferentes formas, como por ejemplo en forma de páginas HTML o WML. Existe una
transformación más rígida que la de los lenguajes de marcas, que es la que usan los
procesadores de texto o los formatos tipo PDF o PostScript.
44 de 76
Las Tecnologías XML y sus aplicaciones
Cuando se tiene el documento XSL-FO, puede ser procesado por un programa llamado
"procesador de XSL-FO" para obtener el documento final en distintos formatos. El formato final
más utilizado es el PDF.
Cada área tiene borde y separación (padding) por cada uno de sus lados, así como
indentaciones (indent) que especifican su separación del área que la contiene. La mayoría de
los FO generan un único área, aunque a veces, debido a saltos de página, separación de
líneas, etcétera, pueden dar lugar a varias.
A su vez, los bloques pueden contener líneas, espacios a visualizar, una imagen y
otros bloques.
Una línea hace referencia a cada línea de texto dentro de un bloque. Pueden contener
inline.
Finalmente, las inline son partes de una línea, como por ejemplo cada carácter, la
referencia a una nota al pie o una expresión matemática. Cada inline puede contener otras
inline o inline de espacio.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns:fo="http://www.w3.org/XSL/Format/1.0"
result-ns="fo">
45 de 76
Las Tecnologías XML y sus aplicaciones
<fo:layout-master-set>
<fo:simple-page-master page-master-name="impar"
height="29cm" width="21cm" margin-top="0.5cm" margin-
bottom="0.5cm" margin-left="1.0cm" margin-right="0.5cm">
<fo:region body/>
</fo:simple-page-master>
<fo:simple-page-master page-master-name="par" height="29cm"
width="21cm" margin-top="0.5cm" margin-bottom="0.5cm" margin-
left="0.5cm" margin-right="1.0cm">
<fo:region body/>
</fo:simple-page-master>
</fo:master-page-set>
Los documentos FO deben tener una o más <page-sequence>, las cuales deben
incluir una <sequence-specification> (indicando el orden en que las páginas patrón son
usadas), cero o más <static-content> con texto a incluir en todas las páginas, y un
<flow> con datos que se incluirán o no en la página según corresponda.
La Sequence specification lista el orden en que serán aplicadas las distintas páginas
patrón. Y podemos ver algunos ejemplos, tales como el incluir una misma página patrón para
todo el documento:
<fo:sequence-specification>
<fo:sequence-specifier-single page-master-name="par"/>
<fo:sequence-specification>
O incluir una misma página patrón para todo el contenido suponiendo que este ocupa 3
páginas:
<fo:sequence-specification>
<fo:sequence-specifier-single page-master-name="impar"/>
<fo:sequence-specifier-single page-master-name="impar"/>
<fo:sequence-specifier-single page-master-name="impar"/>
<fo:sequence-specification>
Distintas páginas patrón para todo el contenido suponiendo que va a ocupar dos
páginas
<fo:sequence-specification>
<fo:sequence-specifier-single page-master-name="impar"/>
<fo:sequence-specifier-single page-master-name="par"/>
<fo:sequence-specification>
46 de 76
Las Tecnologías XML y sus aplicaciones
El primero permite especificar dos páginas patrones: una para la primera página y otra
para todas las demás y el segundo permite especificar hasta 6 páginas patrón: una para la
primera página, otra para las páginas pares con contenido, otra para las impares con
contenido, otra para páginas pares en blanco, para la última hoja par y la última hoja impar.
<fo:sequence-specification>
<fo:sequence-specifier-repeating page-master-
first="portada" page-master-repeating="pagina" />
</fo:sequence-specification>
<fo:sequence-specification>
<fo:sequence-specifier-alternating page-master-
first="cap_portada" page-master-even="cap_pares" page-master-
blank-even="cap_blanca" page-master-odd="cap_impares" page-
master-last-even="cap_ultima_par" page-master-last-
odd="cap_ultima_impar" page-master-repeating="cap_ultima_par" />
</fo:sequence-specification>
Los static-content especifican contenido que aparecerá en todas las páginas, tales
como pies de página, como podemos ver en el ejemplo siguiente:
<fo:static-content flow-name="region-after">
<fo:block>Consejería de Agricultura</fo:block>
</fo:static-content>
Los flow ubican contenido en páginas determinadas en función de los criterios que se
especifiquen.
5.4.4.2. Contenido
El contenido se organiza en elementos de tipo bloque, tablas e inlines.
Se entiende por bloque un área rectangular separada por una línea de ruptura y un
espacio antes y después de su contenido, pudiendo contener otros bloques. Se definen
mediante la etiqueta <block>
Una inclusión es un área rectangular que puede contener texto u otras inclusiones. Se
suelen mostrar dentro de líneas y de izquierda a derecha.
5.4.5. Ejemplo.
Sea el documento XML:
47 de 76
Las Tecnologías XML y sus aplicaciones
Y el documento XSL, que contiene una serie de sentencias XSL-FO para generar el
documento de salida:
<fo:root xmlns:fo="http://www.w3.org/XSL/Format/1.0">
<fo:layout-master-set>
<fo:simple-page-master page-master-
name="only" height="29cm" width="21cm" margin-top="0.5cm" margin-
bottom="0.5cm" margin-left="0.5cm" margin-right="1.0cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence>
<fo:sequence-specification>
<fo:sequence-specifier-single page-
master-name="only"/>
</fo:sequence-specification>
<fo:flow>
<fo:block font-size="20pt" font-
family="serif">
LIBROS
<xsl:apply-templates
select="/libro/titulo"/>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="titulo">
<fo:block>
Libro: <xsl:value-of select="."/>
</fo:block>
</xsl:template>
</xsl:stylesheet>
Obtenemos como resultado un documento PDF, con el contenido del documento XML
original.
48 de 76
Las Tecnologías XML y sus aplicaciones
Nótese que se indica en dos ocasiones el espacio de nombres fo, la primera indica al
documento XSL el espacio de nombres al que se refieren las etiquetas fo, y la segunda sirve
como entrada al programa FOP para que esta pueda ser transformada.
49 de 76
Las Tecnologías XML y sus aplicaciones
Capítulo 6: Analizadores
6.1. Introducción.
El procesado de documentos XML puede ser tedioso, por eso para realizar el mismo se
recurre a unas aplicaciones que ofrecen ayuda para analizar de forma automática la estructura
los documentos XML, que se denominan analizadores o parsers.
Los dos tipos de parsers más comunes son el SAX (Simple Api for XML – Interfaz de
acceso simple para XML) y el DOM (Document Object Model – Modelo de Objeto Documento),
que difieren sobre todo en su modo de funcionamiento a la hora de acceder a los datos
6.2. SAX
El SAX proporciona un mecanismo de acceso al XML de forma secuencial (similar a
una cinta de video), por lo que será ideal para aplicaciones cuyos documentos XML a analizar
vengan dados por comunicaciones entre procesos, tanto en transmisión como en recepción.
Este tipo de parser necesita poca memoria, ya que una vez procesada la sección de
documento pedida la abandona.
6.3. DOM
El DOM es un parser más pesado que el SAX, pero tiene la ventaja de que no es
necesaria mucha de la programación que implica el SAX, además de tener mayor control sobre
la estructura del documento.
Debido a que se carga todo el documento en memoria, requiere más memoria que
SAX, pero el acceso al documento es por nodos, no secuencial. Estos nodos son de dos tipos,
nodos elemento, que pueden contener otros elementos, o nodos texto, que contienen solo
texto.
50 de 76
Las Tecnologías XML y sus aplicaciones
DBMS_XMLSCHEMA.registerSchema('http://www.oracle.com/PO.xsd',doc);
Esta librería proporciona cinco funciones del estándar SQLX (SQL to XML) para
obtener datos relacionales en formato XML: XMLElement, XMLForest, XMLConcat,
XMLAttribute y XMLAgg.
Adicionalmente, ORACLE soporta otras funciones que no forman parte del estándar
SQLX, pero que tienen el mismo propósito.
7.2. Ejemplos.
Supongamos una base de datos compuesta por las siguientes tablas:
PUESTOS
Codigo Descripcion
1 Analista
2 Analista/Programador
3 Programador
EMPLEADOS
Codigo Nombre
1 Ana
2 Luis
3 Pedro
SELECT XMLELEMENT("empleado",
XMLATTRIBUTES(e.codigo AS codigo),
XMLELEMENT("nombre",e.nombre),
51 de 76
Las Tecnologías XML y sus aplicaciones
XMLELEMENT("puesto",p.descripcion)) AS
resultado
FROM PUESTOS p, EMPLEADOS e
WHERE e.Codigo =p.Codigo;
resultado
-------------------
<empleado codigo="1">
<nombre>Ana</nombre>
<puesto>Analista</puesto>
</empleado>
<empleado codigo="2">
<nombre>Luis</nombre>
<puesto>Analista/Programador</puesto>
</empleado>
<empleado codigo="3">
<nombre>Pedro</nombre>
<puesto>Programador</puesto>
</empleado>
SELECT XMLELEMENT("empleado",
XMLATTRIBUTES(e.codigo AS codigo),
XMLFOREST(e.nombre AS “nom”, p.descripcion AS
“puesto” ) AS resultado
FROM PUESTOS p, EMPLEADOS e
WHERE e.Codigo =p.Codigo;
La sentencia:
resultado
-------------------
<nombre>Ana</nombre>
<puesto>Analista</puesto>
<nombre>Luis</nombre>
<puesto>Analista/Programador</puesto>
<nombre>Pedro</nombre>
<puesto>Programador</puesto>
52 de 76
Las Tecnologías XML y sus aplicaciones
Capítulo 8: XQUERY
8.1. Introducción.
XQuery es un leguaje de consultas estándar, publicado por el W3C (World Wide Web
Consortium) que utiliza la notación XML para definir consultas y manejar los resultados.
XQuery es lo suficientemente flexible como para consultar un amplio espectro de orígenes de
datos, incluyendo bases de datos relacionales, documentos XML, Servicios Web, aplicaciones
y sistemas heredados.
XQuery hace un uso intensivo de XPath (un lenguaje utilizado para seleccionar
porciones de XML); de hecho algunos ven a XQuery como un súper conjunto de XPath. En el
gráfico que se muestra en la se puede visualizar algunas de las especificaciones del W3C,
ubicadas por orden de aparición. XPath en un principio fue parte de XSL 1.0 y luego se
desarrolló como una especificación separada. La nueva versión de XPath (XPath 2.0) está
siendo desarrollada de manera conjunta a XQuery, por el mismo grupo de trabajo.
• Document
53 de 76
Las Tecnologías XML y sus aplicaciones
• Element
• Attribute
• Text
• Namespace
• Processing Instruction
• Comment
Además de los nodos, el modelo de datos permite valores atómicos (atomic values),
que son valores simples que se corresponden con los valores simples (simple types) definidos
en la recomendación XML Schema, Part 2 del W3C. Estos pueden ser string, boolean,
decimal, integer, float, double y date.
Un ítem es nodo simple o valor atómico. Una serie de ítems es conocida como
sequence (secuencia). En XQuery cada valor es una secuencia, y no hay distinción entre un
ítem simple y una secuencia de un solo ítem. Las secuencias solo pueden contener nodos o
valores atómicos, no pueden contener otras secuencias. El primer nodo en cualquier
documento es el "nodo documento" (document node). El nodo documento no se corresponde
con nada visible en el documento, éste representa el mismo documento.
Los nodos conectados forman un árbol, que consiste en un nodo "root" y todos los
nodos que cuelgan de él. Un árbol cuyo root es un nodo documento se denomina árbol
documento, todos los demás son denominados fragmentos.
Las cláusulas FOR y LET arman el conjunto de tuplas sobre el cual se evaluará la
sentencia FLWOR, al menos una de estas cláusulas tiene que existir en una consulta. Con
estas sentencias se consigue buena parte de la funcionalidad que diferencia a XQuery de
XPath. Entre otras cosas permite construir el documento que será la salida de la sentencia.
Vamos a ver unos ejemplos. Para lo cual vamos a usar el parser Xquery que incluye
Saxon.
54 de 76
Las Tecnologías XML y sus aplicaciones
<tienda_libros>
<libro categoria="COCINA">
<titulo idioma="castellano">Cocina Italiana</titulo>
<autor>Giada De Laurentiis</autor>
<anyo>2005</anyo>
<precio>30.00</precio>
</libro>
<libro categoria="INFANTIL">
<titulo idioma="castellano">Harry Potter</titulo>
<autor>J K. Rowling</autor>
<anyo>2005</anyo>
<precio>29.95</precio>
</libro>
<libro categoria="WEB">
<titulo idioma="ingles">XQuery Quick Start</titulo>
<autor>James McGovern</autor>
<autor>Per Bothner</autor>
<autor>Kurt Cagle</autor>
<autor>James Linn</autor>
<autor>Vaidyanathan Nagarajan</autor>
<anyo>2003</anyo>
<precio>49.95</precio>
</libro>
<libro categoria="WEB">
<titulo idioma="castellano">Aprender XML</titulo>
<autor>Erik T. Ray</autor>
<anyo>2005</anyo>
<precio>39.95</precio>
</libro>
</tienda_libros>
Vamos a ejecutar una serie de consultas que nos permitirán obtener algunas partes de
este documento.
Primero vamos a obtener aquellos libros cuyo precio sea superior a 30 €, mediante la
siguiente sentencia FLWOR:
<resultado>
{
for $x in doc("libros.xml")/tienda_libros/libro
where $x/precio>30
return $x/titulo
}
</resultado>
Podemos lanzar una consulta que nos devuelva ordenados los libros cuyo precio es
inferior a 35 €:
55 de 76
Las Tecnologías XML y sus aplicaciones
<resultado>
{
for $x in doc("libros.xml")/tienda_libros/libro
where $x/precio<35
order by $x/titulo
return $x/titulo
}
</resultado>
<ul>
{
for $x in doc("libros.xml")/tienda_libros/libro/titulo
order by $x
return
<li>{data($x)}</li>
}
</ul>
Siendo el resultado:
<ul>
<li>Aprender XML</li>
<li>Cocina Italiana</li>
<li>Harry Potter</li>
<li>XQuery Quick Start</li>
</ul>
<resultado>
{
for $x in doc("libros.xml")/tienda_libros/libro
return if ($x/@categoria="INFANTIL")
then <infantil>{data($x/titulo)}</infantil>
else <adulto>{data($x/titulo)}</adulto>
}
</resultado>
56 de 76
Las Tecnologías XML y sus aplicaciones
Podemos obtener aquellos libros que estén en castellano, y mostrar su titulo y su autor
en otro documento XML
<resultado>
{
for $x in doc(“libros.xml”)/tienda_libros/libro/titulo
where $x/titulo/@idioma = “castellano”
order by $x
return <titulo autor=”{data($x\autor)}”>{data($x)}</titulo>
}
</resultado>
Con lo que se puede obtener como salida un documento HTML o XML, según se
desee.
57 de 76
Las Tecnologías XML y sus aplicaciones
9.1. Introducción.
La sindicación de contenidos o redifusión es un proceso mediante el cual se puede
compartir la información de determinados sitios Web para usarla en otros que sitios o
programas. Es utilizada sobre todo en sitios Web que se actualizan con frecuencia.
RSS no es más que un sencillo formato de datos usado para sindicar (redifundir)
contenidos a suscriptores de un sitio Web. Las siglas RSS corresponden a distintos protocolos:
Así, cuando un sitio Web permite sindicación, cada vez que este sea actualizado,
generará un documento RSS que se enviará a todos aquellos usuarios “sindicados” o suscritos
al sitio en cuestión, y dicho documento será gestionado por unos programas especiales, que
leen y presentan la información RSS y que se denominan sindicadores o agregadores de
contenidos.
z Bloglines.
z NetNewsWire.
z iTunes.
z Firefox Live Bookmarks.
z iPodder.
z My Yahoo.
z FeedDemon.
z NewsGator Online.
z Pluck.
58 de 76
Las Tecnologías XML y sus aplicaciones
Existe una gran variedad de estos, pero todos ellos se pueden clasificar en tres
categorías:
Una vez que el usuario dispone del agregador que haya elegido, debe seleccionar
aquellos contenidos o archivos RSS (también denominados “feeds”) que sean de mayor interés
para él y realizar la sindicación de contenidos.
Los “feeds” suelen indicarse en las páginas Web mediante pequeños cuadros que
incluyen las siglas "RSS".
Al pulsar sobre dichos iconos aparecerá en el navegador del usuario una página en la
que se muestra el código del canal RSS. Este código solo es interpretado de forma correcta por
un agregador, mediante el cual se mostrará al usuario la información de forma que este pueda
leerla sin dificultad.
Para suscribirse a un “feed”, por lo general, el usuario debe copiar la dirección URI del
archivo RSS y escribirla en su agregador.
El código necesario para crear un “feed” o documento RSS debe incluir tanto
información sobre el sitio Web del que procede y que, por tanto, será información no variable,
como datos sobre los contenidos que ofrece y que se actualizarán cada breve periodo de
tiempo. Esta será la información variable ofrecida en la sindicación.
La primera línea de código RSS será, por tanto, la que define el lenguaje de marcado y
el tipo de caracteres que vamos a utilizar.
59 de 76
Las Tecnologías XML y sus aplicaciones
Todos las demás etiquetas que se van a utilizar para crear el “feed” deben situarse
entre estas dos de <rss>, que son las que indican que estamos creando un documento RSS.
Para ello bastará con utilizar el elemento <channel> dentro del elemento <rss>:
</channel>
</rss>
Una vez creado el canal, es necesario definir los elementos no variables del mismo.
Existen distintos elementos no variables, pero sólo tres son obligatorios, a través de los
que se va a describir el canal RSS en general, y que son los siguientes:
• Título: Que se define mediante la etiqueta <title>, y que hará referencia al nombre
del “feed”.
• Enlace: Que se define mediante la etiqueta <link>, y que define la URL del sitio Web
desde el que se proporciona la información.
• Descripción: Que se define mediante la etiqueta <description>, y que informa al
usuario del tipo de contenidos que se van a incluir en el canal.
Así, si se incluyen los citados elementos en el canal que se creo anteriormente, el aspecto
del documento RSS será el siguiente:
</channel>
</rss>
Tras la definición de los elementos no variables, ahí que definir los elementos variables.
60 de 76
Las Tecnologías XML y sus aplicaciones
z Título: Que se define mediante la etiqueta <title>, y que representa el titulo del
articulo que se esta enviando
z Enlace: Que se define mediante la etiqueta <link>, y que indica la dirección Web a la
que se puede ir para ampliar la información
<item>
<title>Título del artículo</title>
<link>Dirección Web a la se puede ir para ampliar
esta información</link>
<description>Contenido de la
información</description>
</item>
</channel>
</rss>
61 de 76
Las Tecnologías XML y sus aplicaciones
• SOAP envelope: Marco general para expresar el contenido de un mensaje, quien debe
gestionarlo y si es opcional u obligatorio.
• SOAP encoding rules: Definen un mecanismo de serializacion que puede ser utilizado
para intercambiar instancias de tipos de datos definidos por aplicaciones particulares.
• La representación SOAP RPC define una convención que se puede utilizar para
representar llamadas a procedimientos remotos y sus correspondientes respuestas.
62 de 76
Las Tecnologías XML y sus aplicaciones
La mayoría de las herramientas incluyen una forma de generar WSDL a partir de una
componente, incluyendo el WSTK de IBM y el .NET Studio de Microsoft.
Es una base de datos a nivel mundial gestionada por una alianza de empresas para
obtener información de Web Services y de las empresas que los proporcionan.
ebXML ha sido también desarrollado para hacer lo mismo. UDDI/SOAP y ebXML son
tecnologías complementarias y se pueden utilizar a la vez.
UDDI provee un mecanismo para que los negocios se describan a si mismo y los tipos
de servicios que proporcionan y luego se puedan registrar y publicar en un registro UDDI.
Sea una función que convierte los grados Celsius a Fahrenheit, que se llama:
celsiusToFahrenheit:
63 de 76
Las Tecnologías XML y sus aplicaciones
Y la respuesta:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
64 de 76
Las Tecnologías XML y sus aplicaciones
GRUPO
curso
tipo
nombre URI
profesor profesor
nombre
titulación
asignatura asignatura
65 de 76
Las Tecnologías XML y sus aplicaciones
66 de 76
Las Tecnologías XML y sus aplicaciones
<xs:element name=”alumnos”>
<xs:complexType>
<xs:sequence>
<xs:element ref=”alumno”
maxOccurs=”ubounded”/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”profesores”>
<xs:complexType>
<xs:sequence>
<xs:element ref=”profesor”
maxOccurs=”ubounded”/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name=”tipoMaterial”>
<xs:list base=”string”/>
<xs:length value=”3”/>
<xs:enumeration value=”Tema”/>
<xs:enumeration value=”Ejercicios”/>
<xs:enumeration value=”Documentacion”/>
</simpleType>
67 de 76
Las Tecnologías XML y sus aplicaciones
</xs:complexType>
</xs:element>
</xs:schema>
68 de 76
Las Tecnologías XML y sus aplicaciones
<xsl:template match="profesores">
<xsl:for-each select="profesor">
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
<xsl:template match="profesor">
<tr>
<td>
<xsl:value-of select="@nombre"/>
</td>
<td>
<xsl:value-of select="@asignatura"/>
</td>
69 de 76
Las Tecnologías XML y sus aplicaciones
</tr>
</xsl:template>
<xsl:template match="alumnos">
<xsl:for-each select="alumno">
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
<xsl:template match="alumno">
<b>Nombre:</b> <xsl:value-of select="@nombre"/>
<b> Titulación:</b> <xsl:value-of
select="@titulacion"/>
<b> Asignaturas:</b>
<xsl:for-each select="*">
<xsl:choose>
<xsl:when
test="//asignatura[position()=last()]">
<xsl:value-of select="."/>.
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>,
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<br/>
</xsl:template>
<xsl:template match="material">
<b>Nombre:</b><i> <xsl:value-of select="@nombre"/>
</i>
<b> Tipo:</b><i> <xsl:value-of select="@tipo"/> </i>
<b> URI:</b><i> <xsl:value-of select="@URI"/> </i>
<br/>
</xsl:template>
</xsl:stylesheet>
70 de 76
Las Tecnologías XML y sus aplicaciones
TIENDA
ubicación
EMPLEADOS STOCK
jefe_tienda cajero
producto producto
precio precio
id id estado estado
antigüedad antigüedad
tipo tipo
jefe_turno
id antigüedad
71 de 76
Las Tecnologías XML y sus aplicaciones
<xs:simpleType name="estados">
<xs:list base="xs:string"/>
72 de 76
Las Tecnologías XML y sus aplicaciones
<xs:length value="2"/>
<xs:enumeration value="disponible"/>
<xs:enumeration value="no_disponible"/>
</xs:simpleType>
<xs:element name="jefe_tienda">
<xs:complexType>
<xs:attribute ref="empleado"/>
</xs:complexType>
</xs:element>
<xs:element name="jefe_turno">
<xs:complexType>
<xs:attribute ref="empleado"/>
</xs:complexType>
</xs:element>
<xs:element name="cajero">
<xs:complexType>
<xs:attribute ref="empleado"/>
</xs:complexType>
</xs:element>
<xs:element name="empleados">
<xs:complexType>
<xs:sequence>
<xs:element ref="jefe_tienda"/>
<xs:element ref="jefe_turno"
maxOccurs="3"/>
<xs:element ref="cajero"
maxOccurs="ubounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="producto">
<xs:complexType>
<xs:attribute name="tipo" type="tipos"
use="required"/>
<xs:attribute name="precio" type="xs:float"
use="required"/>
<xs:attribute name="estado" type="estados"
use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="stock">
<xs:complexType>
<xs:sequence>
<xs:element ref="producto"
maxOccurs="ubounded"/>
</xs:sequence>
</xs:complexType>
73 de 76
Las Tecnologías XML y sus aplicaciones
</xs:element>
</xs:schema>
74 de 76
Las Tecnologías XML y sus aplicaciones
<xsl:template match="empleados">
<xsl:apply-templates select="jefe_tienda"/>
<b>Jefes de Turno: </b>
<br/>
<table border="0">
<tr>
<td><i>Nombre</i>
</td>
<td><i>Antigüedad</i>
</td>
</tr>
<xsl:apply-templates select="jefe_turno"/>
</table>
<br/>
<b>Cajeros: </b>
<br/>
<table border="0">
<tr>
<td><i>Nombre</i>
</td>
<td><i>Antigüedad</i>
</td>
</tr>
<xsl:apply-templates select="cajero"/>
</table>
</xsl:template>
<xsl:template match="jefe_tienda">
<b>Jefe de Tienda: </b><xsl:value-of select="."/>
<b>, Antiguedad: </b><xsl:value-of
select="@antiguedad"/>
75 de 76
Las Tecnologías XML y sus aplicaciones
<br/>
</xsl:template>
<xsl:template match="jefe_turno">
<tr>
<td><xsl:value-of select="."/></td>
<td><xsl:value-of select="@antiguedad"/></td>
</tr>
</xsl:template>
<xsl:template match="cajero">
<tr>
<td><xsl:value-of select="."/></td>
<td><xsl:value-of select="@antiguedad"/></td>
</tr>
</xsl:template>
<xsl:template match="stock">
<table border="0">
<tr>
<td><i>Descripción</i>
</td>
<td><i>Tipo</i>
</td>
<td><i>Precio</i>
</td>
<td><i>Estado</i>
</td>
</tr>
<xsl:apply-templates select="producto"/>
</table>
</xsl:template>
<xsl:template match="producto">
<tr>
<td><xsl:value-of select="."/>
</td>
<td><xsl:value-of select="@tipo"/>
</td>
<td><xsl:value-of select="@precio"/>
</td>
<td>
<xsl:if test="@estado='disponible'">
Stock suficiente
</xsl:if>
<xsl:if test="@estado='no_disponible'">
Stock agotado. Realizar Pedido.
</xsl:if>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
76 de 76