2. Noviembre 2009 XML Básico 2
Objetivos
Conocer el lenguaje XML y su
funcionamiento
Conocer los esquemas de XML y su
necesidad (DTD y XSD)
Conocer el lenguaje de transformación y
estilos para documentos XML (XSL)
Conocer el lenguaje de consulta sobre
documentos XML (XPath)
3. Noviembre 2009 XML Básico 3
Contenidos
I. Introducción a XML
II. Creación de DTDs
III. Espacios de Nombres y XSD
IV. XML Canónico
V. XPath
VI. XSLT
4. Noviembre 2009 XML Básico 4
Contenidos
I. Introducción a XML
II. Creación de DTDs
III. Espacios de Nombres y XSD
IV. XML Canónico
V. XPath
VI. XSLT
5. Noviembre 2009 XML Básico 5
I. Introducción a XML
1. Introducción a XML
2. Origen de XML
3. Estructura de un documento XML
1. Elementos y Atributos
2. Instrucciones de Proceso
3. Entidades y Comentarios
4. Secciones CDATA
4. Documentos bien formados
6. Noviembre 2009 I. Introducción a XML 6
1. Introducción a XML
eXtensible Markup Language
Metalenguaje extensible de etiquetas
desarrollado por el W3C
Simplificación y adaptación del SGML
Se propone como un estándar para el
intercambio de información estructurada entre
diferentes plataformas
Permite la compatibilidad entre sistemas para
compartir la información de una manera segura,
fiable y fácil
7. Noviembre 2009 I. Introducción a XML 7
1. Introducción a XML
Similar a HTML
Etiquetas o “tags”
Apertura y cierre
<etiqueta> </etiqueta>
Autocerradas <etiqueta/>
Pero más estricto
Una etiqueta engloba a todas
Todas las etiquetas cerradas
No mezclar aperturas y cierres
Válido: <a><b></b></a>
Inválido: <a><b></a></b>
8. Noviembre 2009 I. Introducción a XML 8
1. Introducción a XML
Ejemplo
<LIBRO>
<TITULO>Las recetas de mama</TITULO>
<AUTOR>Milagros Sánchez</AUTOR>
<EDITORIAL>San Luciano</EDITORIAL>
<CUBIERTA TIPO=“Blanda” />
<CATEGORIA CLASE=“NOFICCION” />
<ISBN>0-000-00000-0</ISBN>
<NOTA NUMERO=“5” />
<COMENTARIOS> Es un libro estupendo
</COMENTARIOS>
</LIBRO>
9. Noviembre 2009 I. Introducción a XML 9
2. Origen de XML
Años 70: IBM diseña GML para almacenar
grandes cantidades de información
1986: Normalizado por la ISO SGML
Emplea gramáticas específicas definidas (DTD)
1989: Nace HTML en el marco de SGML
Poco exigente en cuanto a estructura
1998: XML v1.0
revisado 4 veces (última en 2006)
2004: XML v1.1 revisado en 2006
10. Noviembre 2009 I. Introducción a XML 10
2. Origen de XML
Subconjunto del SGML que permite:
Mezclar elementos de diferentes lenguajes. Es decir, que
los lenguajes sean extensibles.
Crear analizadores simples, sin ninguna lógica especial
para cada lenguaje.
Que no se acepte nunca un documento con errores de
sintaxis.
XML está orientado a hacer las cosas más
sencillas para los programas automáticos que
necesiten interpretar el documento.
11. Noviembre 2009 I. Introducción a XML 11
3. Estructura de documentos XML
Información estructurada
Etiquetas o tags <etiqueta>
Organizada en forma de árbol
Un único nodo raíz
Elementos (Nodos)
<elemento>…</elemento>
<elemento/>
Atributos
<elemento atributo1=“valor1”
atributo2=“valor2” …>
12. Noviembre 2009 I. Introducción a XML 12
3. Estructura de documentos XML
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Raiz_Mensaje>
<Mensaje>
<Remitente>
<Nombre>Nombre del remitente</Nombre>
<Mail> Correo del remitente </Mail>
</Remitente>
<Destinatario>
<Nombre>Nombre del destinatario</Nombre>
<Mail>Correo del destinatario</Mail>
</Destinatario>
<Texto>
<Asunto> ... </Asunto>
<Parrafo> ... </Parrafo>
</Texto>
</Mensaje>
</Raiz_Mensaje>
Raiz_Mensaje
Mensaje
Remitente Destinatario Texto
Nombre Mail Nombre Mail Asunto Parrafo
13. Noviembre 2009 I. Introducción a XML 13
3. Estructura de documentos XML
Prólogo (opcional)
Instrucciones de preproceso
Cuerpo (obligatorio)
Elementos y Atributos
Secciones CDATA
Entidades
Comentarios
14. Noviembre 2009 I. Introducción a XML 14
3. Estructura de documentos XML
Prólogo
Contiene información relativa al documento XML.
Contiene la declaración de XML.
La declaración de XML es obligatoria e indica al parser
que versión de documento XML va a ser “parseado”.
Opcionalmente
Contiene la vinculación con su DTD (si existe).
Contiene instrucciones que deben ser ejecutadas por la
aplicación que lo procese (instrucciones de proceso).
Contiene la vinculación con su hoja de estilo
correspondiente (si existe).
Ejemplo
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE Nodo_Raiz SYSTEM "Estructura.dtd">
15. Noviembre 2009 I. Introducción a XML 15
3. Estructura de documentos XML
Prólogo
Declaración de Documento
<?xml version=“1.0” rmd=“ALL” ?>
<?xml version=“1.0” encoding=“ISO-8859-1” ?>
<?xml version=“1.0” standalone=“yes” ?>
Instrucción de
proceso
Declaración de
marca requerida
Juego de
codificación de
caracteres utilizado
en el documento
¿tiene DTD? No tiene DTD
16. Noviembre 2009 I. Introducción a XML 16
3. Estructura de documentos XML
Secciones CDATA
No son analizadas por el parser XML.
Se utilizan en el caso de que no interese que
una cadena sea analizada por el parser.
<![CDATA[ contenido no procesado ]]>
Ejemplo
<elemento>
<![CDATA [ <HTML> .... </HTML> ]]>
</elemento>
Comentarios
<!-- comentario XML -->
17. Noviembre 2009 XML Básico 17
3. Estructura de documentos XML
Entidades
Permiten introducir información en el
documento
Definidas en un documento DTD
<!ENTITY entidad “valor”>
Uso: Precedidas por el símbolo &
á ñ < …
Externas/internas
Analizadas/no analizadas
Generales/Parámetro
18. Noviembre 2009 XML Básico 18
3. Estructura de documentos XML
Entidades
Internas
<!ENTITY VGA “Visual Graphics Adapter”>
Externas
<!ENTITY MANUAL SYSTEM “c:manual.doc”>
No analizadas
<!ENTITY IMAGEN SYSTEM
“http//:www.miwebsite.com/imagen.gif” NDATA>
Parámetro
<!ENTITY % elemento “<!ELEMENT elemento1
(#PCDATA)”>
19. Noviembre 2009 I. Introducción a XML 19
4. Documentos Bien Formados
Han de tener una estructura estrictamente
jerárquica.
Deben tener un único elemento raíz que
contenga a todos los demás.
Los valores atributos siempre deben estar entre
comillas simples o dobles.
Sensible a mayúsculas y minúsculas.
Elementos delimitados por una etiqueta inicial y
otra final con el mismo nombre.
Elementos vacíos autocerrados con /
20. Noviembre 2009 XML Básico 20
4. Documentos Bien Formados
Ejemplo
<libro>
<titulo>Un titulo cualquiera</titulo>
<capitulos>
<capitulo>
<titulo> Capitulo 1 </titulo>
<parrafo numero = “1”> Un parrafo </parrafo>
</capitulo>
<capitulo>
<titulo> Capitulo 2 </titulo>
</capitulo>
</capitulos>
</libro>
<autor>el autor del libro</autor>
21. Noviembre 2009 I. Introducción a XML 21
4. Documentos Bien Formados
Un documento "bien formado" solo se
refiere a su estructura sintáctica
A veces es necesario
Especificar una relación entre los elementos
del documento
Verificar la corrección de los datos
Verificar la integridad de los datos
Establecer un entendimiento compartido
Nuevos lenguajes de marcado, para
aplicaciones específicas
22. Noviembre 2009 I. Introducción a XML 22
4. Documentos Bien Formados
Se comprueba:
Elementos o atributos declarados en el
esquema.
Estructura jerárquica de elementos y atributos.
Orden de los elementos.
Valores de atributos y elementos.
Unicidad de valores.
Se especifica en un documento externo
(documentos de definición)
DTD y XSD
24. Noviembre 2009 XML Básico 24
Contenidos
I. Introducción a XML
II. Creación de DTDs
III. Espacios de Nombres y XSD
IV. XML Canónico
V. XPath
VI. XSLT
25. Noviembre 2009 XML Básico 25
II. Creación de DTDs
1. Concepto y tipos de DTD
2. Definición de Elementos
1. Operadores
2. Elementos mixtos
3. Definición de Atributos
4. Definición de Entidades
1. Entidades generales
2. Entidades paramétricas y externas
5. Definición de Nomenclatura
26. Noviembre 2009 II. Creación de DTDs 26
1. Concepto y tipos de DTD
DTD (Document Type Definition)
Define los tipos de elementos, atributos y
entidades permitidas
Un documento es "válido" si cumple las reglas
de un DTD determinada
Puede ser un fichero externo o definirse dentro
del propio documento XML
Tipos de documentos DTD
Internos <!DOCTYPE raíz [ … ]>
Externos <!DOCTYPE raíz SYSTEM “…”>
27. Noviembre 2009 II. Creación de DTDs 27
2. Definición de Elementos
DTD (Document Type Definition)
<!ELEMENT Raiz_Mensaje (Mensaje)>
<!ELEMENT Mensaje (Remitente, Destinatario, Texto)>
<!ELEMENT Remitente (Nombre, Mail)>
<!ELEMENT Destinatario (Nombre, Mail)>
<!ELEMENT Texto (Asunto, Parrafo)>
<!ELEMENT Nombre (#PCDATA)>
<!ELEMENT Mail (#PCDATA)>
<!ELEMENT Asunto (#PCDATA)>
<!ELEMENT Parrafo (#PCDATA)>
28. Noviembre 2009 II. Creación de DTDs 28
2. Definición de Elementos
<!ELEMENT nodo (hijo1, hijo2, hijo3)>
#PCDATA (texto)
EMPTY (sin contenido)
ANY (en desuso)
Otros elementos
Contenido mixto elementos/texto
Modificadores
| Uno de dos
? Opcional
* Cero o más
+ Uno o más
29. Noviembre 2009 II. Creación de DTDs 29
3. Definición de Atributos
<!ATTLIST nodo atributo tipo modificador>
<!ATTLIST Nodo atributo CDATA #REQUIRED>
Tipos
CDATA (texto)
NMTOKEN ( a A 1 . : - _ )
ID, IDREF
Enumerados
<!ATTLIST monitor marca (SONY | FUJITSU) “SONY”>
Modificadores
#REQUIRED, #IMPLIED, #FIXED
30. Noviembre 2009 II. Creación de DTDs 30
3. Definición de Atributos
Ejemplo
<!ELEMENT Raiz_Mensaje (Mensaje*)>
<!ELEMENT Mensaje (Remitente, Destinatario)>
<!ELEMENT Remitente (Nombre, Mail)>
<!ELEMENT Destinatario (Nombre, Mail)>
<!ELEMENT Nombre (#PCDATA)>
<!ELEMENT Mail (#PCDATA)>
<!ATTLIST Mensaje Asunto CDATA #IMPLIED
Parrafo CDATA #REQUIRED>
31. Noviembre 2009 II. Creación de DTDs 31
3. Definición de Atributos
Ejemplo
Raiz_Mensaje
Mensaje
Remitente Destinatario
Nombre Mail Nombre Mail
Asunto Parrafo
32. Noviembre 2009 II. Creación de DTDs 32
3. Definición de Atributos
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Raiz_Mensaje>
<Mensaje asunto="…" parrafo="…">
<Remitente>
<Nombre>Nombre del remitente</Nombre>
<Mail> Correo del remitente </Mail>
</Remitente>
<Destinatario>
<Nombre>Nombre del destinatario</Nombre>
<Mail>Correo del destinatario</Mail>
</Destinatario>
</Mensaje>
</Raiz_Mensaje>
33. Noviembre 2009 XML Básico 33
4. Definición de Entidades
Abreviaturas que se usan dentro del
documento XML
Siempre analizadas
Entidades generales internas
<!ENTITY VGA “Visual Graphics Adapter”>
Entidades generales externas
<!ENTITY MANUAL SYSTEM “c:manual.txt”>
Entidades no analizadas
<!ENTITY IMAGEN SYSTEM “c:imagen.gif”
NDATA>
34. Noviembre 2009 XML Básico 34
4. Definición de Entidades
Entidades Parámetro
Se utilizan sólo dentro del DTD
Se referencian mediante % en lugar de &
Entidades parámetro internas
<!ENTITY % elemento “<!ELEMENT nodo (hijos)>”>
Entidades parámetro externas
<!ENTITY % elemento SYSTEM “c:manual.doc”>
Ejemplo
<!DOCTYPE [
<!ENTITY % mielemento “<!ELEMENT elemento1 (#PCDATA)>”>
%mielemento;
]>
35. Noviembre 2009 XML Básico 35
5. Definición de Nomenclatura
Permite especificar el formato de datos NO
XML
Comúnmente para tipos MIME
<!NOTATION GIF SYSTEM "image/gif">
<!NOTATION JPG SYSTEM "image/jpeg">
<!NOTATION PNG SYSTEM "image/png">
Se puede utilizar como tipo de atributo
<!ATTLIST foto formato NOTATION
(GIF | JPG | PNG) #IMPLIED>
37. Noviembre 2009 XML Básico 37
Contenidos
I. Introducción a XML
II. Creación de DTDs
III. Espacios de Nombres y XSD
IV. XML Canónico
V. XPath
VI. XSLT
38. Noviembre 2009 XML Básico 38
III. Espacios de Nombres y XSD
1. Motivación
2. Uso de Espacios de Nombres
Predeterminados
3. XSD
1. Declaración de Elementos y Atributos
2. Tipos Simples y Tipos Complejos
3. Formato cualificado y no cualificado
4. Declarando Espacios de Nombres
39. Noviembre 2009 III. Espacios de Nombres y XSD 39
1. Motivación
Limitaciones del DTD:
No existe jerarquía de nombres
No existen tipos de datos
Poco flexible a elementos mixtos
No soporta nuevas ampliaciones de XML
40. Noviembre 2009 III. Espacios de Nombres y XSD 40
2. Uso de Namespaces
Espacios de Nombres
Definición de tipos para reutilización
Estructurar los esquemas
Equivalente a los paquetes Java
Utilizan un “alias” para referenciarlos dentro del XML
Espacios de Nombres W3C:
xmlns
http://www.w3.org/2001/XMLSchema
http://www.w3.org/2001/XMLSchema-instance
http://www.w3.org/1999/XSL/Transform
…
41. Noviembre 2009 III. Espacios de Nombres y XSD 41
2. Uso de Namespaces
Ejemplo
<elemento
xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:schemaLocation="http://Test.com/Purchase
Main.xsd"
xmlns:p="http://NamespaceTest.com/Purchase"
xmlns:o="http://NamespaceTest.com/OrderTypes"
xmlns:cm="http://NamespaceTest.com/CommonTypes"
>
<p:pedido tipo="cm:primerPedido"/>
<o:objeto id="cm:idProducto"/>
42. Noviembre 2009 III. Espacios de Nombres y XSD 42
3. XSD
XSD (XML Schema Definition)
Evolución de DTD descrita por W3C
Más complejo y más potente
Sintaxis XML
Nodos y tipos (primitivos y derivados)
Soporta la extensión del documento
Reutilizar, modularizar, definir tipos de datos, …
Se puede utilizar para transformar el documento en una
jerarquía de objetos
Soporta espacios de nombres (namespaces)
Permite asegurar la integridad de los datos
10-11-2009 ¿es octubre o noviembre?
43. Noviembre 2009 III. Espacios de Nombres y XSD 43
3. XSD
Un XML Schema:
Define elementos que pueden aparecer en el documento
Define atributos que pueden aparecer en el documento
Define las relaciones padre hijo entre los distintos
elementos
Define el orden de los elementos
Define el número de elementos
Define si un elemento estará vacío o si tendrá un valor
Define los tipos de datos para elementos y atributos
Y todo con sintaxis totalmente XML
45. Noviembre 2009 III. Espacios de Nombres y XSD 45
3. XSD
Ejemplo Validación:
<?xml version="1.0"?>
<note
xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:schemaLocation="note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
46. Noviembre 2009 III. Espacios de Nombres y XSD 46
3. XSD
Elementos de un esquema XSD
<xsd:element>
<xsd:attribute>
<xsd:sequence>
<xsd:choice>
<xsd:all>
<xsd:complexType>
…
47. Noviembre 2009 III. Espacios de Nombres y XSD 47
3. XSD
Declaración de elementos
<xsd:element
name=“nombre_nodo”
type=“tipo_dato”
default=“valor por defecto”
fixed=“valor fijo”
minOccurs=“cardinalidad mínima”
maxOccurs=“cardinalidad máxima”>
48. Noviembre 2009 III. Espacios de Nombres y XSD 48
3. XSD
Declaración elementos complejos
Elementos y/o atributos
<xsd:attribute
name=“nombre_atributo”
type=“tipo_dato”
use=“optional | mandatory”
fixed=“valor fijo” >
<xsd:complexType mixed=“true | false”>
<xsd:sequence>
<xsd:choice>
<xsd:complexContent>
<xsd:extension base="tipo complejo">
49. Noviembre 2009 III. Espacios de Nombres y XSD 49
3. XSD
Ejemplo 1:
<!-- Elemento con contenido complejo -->
<xsd:element name="Cliente">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FechaNac" type="xsd:date" />
<xsd:element name="Direccion" type="AddressType">
<xsd:complexType name="AddressType">
<xsd:sequence>
<xsd:element name="Line1" type="xsd:string"/>
<xsd:element name="Line2" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
51. Noviembre 2009 III. Espacios de Nombres y XSD 51
3. XSD
Ejemplo 3:
<!-- Tipo conplejo con atributos y sin contenido -->
<xs:element name="product">
<xs:complexType>
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>
</xs:element>
<!-- Tipo conplejo con atributos y contenido de tipo texto -->
<xs:element name="shoesize">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
52. Noviembre 2009 III. Espacios de Nombres y XSD 52
3. XSD
Ejemplo 4:
<!-- Elementos con contenido mixto -->
<xs:element name="letter">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="orderid"
type="xs:positiveInteger"/>
<xs:element name="shipdate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
53. Noviembre 2009 III. Espacios de Nombres y XSD 53
3. XSD
Tipos primitivos de datos:
xsd:string
xsd:boolean
xsd:decimal
xsd:float
xsd:double
xsd:dateTime
xsd:date
xsd:time
…
54. Noviembre 2009 III. Espacios de Nombres y XSD 54
3. XSD
Tipos de datos derivados:
integer (decimal)
long (integer)
normalizedString (string)
token (normalizedString)
Name (token)
ID (Name)
IDREF (Name)
ENTITY (Name)
…
Se definen como restricción sobre otro tipo
<xsd:simpleType>
55. Noviembre 2009 III. Espacios de Nombres y XSD 55
3. XSD
Ejemplo de tipos derivados
<xs:simpleType name="edad">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="coche">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
56. Noviembre 2009 III. Espacios de Nombres y XSD 56
3. XSD
Los tipos derivados admiten patrones para restringir
Ejemplos:
<xs:restriction base="xs:string">
<xs:pattern value="[xyz]"/>
</xs:restriction>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*"/>
</xs:restriction>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z0-9]{8}"/>
</xs:restriction>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve | replace | colapse"/>
</xs:restriction>
57. Noviembre 2009 III. Espacios de Nombres y XSD 57
3. XSD
Reutilización de esquemas
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:cmn="CommonTypes" elementFormDefault="qualified"
targetNamespace="CustomerTypes" >
<xs:import namespace="CommonTypes"
schemaLocation="CommonTypes.xsd" />
<xs:complexType name="CustomerType">
<xs:sequence>
<xs:element name="Name" type="xs:string" />
< xs:element name="DeliveryAddress"
type="cmn:AddressType" />
< xs:element name="BillingAddress"
type="cmn:AddressType" />
</xs:sequence>
</xs:complexType>
</xs:schema>
58. Noviembre 2009 III. Espacios de Nombres y XSD 58
3. XSD
Formatos de esquemas
Atributo elementFormDefault de
<xsd:schema>
Formato cualificado (qualified)
Exige utilizar el espacio de nombres en todos los
nodos
Formato no cualificado (unqualified)
Sólo exige namespace para el nodo raíz
Y para los elementos definidos en el mismo XSD del
nodo raíz
El resto no utiliza namespace
59. Noviembre 2009 III. Espacios de Nombres y XSD 59
4. Declarando Namespaces
Declaración de esquemas
Atributo targetNamespace de <xsd:schema>
Uso: Se debe importar el documento y crear un alias
<xsd:schema
targetNamespace=“espacio”
elementFormDefault=
“qualified|unqualified”
xmlns:xsd=“http://www.w3.org/...”
xmlns:xxx=“espacio xxx”>
<xsd:import
schemaLocation=“fichero.xsd”
namespace=“espacio xxx” />
61. Noviembre 2009 XML Básico 61
Contenidos
I. Introducción a XML
II. Creación de DTDs
III. Espacios de Nombres y XSD
IV. XML Canónico
V. XPath
VI. XSLT
62. Noviembre 2009 XML Básico 62
IV. XML Canónico
1. Motivación
2. XML Canónico
3. Canonizar XML
63. Noviembre 2009 IV. XML Canónico 63
1. Motivación
La validación es importante y podría ser
requerida para garantizar la fiabilidad de
una aplicación XML
Sin embargo, afecta al rendimiento
Un analizador sin validación no es
necesario que lea las entidades externas
Estas entidades externas podrían no ser
expandidas
La información pasada a la aplicación
consumidora podría no ser la misma cuando
se usa un analizador con o sin validación
64. Noviembre 2009 IV. XML Canónico 64
1. Motivación
El coste de la validación puede reducirse
eficientemente teniendo en cuenta que
Los documentos internos podrían no requerir validación
Los documentos que vienen de fuera del sistema deben
validarse cuando entran
Una vez validados, podrían utilizarse sin ninguna otra
validación
Cuando nosotros somos productor y consumidor
de documentos XML podemos validar sólo para
depuración y desactivarla durante la producción
Un documento validado puede convertirse a otro
equivalente más eficiente mediante canonización
65. Noviembre 2009 IV. XML Canónico 65
2. XML Canónico
Canonical XML v1.0
"Cualquier documento XML es parte de un
conjunto de documentos XML … equivalentes …
dentro de un contexto de aplicación … Excepto
para las limitaciones de unos pocos casos
inusuales, si dos documentos tienen la misma
forma canónica, … son equivalentes dentro de un
contexto de aplicación dado"
Dos documentos podrían tener formas canónicas
diferentes y ser equivalentes en un contexto
dado por reglas de equivalencia específicas de la
aplicación
66. Noviembre 2009 IV. XML Canónico 66
3. Canonizar XML
El proceso de canonizalización supone
cambios en el documento original:
1. Codificación del documento en UTF-8
2. Normalización de saltos de línea a #xA
3. Normalización de los atributos (ordenar, “”, …)
4. Sustitución de caracteres y entidades
analizadas y secciones CDATA
5. Eliminación de la declaración y prólogo XML
6. Expansión de elementos vacíos a inicio-fin
7. Normalización de espacios en blanco
8. Adicción de atributos con valor por defecto
67. Noviembre 2009 IV. XML Canónico 67
3. Canonizar XML
Ejemplo 1
Entrada
<?xml version="1.0"?>
<?xml-stylesheet href="doc.xsl"
type="text/xsl" ?>
<!DOCTYPE doc SYSTEM "doc.dtd">
<doc>&saludo;<!-- Comment 1 --></doc>
<?pi-without-data ?>
Salida
<?xml-stylesheet href="doc.xsl"
type="text/xsl" ?>
<doc>Hola, Mundo!</doc>
<?pi-without-data?>
70. Noviembre 2009 IV. XML Canónico 70
3. Canonizar XML
Ejemplo 3
Entrada
<!DOCTYPE doc [
<!ATTLIST normId id ID #IMPLIED>
<!ATTLIST normNames attr NMTOKENS #IMPLIED>
]>
<doc>
<text>First line
 Second line</text>
<value>2</value>
<compute>
<![CDATA[value>"0" && value<"10" ?"valid":"error"]]>
</compute>
<compute expr='value>"0" && value<"10"
?"valid":"error"'>valid</compute>
<norm attr=' '   
	 ' '/>
<normNames attr=' A   
	 B '/>
<normId id=' '   
	 ' '/>
</doc>
71. Noviembre 2009 IV. XML Canónico 71
3. Canonizar XML
Ejemplo 3
Salida
<doc>
<text>First line
Second line</text>
<value>2</value>
<compute>value>"0" && value<"10"
?"valid":"error"</compute>
<compute expr="value>"0" &&
value<"10"
?"valid":"error"">valid</compute>
<norm attr=" ' 
	 ' "></norm>
<normNames attr="A 
	
B"></normNames>
<normId id="' 
	 '"></normId>
</doc>
72. Noviembre 2009 XML Básico 72
Contenidos
I. Introducción a XML
II. Creación de DTDs
III. Espacios de Nombres y XSD
IV. XML Canónico
V. XPath
VI. XSLT
73. Noviembre 2009 XML Básico 73
V. XPath
1. Introducción a XPath
2. Predicados XPath
3. Funciones XPath
74. Noviembre 2009 V. XPath 74
1. Introducción a XPath
Lenguaje de consulta sobre XML
Se apoya en la estructura de árbol de XML
Navegación tipo directorios UNIX con filtrado
Expresión Descripción
nodo Selecciona todos los hijos del nodo indicado
/ Selecciona el nodo raíz
// Selecciona todos los nodos a partir del actual
. Selecciona el nodo actual
.. Selecciona el nodo padre del actual
@ Selecciona atributos
* Wildcard
75. Noviembre 2009 V. XPath 75
1. Introducción a XPath
Ejemplos:
books.xml
Obtener los títulos de todos los libros
/bookstore/book/title
Obtener el título del primer libro
/bookstore/book[1]/title
Obtener todos los autores
//author
Obtener todos los títulos nietos de bookstore
/bookstore/*/title
Obtener todos los elementos de nivel 1
/*/*
76. Noviembre 2009 V. XPath 76
2. Predicados en XPath
Se indican entre corchetes
Permiten restringir una búsqueda
Por valor de un nodo [nodo='valor']
Por presencia de un atributo [@atributo]
Combinando filtros = != < > and or not …
Ejemplos
inventory.xml
Obtener los títulos de libros con precio>35
/bookstore/book[price>35]/price
Obtener el atributo exchange de los nodos price
//price/@exchange
Obtener los libros del estilo de la especialidad del store
//book[/bookstore/@specialty=@style]
77. Noviembre 2009 V. XPath 77
3. Funciones en XPath
Permiten realizar tareas de filtrado más complejas
Se añaden al árbol de búsqueda o al predicado
Algunas funciones son:
Función Descripción
last() Selecciona el último elemento hijo
first() Selecciona el primer elemento hijo
position() Permite filtrar por posición del nodo
comment() Selecciona un nodo comentario
text() Selecciona texto dentro de un nodo (incluido el
contenido de un CDATA)
processing-
instruction()
Selecciona instrucciones de pre-procesamiento
78. Noviembre 2009 V. XPath 78
3. Funciones en XPath
Ejemplos:
inventory.xml
Obtener el último libro
//book[last()]
Obtener el último autor de cada libro
//book/author[last()]
Obtener los primeros autores
//author[position()=1]
Obtener el contenido de bookstore
/bookstore/text()
Obtener el precio total de los libros
sum(//price)
79. Noviembre 2009 XML Básico 79
Contenidos
I. Introducción a XML
II. Creación de DTDs
III. Espacios de Nombres y XSD
IV. XML Canónico
V. XPath
VI. XSLT
80. Noviembre 2009 XML Básico 80
VI. XSLT
1. Transformación de Documentos
2. Estilos en XML
3. Transformaciones en XML
4. Estructuras de control XSLT
81. Noviembre 2009 VI. XSLT 81
1. Transformación de Documentos
En ocasiones es necesario transformar
documentos XML
Interoperabilidad
Cambio de estructura origen/destino
Procesamiento distinto de envío
Presentación de documentos
XSLT permite definir trasformadores de
documentos
Se define mediante XML
Toma XML como entrada
Genera XML, HTML, texto, …
Caso particular: Hojas de estilo XML
82. Noviembre 2009 VI. XSLT 82
2. Estilos en XML
XSL (eXtensible Stylesheet Language)
Familia de lenguajes basados en el estándar XML
Describir cómo la información de un documento
debe ser transformada
o formateada
Para su presentación en un medio
Declaración de la hoja de estilos (nodo raíz)
<xsl:stylesheet version="1.0" xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform">
Uso de la hoja de estilos
<?xml-stylesheet href="estilo.xsl" type="text/xsl"?>
83. Noviembre 2009 VI. XSLT 83
2. Estilos en XML
Elementos comunes
<xsl:import href=“ruta a xsl” >
<xsl:include href=“ruta a xsl” >
<xsl:output method=“text | xml | html”
indent=“yes | no”>
<xsl:template match=“XPath” >
<xsl:text >
<xsl:number value=“XPath” format="1. "/>
<xsl:value-of select=“XPath” />
84. Noviembre 2009 VI. XSLT 84
2. Estilos en XML
Plantillas XSL
Permite restringir la aplicación de un estilo a
elementos que cumplan un patrón (XPath)
Primero se define la plantilla
<xsl:template match="XPath">…</xsl:template>
Después se invoca
<xsl:template match="/">
<xsl:apply-templates select="XPath"/>
</xsl:template>
Al invocarla nos situamos en un nodo mediante
el atributo match y se aplica a partir de este
86. Noviembre 2009 VI. XSLT 86
3. Transformación de documentos
XSLT (XSL Transformations)
Parte más importante de XSL
Desarrollado por el W3C
Transforma un documento XML en otro
Añadir y eliminar elementos y atributos
Redistribuir y ordenar elementos
Emplea XPath para navegar por el documento
Nodo raíz del documento de transformación
<xsl:transform version="1.0" xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform">
87. Noviembre 2009 VI. XSLT 87
3. Transformación de documentos
El modelo de procesamiento incluye:
Uno o más documentos origen XML
Uno o más módulos de estilo XSLT
Un procesador de plantillas XSLT
Uno o más documentos resultado
88. Noviembre 2009 VI. XSLT 88
3. Transformación de documentos
Elementos XSLT
<xsl:variable match=“XPath” >
<xsl:element name=“nombre nodo”
use-attribute-sets=“atts” >
<xsl:attribute name=“nombre att”>
<xsl:copy use-attribute-sets=“atts” >
<xsl:copy-of select=“XPath” />
…
90. Noviembre 2009 VI. XSLT 90
3. Transformación de documentos
Ejemplo
XML Entrada
<persons>
<person username="JS1">
<name>John</name>
<family-name>Smith</family-name>
</person>
<person username="MI1">
<name>Morka</name>
<family-name>Ismincius</family-name>
</person>
</persons>
XML Salida
<root>
<name username="JS1">John</name>
<name username="MI1">Morka</name>
</root>
91. Noviembre 2009 VI. XSLT 91
4. Estructuras de Control XSLT
Elementos para el control de flujo
<xsl:for-each select=“XPath” >
<xsl:if test=“condición” >
<xsl:choose>
<xsl:when test=“…”>
<xsl:otherwise>
<xsl:sort select=“XPath”>