SlideShare une entreprise Scribd logo
1  sur  92
XML Básico
Óliver Centeno Álvarez
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)
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
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
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
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
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>
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>
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
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.
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” …>
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
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
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">
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
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 -->
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 &
 &aacute; &ntilde; &lt; …
 Externas/internas
 Analizadas/no analizadas
 Generales/Parámetro
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)”>
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 /
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>
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
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
I. Introducción a XML
Ejercicios
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
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
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 “…”>
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)>
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
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
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>
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
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>
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>
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;
]>
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>
II. Creación de DTDs
Ejercicios
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
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
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
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
 …
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"/>
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?
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
Noviembre 2009 III. Espacios de Nombres y XSD 44
3. XSD
 Ejemplo XSD:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.myweb.com"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
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>
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>
 …
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”>
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">
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>
Noviembre 2009 III. Espacios de Nombres y XSD 50
3. XSD
 Ejemplo 2:
<!-- Extensión de tipos complejos -->
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
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>
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>
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
 …
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>
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>
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>
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>
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
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” />
4. XSD
Veamos unos Ejemplos
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
Noviembre 2009 XML Básico 62
IV. XML Canónico
1. Motivación
2. XML Canónico
3. Canonizar XML
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
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
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
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
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?>
Noviembre 2009 IV. XML Canónico 68
3. Canonizar XML
 Ejemplo 2
 Entrada
 <!DOCTYPE doc [<!ATTLIST e9 attr CDATA "default">]>
<doc>
<e1 />
<e2 ></e2>
<e3 name = "elem3" id="elem3" />
<e4 name="elem4" id="elem4" ></e4>
<e5 a:attr="out" b:attr="sorted" attr2="all" attr="I'm"
xmlns:b="http://www.ietf.org"
xmlns:a="http://www.w3.org"
xmlns="http://example.org"/>
<e6 xmlns="" xmlns:a="http://www.w3.org">
<e7 xmlns="http://www.ietf.org">
<e8 xmlns="" xmlns:a="http://www.w3.org">
<e9 xmlns="" xmlns:a="http://www.ietf.org"/>
</e8>
</e7>
</e6>
</doc>
Noviembre 2009 IV. XML Canónico 69
3. Canonizar XML
 Ejemplo 2
 Salida
 <doc>
<e1></e1>
<e2></e2>
<e3 id="elem3" name="elem3"></e3>
<e4 id="elem4" name="elem4"></e4>
<e5 xmlns="http://example.org"
xmlns:a="http://www.w3.org" xmlns:b="http://www.ietf.org"
attr="I'm" attr2="all" b:attr="sorted" a:attr="out"></e5>
<e6 xmlns:a="http://www.w3.org">
<e7 xmlns="http://www.ietf.org">
<e8 xmlns="">
<e9 xmlns:a="http://www.ietf.org"
attr="default"></e9>
</e8>
</e7>
</e6>
</doc>
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&#x0d;&#10;Second line</text>
<value>&#x32;</value>
<compute>
<![CDATA[value>"0" && value<"10" ?"valid":"error"]]>
</compute>
<compute expr='value>"0" &amp;&amp; value&lt;"10"
?"valid":"error"'>valid</compute>
<norm attr=' &apos; &#x20;&#13;&#xa;&#9; &apos; '/>
<normNames attr=' A &#x20;&#13;&#xa;&#9; B '/>
<normId id=' &apos; &#x20;&#13;&#xa;&#9; &apos; '/>
</doc>
Noviembre 2009 IV. XML Canónico 71
3. Canonizar XML
 Ejemplo 3
 Salida
 <doc>
