Está en la página 1de 48

Hctor Snchez Santamara

Un documento XML contiene informacin estructurada Un documento est formado por una serie de elementos que identifican los contenidos informativos que contiene el documento y hacen explcita su estructura La estructura de un documento se define en un documento especial llamado DTD (Document Type Definition), o mediante un esquema XML

Las DTDs se utilizan tambin en SGML Una DTD indica:

Qu elementos pueden ser utilizados en un tipo de documento especfico Cuales son obligatorios y cuales opcionales Cuales son repetibles y cuales no En qu orden deben aparecer Cmo deben anidarse los elementos que conforman un documento

La DTD tambin contiene:

La declaracin de las entidades que se utilizan en el documento:


Recursos externos XML Recursos externos no XML: grficos, multimedia, etc. Texto que acta como comodn o abreviatura para palabras de uso frecuente o trminos que cambian con facilidad

La declaracin de notaciones (intrucciones para procesar las entidades no xml)

La DTD utiliza una sintxis especial para definir la estructura de un tipo de documento. Esta sintxis utiliza los siguientes elementos:
ELEMENT ATTLIST ENTITY NOTATION Comentarios

La DTD contiene declaraciones de los distintos elementos, entidades y notaciones que pueden aparecer en un documento Cada declaracin se escribe entre los caracteres <! Y >, indicando el tipo de componente que se declara, por ejemplo:
<!ELEMENT autor (#PCDATA)> <!ENTITY graf SYSTEM c:\graf.gif NDATA gif>

Los elementos se corresponden con los componentes estructurales de un documento, y definen su estructura lgica Un elemento puede contener datos de tipo carcter, otros elementos o ambos a la vez Los elementos pueden contenerse unos a otros, formando una jerarqua o rbol Un documento XML siempre tiene un elemento raz o elemento documento, que engloba a todos los dems

El elemento raz se debe llamar igual que su tipo de documento (por ejemplo, si creamos un tipo de documento articulo, el elemento raz deber llamarse articulo El nombre de los elementos puede contener caracteres a-z, A-Z y _. Los nombres de elementos son sensibles a la diferencia entre maysculas y minsculas
<Casa> no es igual que <casa>

La declaracin de un elemento en la DTD indica:

El nombre del elemento El contenido que puede tener, tambin llamada declaracin de contenido La declaracin de contenido se escribe entre parntesis La declaracin de un elemento se encierra entre las marcas <!ELEMENT y >

En la declaracin de contenido se puede indicar:

el nombre de otros elementos que pueden incluirse entre las etiquetas de inicio y de fin del elemento declarado No es necesario haber declarado un elemento para poder utilizarlo en la declaracin de contenido de otro elemento de la misma DTD la palabra reservada #PCDATA, que indica que el elemento puede contener datos de tipo carcter

#PCDATA
Esta declaracin de contenido indica que el elemento puede contener cualquier tipo de texto que no sea mark up. Es decir, cualquier letra menos <, > o & En lugar de estos caracteres, su usarn las entidades &lt; &gt; &amp; Las comillas simples y dobles pueden sustituirse por las entidades &quot; y &apos; Los elementos con contenido #PCDATA pueden contener referencias a entidades

Un elemento puede tener contenido de tipo:


datos #PCDATA, elementos (anida otros elementos) mixto (datos y elementos) vaco (el elemento no contiene ni datos ni elementos) y any (no hay restricciones para su contenido)

La declaracin de contenido ANY indica que un elemento puede contener cualquier combinacin de datos de tipo carcter y de elementos (no hay ninguna restriccin) Esta declaracin de contenido no se suele utilizar. Slo se usa en fases de diseo y prueba de DTDs

Si la declaracin de contenido del elemento contiene otros elementos, se puede indicar: Estas restricciones se indican escribiendo un carcter especial tras el nombre del elemento utilizado
si estos elementos son obligatorios o no y cuantas veces pueden aparecer

? el elemento puede aparecer 0 1 veces (opcional no repetible) * el elemento puede aparecer 0 ms veces (opcional y repetible) + el elemento debe aparecer 1 ms veces (obligatorio y repetible) el elemento debe aparecer 1 vez (obligatorio no repetible)

<!ELEMENT autor (nombre, apellido+)> <!ELEMENT catalog (product+)> <!ELEMENT product (specifications+, options?, price+, notes?)> <!ELEMENT specifications (#PCDATA, step)*> <!ELEMENT author (fname, surname, jobtitle?, address, bio)> <!ELEMENT content ( p | note )+> <!ELEMENT front (title, subt?, keyword*, author+, abstract?)>

Los elementos pueden tener atributos asociados, que permiten matizar su significado o rea de aplicacin. Ejemplo:

Los atributos tienen asociado un tipo de dato, un valor por defecto y un indicador que seala si son obligatorios o no

Una DTD para datos terminolgicos, puede tener un atributo que recoja la fecha de actualizacin de cada unidad terminolgica

Un atributo puede recoger un tipo de dato:


CDATA - datos de tipo carcter (valor1 | valor2 | | valorn) enumeracin ID - reservado para elementos destino de enlaces IDREF - reservado para elementos origen de enlaces ENTITY - referencias a entidades externas

Para indicar la obligatoriedad o carcter opcional de un atributo, se utilizan las palabras reservadas:

Los atributos no son repetibles

#IMPLIED - el atributo ser opcional #REQUIRED - el atributo es obligatorio #FIXED - el atributo es asignado por defecto por el sistema, y no es necesario que el autor lo indique

En la DTD, los atributos se declaran:

Mediante la palabra reservada ATTLIST Tras <!ATTLIST se escribe el nombre del elemento para el que se definen los atributos Tras el nombre del elemento, se escribe:
el nombre del atributo, su tipo, el indicador de obligatoriedad y su valor por defecto (si existe)

Ejemplos:
<!ATTLIST emp fecnac CDATA #IMPLIED> <!ATTLIST section link ID #REQUIRED lastupdate CDATA #IMPLIED> <!ATTLIST employee birthdate CDATA #REQUIRED personId CDATA #REQUIRED hiredate CDATA #REQUIRED company (IBM|Lotus) IBM>

Los elementos vacos no contienen datos de tipo carcter ni a otros elementos En la DTD, estos elementos se definen con una declaracin de contenido EMPTY
<!ELEMENT graphic EMPTY>

Los elementos vacos contienen atributos, y se suelen utilizar para incluir imgenes y componentes multimedia

Ejemplo elemento vaco


<!ELEMENT graphic EMPTY> <!ATTLIST id ID #REQUIRED src ENTITY #REQUIRED height CDATA #IMPLIED weight CDATA #IMPLIED>

Los elementos vacos se utilizan en los documentos de dos formas:


Con una etiqueta de inicio y de fin, sin indicar ningn contenido entre ellas:
<graphic id=01 src=form_1></graphic>

Con una nica etiqueta:


<graphic id=01 src=form_1 />

En una DTD se pueden aadir comentarios para documentar la semntica de los elementos y atributos que se declaran Los comentarios se aaden entre las marcas especiales <!-- y --> Ejemplo: <!ELEMENT graphic EMPTY> <!--este elemento se usar para incluir grficos-->

Los comentarios pueden abarcar ms de una lnea En el texto del comentario se pueden incluir los caracteres reservados que utiliza el mark up: <, >, &, etc. No pueden incluirse dos guiones seguidos a parte de los utilizados en su inicio y final

Los comentarios no pueden intercalarse entre otras declaraciones de la DTD: de elementos, atributos, entidades, etc. La siguiente DTD es errnea:
<!ELEMENT graphic <!--elemento para grficos --> EMPTY>

porque el comentario se ha intercalado en la declaracin del elemento graphic

Identificar los elementos estructurales del tipo de documento Indicar la frecuencia con la que pueden aparecer Indicar su carcter opcional u obligatorio Ver si su contenido se puede subdividir en otros elementos Indicar el orden en el que deben escribirse los elementos

Identificar atributos para los elementos Indicar el tipo de dato de los atributos Indicar si son obligatorios o no Ver si conviene asignarles un valor por defecto Considerar cmo vamos a incluir imgenes e hiperenlaces Como regla: todo lo que no se debe presentar en pantalla puede crearse mediante atributos

Las entidades determinan la estructura fsica de un documento XML Un documento XML siempre est formado al menos por una entidad - la entidad documento - que es el propio documento Todas las referencias a archivos no xml (imgenes, multimedia, etc.) se gestionan mediante entidades

Las entidades cumplen distintas funciones:


Insercin de caracteres propios de juegos de caracteres especficos (vocales acentuadas) y caracteres utilizados en el mark up Utilizacin de comodines para nombres no fijados o frases largas Insercin de componentes multimedia Modularizacin de los documentos

Las entidades se pueden clasificar en grupos no excluyentes:


Internas y/o externas
Las internas se resuelven en la entidad documento Las externas se refieren a un archivo externo Las procesables son documentos XML Las no procesables son archivos no XML: imgenes, HTML, video, etc.

Procesables (o de texto) y no procesables

Entidades Entidades Entidades Entidades

de carcter de texto internas de texto externas externas no procesables

Se utilizan en lugar de caracteres especiales (acentos, mark up, etc.) difciles de introducir en el teclado o que se codifican de forma diferente en distintas plataformas En el documento se har referencia a las entidades escribiendo su cdigo ASCII entre los caracteres &# y ;, por ejemplo:
<ciudad>Alcal&#122; de Henares</ciudad>

XML incluye entidades predefinidas para los caracteres <, >, &, y Para definir entidades para otros caracteres, tenemos que conocer su cdigo Unicode (ISO 10646) Se puede utilizar el cdigo decimal (precedido por &#) o el hexadecimal (precedido por &#x) seguidas de ;

Predefinidas en XML
lt < gt apos quot amp > &

Otras entidades tiles


aacute eacute iacute oacute uacute Aacute Eacute Iacute Oacute Uacute

Permiten sustituir una cadena de texto por unos caracteres ms fciles de recordar y de teclear Se declaran con la sintxis: Se referencian en el documento escribiendo el identificador de la entidad entre los caracteres & y ; por ejemplo:
<producto>&nuevoprod;</producto> <!ENTITY nuevoprod KTD-50-789890 A5>

Referencian documentos XML externos a la entidad documento, que pueden verse como si se tratase de una nica unidad Permiten la reutilizacin, el trabajo en colaboracin y la modularidad Se declaran con la sintxis: Se referencian con la sintxis habitual:
<docbody>&licencia;</docbody> <!ENTITY licencia SYSTEM c:\licencia.xml>

En un documento modular, slo la entidad documento puede contener una declaracin de tipo de documento Para poder asociar cada entidad de texto externa con un tipo de documento, se suele crear un documento XML con declaracin que slo contiene la declaracin de la entidad
<?xml version=1.0?> <!DOCTYPE capitulo SYSTEM capitulo.dtd [ <!ENTITY capitulo1 SYSTEM capitulo1.xml> ]> &capitulo1;

Referencian cualquier archivo que no sea XML Se declaran utilizando el calificador SYSTEM o PUBLIC, y van acompaadas de una notacin La notacin se escribe al comienzo de la DTD
<!NOTATION gif SYSTEM /programas/viewer.exe>

<!ENTITY logonscreen SYSTEM c:\fm1.gif NDATA gif>

Las notaciones pueden cumplir distintos propsitos:


Indicar el path del programa encargado de procesar la entidad (por ejemplo un visor especial) Apuntar a un lugar en el que existe documentacin sobre el formato etc.

La norma es abierta en este aspecto

Se utilizan exclusivamente en la DTD (se declaran en la DTD al igual que las entidades normales, pero se les hace referencia slo en la DTD) Se declaran utilizando un carcter especial: Para referenciarlas se escribe su nombre entre los caracteres % y ;, por ejemplo:

<!ENTITY % autorelem nombre,apellido+>

<!ELEMENT autores (noaut, %autorelem;)>

Ejemplo:

De esta forma, la declaracin de contenido del elemento body equivale a (subp, pp, foot) El modelo de contenido al que sustituye la entidad se podr reutilizar en otras partes de la DTD

<!ENTITY % p subp, pp, foot> <!ELEMENT body (%p;)>

La DTD puede incluirse totalmente junto al documento XML (cuidado, en XML documento es la DTD y los datos!) La DTD puede estar definida en un archivo externo al documento al que se har referencia desde este (en este caso, la DTD se podr reutilizar y mantener con facilidad La DTD puede estar definida en un documento externo, y tambin puede haber declaraciones en la entidad documento

DTD externa
<?xml head version=1.0?> <!ELEMENT head (body)> <!ELEMENT body (#PCDATA)>

Documento ejemplo
<?xml head version=1.0?> <!DOCTYPE head SYSTEM head.dtd> <head> <body>ejemplo</b ody> </head>

<?xml version=1.0?> <!DOCTYPE head [ <!ELEMENT head (body)> <!ELEMENT body (#PCDATA)> ]> <head> <body>ejemplo</body> </head>

DTD
<?xml version=1,0?> <!ELEMENT head (body)> <!ELEMENT body (#PCDATA)>

Documento XML
<?xml version=1.0?> <!DOCTYPE head SYSTEM head.dtd [ <!ENTITY car coche> ]> <head> <body>Ejemplo &car;</body> </head>

Las DTDs externas son ms fciles de mantener, ya que los cambios se aplican automticamente a todas sus instancias En el subconjunto interno de la DTD se suelen declarar imgenes que slo se usan en ese documento Las declaraciones del subconjunto interno sobreescriben a las del subconjunto externo

Un documento ser vlido si cumple las restricciones que se indican en su DTD Un documento ser bien formato si los elementos estn anidados correctamente, y si las entidades que referencia se han declarado Un documento puede estar bien formado y ser no vlido, ya que un documento XML puede no contener una declaracin de tipo de documento