Fernando Alonso Blázquez
XML(eXtensible Mark-up
Language)
27 de Mayo de 2004
Índice
• Introducción– ¿Qué es XML?– Ventajas de XML
• Construyendo documentos XML– Estructura jerárquica de elementos– Algunas normas– El prólogo– Elementos– Atributos– Secciones CDATA– Comentarios
• SAX2 API
Introducción
• Webs de asignaturas de la Escuela– Informática 3
• Intercambio de Información B2B
• Almacenamiento de Información– Producción automática de Libros,
Artículos, Manuales...
• Explotación de los Metadatos– Keywords, Indexing, Annotations,
Interdocument linking...
¿Qué es XML?
• Es un subconjunto de SGML (Standard Generalized Mark-up Language), simplificado y adaptado a Internet
• XML (eXtensible Mark-up Language) no es un lenguaje de marcado
• XML es un meta-lenguaje que permite definir lenguajes de marcado adecuados a usos determinados
<libro><autor>Antonio Muñoz Molina</autor><titulo>El Jinete Polaco</titulo><precio moneda=“EURO”>20</precio>
</libro>
Ventajas de XML
• Procesable por humanos y por software• Separa la información o el contenido
de su presentación o formato
• Ideal para transacciones B2B• Permite poderosas técnicas de
extracción de información y data-mining• Fácil análisis sintáctico
Construyendo documentos XML
• El elemento y sus atributos
<autor pais=“ES”>Antonio Muñoz Molina</autor>
• XML “bien-formado” (well-formed)– Cumple una serie de reglas descritas en la
especificación oficial de XML v1.0– World Wide Web Consortium (W3C)
Nombre del elemento
Nombre del atributo
Valor del atributo
Contenido del elemento
Etiqueta de fin
Estructura jerárquica de elementos
• Los elementos deben seguir una estructura de “árbol”, es decir, estríctamente jeráquica
• Los elementos deben estar correctamente anidados
• Los elementos no se pueden superponer entre ellos
• Sólo puede haber un elemento raíz, en el que están contenidos todos los demás
XML erróneo
<nombre>Topacio Jade<email></nombre>[email protected]</email>
Estructura jerárquica de elementos
mensaje
remitente
destinatario
asunto: Informe de ventas
texto
nombre: Topacio Jade
email: [email protected]
nombre: Esmeralda Turquesa
email: [email protected]
parrafo: Ya esta acabado el informe.
parrafo: Lo he dejado en el servidor del departamento.
Estructura jerárquica de elementos<?xml version="1.0" encoding="UTF-7"?><!DOCTYPE mensaje SYSTEM “mensaje.dtd”><mensaje>
<remitente><nombre>Topacio Jade</nombre><email>[email protected]</email>
</remitente><destinatario>
<nombre>Esmeralda Turquesa</nombre><email>[email protected]</email>
</destinatario><asunto>Informe de ventas</asunto><texto>
<parrafo> Ya esta acabado el informe.</parrafo>
<parrafo> Lo he dejado en el servidor del departamento.
</parrafo></texto>
</mensaje>
Algunas normas
• Todas las etiquetas tienen que estar debidamente “cerradas” – etiqueta de cierre que se corresponda
con la de apertura
• Las etiquetas sin contenido tienen una sintaxis especial
<animal> Perro
<raza tipo="Cocker Spaniel">
<animal> Vaca
<raza tipo="Holstein"><animal> Perro
<raza tipo="Cocker Spaniel">
</animal>
<animal> Vaca
<raza tipo="Holstein">
</animal> <animal> Perro
<raza tipo="Cocker Spaniel" />
</animal>
<animal> Vaca
<raza tipo="Holstein" />
</animal>
Algunas normas
• Un nombre de elemento, atributo, entidad, etc., debe empezar siempre por una letra.
• Las letras “XML” (o “xml” o “xMl”,etc.) no pueden usarse como caracteres iniciales de un nombre de elemento, atributo, etc.
• XML es “case-sensitive”: <autor><Autor>
• El uso del espacio en blanco y los saltos de línea sólo se tienen en cuenta cuando aparecen en el valor de un atributo, o cuando se indica su significancia.
Marcado y datos
• Las construcciones como etiquetas, referencias de entidad y declaraciones se denominan “marcas” (mark-up) y son las partes que el analizador sintáctico (parser) espera comprender
• El resto del documento, que se encuentra entre las “marcas”, son los datos que resultan entendibles por las personas
• Marcas en un documento XML son aquellas que comienzan con “<“ y terminan con “>”
• En el caso de referencias de entidad, el carácter inicial es “&” y el final “;”
El prólogo
• Es opcional• La primera línea permite especificar:
– La versión de XML (de momento sólo 1.0)– La codificación de carácter (US-ASCII,
UTF-8, UTF-7, UCS-2, EUC-JP, Big5, ISO-8859-1, etc.)
• La segunda línea define el tipo de documento, especificando qué DTD (Document Type Definitions) valida y define los datos que contiene
<?xml version="1.0" encoding="UTF-7”?><!DOCTYPE mensaje SYSTEM “mensaje.dtd”>
<?xml version="1.0" encoding=“ISO-8859-1”?><!DOCTYPE HTML PUBLIC “-/ /W3C/ /DTD HTML 3.2 Final/ /EN”>
<?xml version="1.0" encoding=“Big5”?>
Elementos
• Elementos con contenido
• Elementos vacíos
<nombre>Fulano Mengánez</nombre>
<aviso tipo=“emergencia” gravedad=“mortal”>Que no cunda el pánico</aviso>
<identificador referencia=“1234567890”/>
<linea-horizontal/>
Atributos
• Manera de incorporar características o propiedades a los elementos
• Pueden estar marcados entre comillas simples (‘) o dobles (“)
• Un concepto se puede representar de diversas formas: consistencia
<verdura clase=“zanahoria” longitud=’15” y media’>
<cita texto=“’Hola, buenos días’, dijo él”>
<gato><nombre>Micifú</nombre><raza>Persa</raza></gato>
<gato raza=“Persa”>Micifú</gato>
<gato raza=“Persa” nombre=“Micifú”/>
Entidades predefinidas
• En XML 1.0 se definen cinco entidades para representar caracteres especiales y que no se interpretan como marcado por el procesadr XML
Entidad Caracter& &< <> >' ‘" “
Secciones CDATA
• Construcción en XML que permite especificar datos, utilizando cualquier carácter, especial o no, sin que se interprete como marcado XML.
• La razón de esta construcción es que a veces es necesario para los autores de documentos XML, poder leerlo facilmente sin tener que descifrar los códigos de entidades. Especialmente cuando son muchas.
<ejemplo>
<HTML>
<HEAD><TITLE>Rock & ROLL</TITLE>
</HEAD>
</ejemplo>
<ejemplo>
<![CDATA[
<HTML>
<HEAD><TITLE>Rock & Roll</TITLE></HEAD>
]]>
</ejemplo>
Comentarios
• Insertados en el documento XML• Ignorados por el procesado de la
información y las reproducciones del documento
• Tienen el mismo formato que en HTML– Comienzan por “<!--” y terminan con “-->”
• Se pueden introducir en cualquier lugar de la instancia o del prólogo, pero nunca dentro de las declaraciones, etiquetas u otros comentarios.
Fernando Alonso Blázquez
DTD(Document Type Definition)
27 de Mayo de 2004
Índice
• Validación y definición de documentos– DTD: Document Type Definition
• Declaraciones de tipo Elemento– Modelos de contenido
• Declaraciones de lista de Atributos– Tipos de Atributos
• Declaración de Entidades
Document Type Definition (DTD)
• Es como definir nuestro propio lenguaje de marcado para una aplicación específica
• Define los tipos de elementos, atributos y entidades permitidas, y puede expresar algunas limitaciones para combinarlos
• Puede residir en un fichero externo y ser compartido por varios documentos XML.
• O bien puede estar contenido en el propio documento XML, como parte de su declaración de su prólogo.
• El documento XML que se ajusta a su DTD, se denomina “valido” ”bien-formado”
Ejemplos de DTD<!DOCTYPE etiqueta [<!ELEMENT etiqueta (nombre, calle, ciudad, pais, codigo)><!ELEMENT nombre (#PCDATA)><!ELEMENT calle (#PCDATA)><!ELEMENT ciudad (#PCDATA)><!ELEMENT pais (#PCDATA)><!ELEMENT codigo (#PCDATA)>]><etiqueta> <nombre>Topacio Jade</nombre> <calle>Minas de Moria, 13</calle> <ciudad>Azanulbizar</ciudad> <pais>Khuzdul</pais> <codigo>78125</codigo></etiqueta>
<!DOCTYPE coche SYSTEM “http://www.tecnun.es/coche.dtd”><coche> <modelo>...</modelo> ...</coche>
Declaraciones de tipo Elemento
• Deben empezar con “<!ELEMENT” seguidas por el identificador genérico del elemento que se declara
• A continuación tienen una especificación del contenido
• Ejemplo:
• <!ELEMENT receta (titulo, ingredientes, procedimiento)>
Documento XML válido de acuerdo al DTD anterior
<receta> <titulo>Arroz cocido</titulo> <ingredientes>Arroz</ingredientes> <procedimiento>Cocer el arroz</procedimiento></receta>Documento XML no válido
<receta>
<parrafo>La siguiente receta me la pasó Alvaro</parrafo> <titulo>Arroz cocido</titulo> <ingredientes>Arroz</ingredientes> <procedimiento>Cocer el arroz</procedimiento></receta>
Especificación de contenido• EMPTY: No tiene contenido.
<!ELEMENT linea-horizontal EMPTY>
• ANY: Puede tener cualquier contenido. Es mejor no usarla y estructurar adecuadamente los documentos<!ELEMENT batiburrillo ANY>
• Mixed: Puede tener caracteres o una mezcla de caracteres y sub-elementos especificados<!ELEMENT enfasis (#PCDATA)><!ELEMENT parrafo (#PCDATA|enfasis)*>
• Element: Sólo puede contener sub-elementos especificados<!ELEMENT mensaje (remite, texto)>
Modelos de contenido
• <!ELEMENT aviso (parrafo)>– <aviso> sólo puede contener un <parrafo>
• <!ELEMENT aviso (titulo, parrafo>– <aviso> debe contener un elemento
<titulo> seguido de un elemento <parrafo>
• <!ELEMENT aviso (parrafo | grafico)>– La barra vertical “|” indica opción. El número
de opciones no está limitado y se pueden agrupar usando paréntesis
• <!ELEMENT aviso (titulo, (parrafo | grafico))>– <aviso> debe contener un <titulo> seguido
de un <parrafo> o un <grafico>
Modelos de contenido
• Indicador de frecuencia– Siguen directamente a un identificador
general, una secuencia o una opción– No pueden ir precedidos por espacios en
blanco
<!ELEMENT aviso (titulo?, (parrafo+, grafico)*)>
Indicador
Frecuencia
? Opcional (0 ó 1 vez)* Opcional y repetible
(0 ó más veces)+ Necesario y repetible
(1 ó más veces)
Declaración de lista de Atributos
• Atributos– Añaden información adicional a los elementos– Sólo se pueden especificar una vez y en
cualquier orden– No pueden contener sub-atributos
• Declaración– Empiezan con “<!ATTLIST”– Identificador del elemento al que se aplica– Nombre del atributo– Tipo– Valor por defecto
<mensaje prioridad=“urgente”> <de>Topacio Jade</de> <a>Esmeralda Turquesa</a> <texto idioma=“español”> Hay que preparar los informes de junio </texto></mensaje>
<!ELEMENT mensaje (de, a, texto)><!ATTLIST mensaje prioridad (normal | urgente) normal><!ELEMENT texto (#PCDATA)><!ATTLIST texto idioma CDATA #REQUIRED>
Declaración de lista de Atributos
• #REQUIRED: Es obligatorio especificar el atributo. No tiene valor por defecto.
• #IMPLIED: Se puede omitir el atributo, sin que se adopte automáticamente un valor por defecto
<!ATTLIST IMG URL CDATA #REQUIRED
ALT CDATE #IMPLIED>
Tipos de Atributos
• Atributos CDATA (character data): Pueden contener casi cualquier cosa
<!ATTLIST mensaje fecha CDATA #REQUIRED>
< mensaje fecha=“21 de Mayo de 2003”>
• Atributos enumerados: Sólo pueden contener un valor de entre un número reducido de opciones
<!ATTLIST mensaje prioridad (normal | urgente) normal>
Tipos de Atributos
• Atributos ID e IDREF– El tipo ID permite que un atributo
determinado tenga un nombre único que podrá ser referenciado por un atributo de otro elemento que sea de tipo IDREF
– Permite implementar un sistema de hipervínculos en un documento XML
<!ELEMENT enlace EMPTY>
<!ATTLIST enlace destino IDREF #REQUIRED>
<!ELEMENT capitulo (parrafo)*>
<!ATTLIST capitulo referencia ID #IMPLIED>
Declaración de Entidades
• La Entidades se utilizan para hacer referencia a objetos (ficheros, páginas Web, imágenes,...) que no deben ser analizados sintácticamente según las reglas de XML
• Se declaran mediante “<!ENTITY”• Puede usarse para declarar una
abreviatura que se utiliza como una forma más corta de algunos textos
• En otras ocasiones es una referencias a un objeto externo o local
Tipos de Entidades
• Las entidades pueden ser:– Internas – Externas– Analizadas o No analizadas– Generales o Parámetro
• Entidades generales internas:
– Son básicamente abreviaturas definidas en la sección del DTD del documento XML
– Son siempre entidades analizadas
<!DOCTYPE texto[<!ENTITY ovni “Objeto Volador No Identificado”>]><texto> <titulo> Durmiendo en clase, Topacio soñó con un &ovni; </titulo></texto>
Tipos de Entidades
• Entidades generales externas analizadas
<!ENTITY intro SYSTEM “http://www.tecnun.es/intro.xml>
• Entidades no analizadas
<!ENTITY logo SYSTEM “http://www.tecnun.es/logo.gif>
• Entidades parámetro Internas
<!DOCTYPE texto[ <!ENTITY % elemento-alf “!ELEMENT ALF (#PCDATA)>”> %elemento-alf; ]>
• Entidades parámetro Externas
<!DOCTYPE texto[ <!ENTITY % elemento-alf SYSTEM “alf.ent”> ... %elemento-alf; ]>
Ejemplo de DTD
<?xml encoding=“UTF-7”?>
<!ELEMENT lista (persona)+><!ELEMENT persona (nombre, email*, relacion?)><!ATTLIST persona id ID #REQUIRED><!ATTLIST persona sexo (hombre | mujer) #IMPLIED><!ELEMENT nombre (#PCDATA)><!ELEMENT email (#PCDATA)><!ELEMENT relacion EMPTY><!ATTLIST relacion amigo-de IDREFS #IMPLIED enemigo-de IDREFS #IMPLIED>
<?xml version=“1.0”?>
<!DOCTYPE lista SYSTEM “Lista.dtd”><lista> <persona sexo=“hombre” id=“Topacio”> <nombre>Topacio Jade</nombre> <email>[email protected]</email> <relacion amigo-de=“esmeralda”> </persona> <persona sexo=“mujer” id=“esmeralda”> <nombre>Esmeralda Turquesa</nombre> <email>[email protected]</email> </persona></lista>