<text>First line&#xD;
Second line</text>
<value>2</value>
<compute>value&gt;"0" &amp;&amp; value&lt;"10"
?"valid":"error"</compute>
<compute expr="value>&quot;0&quot; &amp;&amp;
value&lt;&quot;10&quot;
?&quot;valid&quot;:&quot;error&quot;">valid</compute>
<norm attr=" ' &#xD;&#xA;&#x9; ' "></norm>
<normNames attr="A &#xD;&#xA;&#x9;
B"></normNames>
<normId id="' &#xD;&#xA;&#x9; '"></normId>
</doc>
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
Noviembre 2009 XML Básico 73
V. XPath
1. Introducción a XPath
2. Predicados XPath
3. Funciones XPath
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
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
 /*/*
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]
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
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)
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
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
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
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"?>
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” />
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
VI. XSLT
Veamos unos Ejemplos
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">
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
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” />
 …
Noviembre 2009 VI. XSLT 89
3. Transformación de documentos
 Ejemplo
<xsl:stylesheet version="1.0" xmlns:xsl =
"http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/persons">
<root>
<xsl:apply-templates select="person"/>
</root>
</xsl:template>
<xsl:template match="person">
<name username="{@username}">
<xsl:value-of select="name" />
</name>
</xsl:template>
</xsl:stylesheet>
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>
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”>
VI. XSLT
Veamos unos Ejemplos

Contenu connexe

Tendances

4.2 mecanismos y_funciones_de_los_manejadores_de_dispositivos
4.2 mecanismos y_funciones_de_los_manejadores_de_dispositivos4.2 mecanismos y_funciones_de_los_manejadores_de_dispositivos
4.2 mecanismos y_funciones_de_los_manejadores_de_dispositivosbeymarlopez
 
Maquinas secuenciales y Autómatas Finitos
Maquinas secuenciales y Autómatas FinitosMaquinas secuenciales y Autómatas Finitos
Maquinas secuenciales y Autómatas FinitosShirlid .n
 
Presentacion modelos de Software
Presentacion modelos de SoftwarePresentacion modelos de Software
Presentacion modelos de SoftwareMax Power
 
Metodología de desarrollo de software basada en componentes
Metodología de desarrollo de software basada en componentesMetodología de desarrollo de software basada en componentes
Metodología de desarrollo de software basada en componentesEmmanuel Fontán
 
2.5 planificación del procesador, niveles objetivos y criterios de planificac...
2.5 planificación del procesador, niveles objetivos y criterios de planificac...2.5 planificación del procesador, niveles objetivos y criterios de planificac...
2.5 planificación del procesador, niveles objetivos y criterios de planificac...lupita zume
 
1.2 arquitectura en 2 capas
1.2 arquitectura en 2 capas1.2 arquitectura en 2 capas
1.2 arquitectura en 2 capasEsbeyiz
 
Mapa conceptual archivos en java
Mapa conceptual archivos en javaMapa conceptual archivos en java
Mapa conceptual archivos en javaK Manuel TN
 
Linux ud7 - gestion de procesos
Linux   ud7 - gestion de procesosLinux   ud7 - gestion de procesos
Linux ud7 - gestion de procesosJavier Muñoz
 
PHP and MySQL : Server Side Scripting For Web Development
PHP and MySQL : Server Side Scripting For Web DevelopmentPHP and MySQL : Server Side Scripting For Web Development
PHP and MySQL : Server Side Scripting For Web DevelopmentEdureka!
 
RESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPTRESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPTAlejito Laaz
 
Mapa mental sistema operativo eddier
Mapa mental sistema operativo eddierMapa mental sistema operativo eddier
Mapa mental sistema operativo eddierPSM san cristobal
 
Ventajas y Desventajas de la POO
Ventajas y Desventajas de la POOVentajas y Desventajas de la POO
Ventajas y Desventajas de la POOjoelyar
 
Tutorial de XML en PDF
Tutorial de XML en PDFTutorial de XML en PDF
Tutorial de XML en PDFAbrirllave
 
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Micael Gallego
 

Tendances (20)

4.2 mecanismos y_funciones_de_los_manejadores_de_dispositivos
4.2 mecanismos y_funciones_de_los_manejadores_de_dispositivos4.2 mecanismos y_funciones_de_los_manejadores_de_dispositivos
4.2 mecanismos y_funciones_de_los_manejadores_de_dispositivos
 
Maquinas secuenciales y Autómatas Finitos
Maquinas secuenciales y Autómatas FinitosMaquinas secuenciales y Autómatas Finitos
Maquinas secuenciales y Autómatas Finitos
 
Presentacion modelos de Software
Presentacion modelos de SoftwarePresentacion modelos de Software
Presentacion modelos de Software
 
Metodología de desarrollo de software basada en componentes
Metodología de desarrollo de software basada en componentesMetodología de desarrollo de software basada en componentes
Metodología de desarrollo de software basada en componentes
 
2.5 planificación del procesador, niveles objetivos y criterios de planificac...
2.5 planificación del procesador, niveles objetivos y criterios de planificac...2.5 planificación del procesador, niveles objetivos y criterios de planificac...
2.5 planificación del procesador, niveles objetivos y criterios de planificac...
 
1.2 arquitectura en 2 capas
1.2 arquitectura en 2 capas1.2 arquitectura en 2 capas
1.2 arquitectura en 2 capas
 
Android Studio
Android StudioAndroid Studio
Android Studio
 
Mapa conceptual archivos en java
Mapa conceptual archivos en javaMapa conceptual archivos en java
Mapa conceptual archivos en java
 
Linux ud7 - gestion de procesos
Linux   ud7 - gestion de procesosLinux   ud7 - gestion de procesos
Linux ud7 - gestion de procesos
 
PHP and MySQL : Server Side Scripting For Web Development
PHP and MySQL : Server Side Scripting For Web DevelopmentPHP and MySQL : Server Side Scripting For Web Development
PHP and MySQL : Server Side Scripting For Web Development
 
Metodo v
Metodo vMetodo v
Metodo v
 
Servicios web
Servicios webServicios web
Servicios web
 
RESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPTRESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPT
 
Php.ppt
Php.pptPhp.ppt
Php.ppt
 
Mapa mental sistema operativo eddier
Mapa mental sistema operativo eddierMapa mental sistema operativo eddier
Mapa mental sistema operativo eddier
 
Ventajas y Desventajas de la POO
Ventajas y Desventajas de la POOVentajas y Desventajas de la POO
Ventajas y Desventajas de la POO
 
Cliente servidor
Cliente servidorCliente servidor
Cliente servidor
 
Tutorial de XML en PDF
Tutorial de XML en PDFTutorial de XML en PDF
Tutorial de XML en PDF
 
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
 
Php and MySQL
Php and MySQLPhp and MySQL
Php and MySQL
 

En vedette (18)

Java en Tiempo Real
Java en Tiempo RealJava en Tiempo Real
Java en Tiempo Real
 
Joomla!
Joomla!Joomla!
Joomla!
 
My SQL
My SQLMy SQL
My SQL
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 
Microsoft Test Manager 2010
Microsoft Test Manager 2010Microsoft Test Manager 2010
Microsoft Test Manager 2010
 
Sun Java System Web Server 6.1
Sun Java System Web Server 6.1Sun Java System Web Server 6.1
Sun Java System Web Server 6.1
 
Azure
AzureAzure
Azure
 
ATL
ATLATL
ATL
 
Spring framework 3
Spring framework 3Spring framework 3
Spring framework 3
 
Liferay
LiferayLiferay
Liferay
 
Herramientas Java
Herramientas JavaHerramientas Java
Herramientas Java
 
Red Hat Enterprise Linux 5
Red Hat Enterprise Linux 5Red Hat Enterprise Linux 5
Red Hat Enterprise Linux 5
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
TFS 10
TFS 10TFS 10
TFS 10
 
Métrica v3 y RUP
Métrica v3 y RUPMétrica v3 y RUP
Métrica v3 y RUP
 
SOA y Web Services
SOA y Web ServicesSOA y Web Services
SOA y Web Services
 
JavaFX 2
JavaFX 2JavaFX 2
JavaFX 2
 
Web services y java
Web services y javaWeb services y java
Web services y java
 

Similaire à XML Básico (20)

Xml
XmlXml
Xml
 
Presentación muy chula ApéndiceTecnologíaXML.ppt
Presentación muy chula ApéndiceTecnologíaXML.pptPresentación muy chula ApéndiceTecnologíaXML.ppt
Presentación muy chula ApéndiceTecnologíaXML.ppt
 
Diferencias entre XML y HTML
Diferencias entre XML y HTMLDiferencias entre XML y HTML
Diferencias entre XML y HTML
 
Unidad 1 lenguajes de marcas
Unidad 1   lenguajes de marcasUnidad 1   lenguajes de marcas
Unidad 1 lenguajes de marcas
 
Colima2000
Colima2000Colima2000
Colima2000
 
XML de A a Z
XML de A a ZXML de A a Z
XML de A a Z
 
Android de la A a la Z - Unidad 5
Android de la A a la Z - Unidad 5Android de la A a la Z - Unidad 5
Android de la A a la Z - Unidad 5
 
Guía+básica+de+características+de+archivos+.pdf
Guía+básica+de+características+de+archivos+.pdfGuía+básica+de+características+de+archivos+.pdf
Guía+básica+de+características+de+archivos+.pdf
 
XML
XMLXML
XML
 
Archivo xml
Archivo xmlArchivo xml
Archivo xml
 
Archivo xml
Archivo xmlArchivo xml
Archivo xml
 
Manual XML
Manual XMLManual XML
Manual XML
 
Lenguaje XML
Lenguaje XMLLenguaje XML
Lenguaje XML
 
Curso xml
Curso xmlCurso xml
Curso xml
 
Tema 2
Tema 2Tema 2
Tema 2
 
Presentación1 bricio vera
Presentación1 bricio veraPresentación1 bricio vera
Presentación1 bricio vera
 
infografíaxml
infografíaxmlinfografíaxml
infografíaxml
 
Xml
XmlXml
Xml
 
Introduccion al xml
Introduccion al  xmlIntroduccion al  xml
Introduccion al xml
 
Xml
XmlXml
Xml
 

Plus de Oliver Centeno

Plus de Oliver Centeno (6)

Metodologías ágiles
Metodologías ágilesMetodologías ágiles
Metodologías ágiles
 
Enterprise Library 5
Enterprise Library 5Enterprise Library 5
Enterprise Library 5
 
MSS 2010
MSS 2010MSS 2010
MSS 2010
 
PMP, Project Management Professional
PMP, Project Management ProfessionalPMP, Project Management Professional
PMP, Project Management Professional
 
Hibernate
HibernateHibernate
Hibernate
 
OSGi
OSGiOSGi
OSGi
 

XML Básico

  • 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 &  &aacute; &ntilde; &lt; …  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
  • 23. I. Introducción a XML Ejercicios
  • 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>
  • 36. II. Creación de DTDs Ejercicios
  • 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
  • 44. Noviembre 2009 III. Espacios de Nombres y XSD 44 3. XSD  Ejemplo XSD: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.myweb.com" elementFormDefault="qualified"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
  • 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>
  • 50. Noviembre 2009 III. Espacios de Nombres y XSD 50 3. XSD  Ejemplo 2: <!-- Extensión de tipos complejos --> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="fullpersoninfo"> <xs:complexContent> <xs:extension base="personinfo"> <xs:sequence> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
  • 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” />
  • 60. 4. XSD Veamos unos Ejemplos
  • 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?>
  • 68. Noviembre 2009 IV. XML Canónico 68 3. Canonizar XML  Ejemplo 2  Entrada  <!DOCTYPE doc [<!ATTLIST e9 attr CDATA "default">]> <doc> <e1 /> <e2 ></e2> <e3 name = "elem3" id="elem3" /> <e4 name="elem4" id="elem4" ></e4> <e5 a:attr="out" b:attr="sorted" attr2="all" attr="I'm" xmlns:b="http://www.ietf.org" xmlns:a="http://www.w3.org" xmlns="http://example.org"/> <e6 xmlns="" xmlns:a="http://www.w3.org"> <e7 xmlns="http://www.ietf.org"> <e8 xmlns="" xmlns:a="http://www.w3.org"> <e9 xmlns="" xmlns:a="http://www.ietf.org"/> </e8> </e7> </e6> </doc>
  • 69. Noviembre 2009 IV. XML Canónico 69 3. Canonizar XML  Ejemplo 2  Salida  <doc> <e1></e1> <e2></e2> <e3 id="elem3" name="elem3"></e3> <e4 id="elem4" name="elem4"></e4> <e5 xmlns="http://example.org" xmlns:a="http://www.w3.org" xmlns:b="http://www.ietf.org" attr="I'm" attr2="all" b:attr="sorted" a:attr="out"></e5> <e6 xmlns:a="http://www.w3.org"> <e7 xmlns="http://www.ietf.org"> <e8 xmlns=""> <e9 xmlns:a="http://www.ietf.org" attr="default"></e9> </e8> </e7> </e6> </doc>
  • 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&#x0d;&#10;Second line</text> <value>&#x32;</value> <compute> <![CDATA[value>"0" && value<"10" ?"valid":"error"]]> </compute> <compute expr='value>"0" &amp;&amp; value&lt;"10" ?"valid":"error"'>valid</compute> <norm attr=' &apos; &#x20;&#13;&#xa;&#9; &apos; '/> <normNames attr=' A &#x20;&#13;&#xa;&#9; B '/> <normId id=' &apos; &#x20;&#13;&#xa;&#9; &apos; '/> </doc>
  • 71. Noviembre 2009 IV. XML Canónico 71 3. Canonizar XML  Ejemplo 3  Salida  <doc> <text>First line&#xD; Second line</text> <value>2</value> <compute>value&gt;"0" &amp;&amp; value&lt;"10" ?"valid":"error"</compute> <compute expr="value>&quot;0&quot; &amp;&amp; value&lt;&quot;10&quot; ?&quot;valid&quot;:&quot;error&quot;">valid</compute> <norm attr=" ' &#xD;&#xA;&#x9; ' "></norm> <normNames attr="A &#xD;&#xA;&#x9; B"></normNames> <normId id="' &#xD;&#xA;&#x9; '"></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” />  …
  • 89. Noviembre 2009 VI. XSLT 89 3. Transformación de documentos  Ejemplo <xsl:stylesheet version="1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" > <xsl:output method="xml" indent="yes"/> <xsl:template match="/persons"> <root> <xsl:apply-templates select="person"/> </root> </xsl:template> <xsl:template match="person"> <name username="{@username}"> <xsl:value-of select="name" /> </name> </xsl:template> </xsl:stylesheet>
  • 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”>