Nothing Special   »   [go: up one dir, main page]

UT8 - XML - Documentos - Bien - Formado

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 51

UT8.

XML Documentos bien formados

¿Qué es XML?...................................................................................................................3

XML: Estructura y sintaxis…………………………………………………………….…....……..6

Documentos XML bien formados.............................................................................7

Elementos........................................................................................................................12

Atributos.........................................................................................................................15

Entidades predefinidas..............................................................................................17

Secciones CDDATA.....................................................................................................17

Comentarios....................................................................................................................18

Definición de tipo de documento (DTD, Document Type Defi-


nition)……………………………………………………………………………….……………………………18

Declaración tipo elemento............................................................................................19

Declaraciones de atributos...................................................................................24

Tipos de atributos……………………………………………………………………………………………………..27

Declaraciones de entidades....................................................................................30

Utilización de espacios de nombres en XML..........................................33

Uso del atributo xmlns……………………………………………………………………………….…35


Página 1 de 51
UT8. XML Documentos bien formados

Espacios de nombres por defecto........................................................................36

Uso de espacios por defecto en etiquetas interiores..................................39

Cancelar espacios por defecto..............................................................................39

Validación de documentos XML.........................................................................40

Ejercicios………………………………………………………………………………………………………………………….42

Página 2 de 51
UT8. XML Documentos bien formados

¿Qué es XML?

Una buena forma de entender en un primer vistazo qué es el lenguaje XML


es compararlo con el sobradamente conocido lenguaje HTML.

Veamos primero un trozo de código HTML:

<h1>
Comedor
</h1>
<ul>
<li>
<b>Mesa redonda de madera de arce</b>.
El fabricante es <i>Muebles Albacete</i> y su precio 40000.
</li>
<li>
<b>Dos sillas de madera de arce</b>, de excelente
calidad, con un coj&iacute;n azul cada una.
</li>
<li>
<b>3 sillas de madera de roble</b>.
</li>
</ul>

Y ahora un trozo de código XML equivalente:

<comedor>
<mesa tipo="redonda" madera="arce">
<fabricante>Muebles Albacete</fabricante>
<precio>40000</precio>
</mesa>
<silla madera="arce">
<cantidad>2</cantidad>
<calidad>excelente</calidad>
<cojin incluido="sí">
<color>azul</color>
</cojin>
</silla>
Página 3 de 51
UT8. XML Documentos bien formados

<silla madera="roble">
<cantidad>3</cantidad>
<calidad>normal</calidad>
</silla>
</comedor>

Como puede observarse, el aspecto general del fichero es vagamente similar


al de un texto HTML. La diferencia fundamental es que las etiquetas no son
estándar, sino que han sido definidas por el usuario.

Partes del documento:

En general, un documento XML bien formado tiene tres partes:

 Prólogo: que contiene la declaración de documento XML, la


declaración de tipo de documento (que define la gramática que debe
cumplir el mismo), y una parte adicional, que puede incluir comentarios
o instrucciones de procesamiento
 Elemento raíz: una etiqueta que contiene (envuelve) a las demás
etiquetas del documento

 Miscelánea: una parte final, opcional, que puede contener


comentarios y/o instrucciones de procesamiento

XML son las siglas de eXtensible Markup Language, lenguaje extensible de


marcas. Se trata de un estándar del Word Wide Web Consortium
(http://www.w3.org es una referencia básica de XML).

XML deriva del lenguaje de marcas SGML (un estándar ISO, concretamente
el ISO-8879). SGML era demasiado complejo y, por tanto, inadecuado para
la Web y HTML no evolucionaba suficientemente. La intención del W3C fue,
la de crear un lenguaje que agrupase la facilidad de aplicación del HTML y la
riqueza semántica del SGML. Así nació XML.

Página 4 de 51
UT8. XML Documentos bien formados

Actualmente, XML está empezando a desempeñar un papel muy importante


en el intercambio de una gran variedad de información en la web y en otros
contextos.

“El Lenguaje Extensible de Marcas, abreviado XML, describe una clase de


objetos de datos llamados XML y parcialmente describe el comportamiento
de programas de computadores que pueden procesarlos”.

Las bases del XML

A diferencia de HTML, XML no está limitado a un etiquetado predefinido.


Dentro de un documento XML puede definir sus propias etiquetas.
Un documento XML es un archivo de texto con la extensión .xml que puede
editarse con cualquier editor de texto y que es interpretado por los
navegadores web. Se compone de etiquetas que pueden personalizarse. Sin
embargo, a diferencia de HTML, el resultado puede ser reutilizado.

<?xml version="1.0" encoding="ISO-8859-1"?>


<tarjetavisita>
<apellido> Perez</apellido>
<nombre> Perez</nombre>
<sociedad />
<profesion> profesor</profesion>
<direccion>
<numero> 10</numero>
<calle> C/ Pez</calle>
<cpostal> 28002</cpostal>
<poblacion> Madrid</poblacion>
</direccion>
<ntelfcasa> 911234567</ntelfcasa >
<ntelfmovil> 615234567</ntelfmovil >

Página 5 de 51
UT8. XML Documentos bien formados

<nfax />
<email />
</tarjetavisita>

Las ventajas de XML

El XML es una alternativa eficaz al HTML ya que se adapta mejor a los


nuevos entornos cada vez más complejos (como por ejemplo el comercio
electrónico, la mensajería, etc. El XML busca, ante todo, separar los datos
del formato. A través de la creación de las hojas de estilo, HTML ha
experimentado una notable evolución. Sin embargo, XML separa los datos de
su presentación de manera más eficaz ya que su principal objetivo es el de
almacenar la información y no el de mostrarla.

El XML incluye una serie de archivos obligatorios, cada uno con una función.
El archivo XML (eXtensible Markup Language) contiene el conjunto de datos
(archivos .xml).

La DTD (Document Type Definition) contiene la definición de las


características de los elementos que se van a mostrar (archivos .dtd).
Los archivos CSS (Cascading Style Sheet) permiten la presentación de los
datos (archivos .css).
Los archivos XSL (XML Stylesheet Language) son hojas de estilo mucho más
poderosas que las CSS y se adaptan mejor al XML (archivos .xsl).

XML estructura y sintaxis

Aunque, a primera vista, un documento XML y un documento HTML puedan


parecernos muy parecidos, hay una diferencia principal y es que el HTML no
indica lo que se está representando, tiene datos mal definidos con
elementos de formato, mientras que el XML contiene datos que se
autodefinen: describe el contenido de lo que etiquetan.

Una forma rápida de entender la estructura de un documento XML es


viendo un ejemplo:

<?xml version="1.0" encoding="UTF-8" ?>


<album>

Página 6 de 51
UT8. XML Documentos bien formados

<autor>SABINA Y CIA Nos sobran los motivos</autor>


<titulo>Joaquín Sabina</titulo>
<formato>MP3</formato>
<localizacion>Varios CD5 </localizacion>
</album>

Cada documento XML posee una estructura lógica y una física. La


estructura lógica del documento es una serie de declaraciones, elementos,
comentarios, etc. que se indican en el documento mediante marcas
explícitas. La estructura física del documento es una serie de unidades
llamadas entidades, es decir, indica los datos que contendrá el documento.
Las estructuras lógica y física deben anidarse de forma correcta.

Documentos XML bien formados

Todos los documentos XML deben estar bien formados, lo que significa que
se debe cumplir lo siguiente:

 Todas las etiquetas deben estar balanceadas: esto es, todos los
elementos que contengan datos de tipo carácter deben tener
etiquetas de principio y fin
 Todos los valores de los atributos deben ir entrecomillados (el
carácter comilla simple [el apóstrofe] puede utilizarse si el valor
contiene caracteres comillas dobles, y viceversa): si necesitas ambos,
utiliza &apos; y &quot;

 Cualquier elemento VACÍO (p.e. aquellos que no tienen etiqueta final


como <IMG>, <HR>, y <BR> y otros de HTML) deben terminar con '/>' o
debes hacerlos no VACÍOS añadiéndoles una etiqueta de fin.

Página 7 de 51
UT8. XML Documentos bien formados

 No debe haber etiquetas aisladas (< ó &) en el texto (p.e. debe darse
como &lt; y &amp;), y la secuencia ]]> debe darse como ]]&gt; si no
ocurre esto como final de una sección marcada como CDATA;

 Los elementos deben anidar dentro de sí sus propiedades (no se


deben sobreponer etiquetas, como en el resto de SGML);

 Los ficheros bien-formados sin-DTD pueden utilizar atributos en sus


elementos, pero éstos deben ser todos del tipo CDATA, por defecto.
El tipo CDATA (character DATA) son caracteres..

Según la especificación de XML del W3C, un documento XML está bien


formado si:

 Tomado como un todo, cumple la regla denominada "document".


 Respeta todas las restricciones de buena formación dadas en la
especificación.

 Cada una de las entidades analizadas que se referencia directa o


indirectamente en el documento está bien formada.

Cumplir la regla "document" antes mencionada significa:

 Que contiene uno o más elementos.


 Hay exactamente un elemento, llamado raíz, o elemento documento,
del cual ninguna parte aparece en el contenido de ningún otro
elemento.

 Para el resto de elementos, si la etiqueta de comienzo está en el


contenido de algún otro elemento, la etiqueta de fin está en el
contenido del mismo elemento. Es decir, los elementos delimitados
por etiquetas de principio y final se anidan adecuadamente
mutuamente.

Los documentos XML deben tener una estructura jerárquica con lo que
respecta a las etiquetas que delimitan sus elementos. Esto significa que los
elementos deben estar correctamente anidados y que los elementos no se
pueden solapar entre ellos. Además los elementos con contenido deben
estar correctamente cerrados.

Página 8 de 51
UT8. XML Documentos bien formados

Los elementos de un documento XML establecen una jerarquía que


estructura el contenido del mismo. Esa jerarquía se puede representar en
forma de árbol.

Así por ejemplo el fichero xml que permite almacenar información sobre un
documento, en el que nos interesa incluir la siguiente información sobre
dicho documento:

 Título
 Autor
 fecha_pub
 Dia
 Mes
 año
es:

<?xml version=”1.0”?>
<documento>
<título>Apuntes de XML</título>
<autor>Jorge Sánchez</autor>
<fecha_pub>
<día>18</día>
<mes>Enero</mes>
<año>2009</año>
</fecha_pub>
</documento>

Gráficamente de forma jerárquica se podría expresar así:

Página 9 de 51
UT8. XML Documentos bien formados

el fichero xml que permite almacenar información sobre el nombre de una


persona es:

Ejemplo incorrecto:

<?xml version="1.0" ?>


<nombre>Richal

Ejemplo correcto:

<?xml version="1.0" ?>


<nombre>Richal </nombre>

Sólo puede haber un elemento raíz, en el que están contenidos todos los
demás, es decir, la jerarquía de elementos XML sólo puede tener un
elemento inicial.

El fichero xml que permite almacenar información sobre los datos de un


alumno, en el que nos interesa incluir la siguiente información sobre dicho
alumno

 nombre
 email

Ejemplo incorrecto:

<?xml version="1.0" ?>


<nombre>Richal</nombre>
<email>richal@ejemplo.com</email>

Ejemplo correcto:

<?xml version="1.0" ?>


<alumno>
<nombre>Richal</nombre>

Página 10 de 51
UT8. XML Documentos bien formados

<email>richal@ejemplo.com</email>
</alumno>

Aunque no es obligatorio los documentos XML pueden, y deberían, comenzar


con una línea que describa la versión de XML, el tipo de documento y otras
cosas.

La primera línea del prólogo o "declaración" permite especificar la versión


de XML usada, hasta el momento, sólo existe la "1.0" y la codificación de
caracter (US-ASCII, UTF-8, BIG5, ISO-8850-7,etc.). En general, para el
castellano, usamos UTF-8 (código Unicode del que ASCII es un
subconjunto) o ISO-8859-1.

Así por ejemplo el fichero xml que permite almacenar información sobre un
documento, en el que nos interesa incluir la siguiente información sobre
dicho documento:

 Título
 Autor
 fecha_pub
 Dia
 Mes
 año
es:

<?xml version="1.0" encoding="UTF-8" ?>


<documento>
<título>Apuntes de XML</título>
<autor>Jorge Sánchez</autor>
<fecha_pub>
<día>18</día>
<mes>Enero</mes>
<año>2009</año>
</fecha_pub>
</documento>

Página 11 de 51
UT8. XML Documentos bien formados

La segunda línea, o "declaración de tipo de documento XML", define que tipo


de documento estamos creando, es decir, definimos que Declaración de Tipo
de Documento (DTD - Document Type Definition) cumple y define los datos
que de contiene el documento XML.

La DTD que debe utilizar el procesador XML para validar el documento


XML se indica mediante la etiqueta DOCTYPE. La DTD puede estar incluida
en el propio documento, ser un documento externo o combinarse ambas.

Ejemplos:

<?xml version="1.0" encoding="UTF-8" ?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<html>
<body bgcolor="yellow ">
<p>
Ejemplo
</p>
</body>
</html>

<?xml version="1.0" encoding="UTF-8" ?>


<!DOCTYPE ejemplo SYSTEM "http://www.ejemplos.xml/ejemplo.dtd">
<nada> Ejemplo </nada>

Un documento XML es válido si tiene asociado una DTD y el documento


cumple las restricciones que la DTD expresa.

Sólo puede haber un elemento raíz, en el que están contenidos todos los
demás, es decir, la jerarquía de elementos XML sólo puede tener un
elemento inicial.

2.- Declaración de documento Standalone

En la parte del prólogo dentro de la "declaración" se puede incluir una

declaración de documento standalone que controla que componentes de la


Página 12 de 51
UT8. XML Documentos bien formados

DTD son necesarios para completar el procesamiento del documento.

Especifica si la validez del documento depende de otro documento externo

—bien una DTD, bien un esquema—, en cuyo caso el valor es no, o si depende

de una DTD incluida en el mismo documento, en cuyo caso se especifica yes.

Este atributo no tiene valor por defecto, por lo que si no se especifica, el

documento XML no puede validarse.

Ejemplo:

<?xml version="1.0" standalone='yes'?>


<nombre>Richal</nombre>

El valor "yes" indica que la declaración está incluida dentro del propio
documento. El valor "no" indica que la declaración no existe dentro del
propio documento o que dicha declaración está en un documento externo. La
declaración de un documento standalone sólo denota la presencia de
declaraciones externas.

Elementos

Los elementos constituyen la arquitectura en árbol de un documento XML.


El nombre de los elementos se encuentra en el interior de las etiquetas y su
valor se sitúa entre una etiqueta de apertura y una etiqueta de cierre:
<nombre> Perez</nombre>

Los elementos vacíos

Un elemento vacío designa un elemento cuyo valor no ha sido definido.


Existen dos formas de especificar un elemento de este tipo:
<nombre></nombre>
<nfax />

Página 13 de 51
UT8. XML Documentos bien formados

Los nombres de los elementos están sujetos a varias reglas. A menudo son
fuentes de errores.

Respetar mayúsculas y minúsculas


En un elemento dado, los nombres definidos en las etiquetas de apertura y
de cierre deben ser idénticos. Por lo tanto, se deben respetar las
mayúsculas y minúsculas de los nombres. Por lo tanto, la siguiente línea es
incorrecta:
<nombre> Pepe</NOMBRE>

Esta sería una versión correcta:

<nombre> Pepe </nombre>

Los caracteres no permitidos


Los espacios no están permitidos en los nombres de los elementos. Por lo
tanto, la siguiente línea no puede utilizarse en un documento XML.

<nombre alumno> Pepe </nombre alumno>

Esto puede corregirse, por ejemplo, utilizando la siguiente fórmula:

<nombre_alumno> Pepe </nombre_alumno>

Los caracteres permitidos

El lenguaje XML permite la utilización de ciertos caracteres de puntuación


en el interior de los nombres de elementos. Puede utilizar, por ejemplo, los
siguientes signos:
“-“,“_“,“:“,“.“,
También, puede utilizar todos los caracteres alfabéticos (acentuados o no):
“e”, “E”, ”é”, etc. También están permitidos los caracteres numéricos: “1”,
“2”,”3”, etc.
Los caracteres <, > y “ siempre representados por entidades de carácter:
para representar estos caracteres (en el texto, no como marcas de
etiqueta) debemos usar siempre las entidades de carácter especiales:
&lt;, &gt; y &quot;. Estos caracteres son especiales para XML.

Página 14 de 51
UT8. XML Documentos bien formados

La primera letra

El nombre de un elemento comienza siempre por una letra o uno e los


siguientes caracteres de puntuación:
“-“,“_“,“:“,“.“
Evite utilizar el carácter “:” (dos puntos) estos se reservan para la
declaración de los espacios de nombre (más adelante se explicará este
término)
Hay una confusión entre lo que es un elemento y lo que es una etiqueta. En
este caso por ejemplo:

<nombre>Jorge</nombre>
<nombre> Es un etiqueta de apertura
</nombre> Es una etiqueta de cierre
<nombre>Jorge</nombre> Es un elemento
Jorge es el contenido del elemento

El contenido de un elemento puede contener simplemente texto:


<descripción> Producto con precio rebajado debido a su escasa demanda
</descripción>

O puede contener otros elementos (o ambas cosas). En este el elemento


persona consta de un elemento nombre y otro apellido.
<persona>
<nombre>Jorge</nombre>
<apellido>Sánchez</apellido>
</persona>

Los elementos se deben abrir y cerrar con la etiqueta que sirve para definir
el elemento; siempre se debe cerrar el último elemento que se abrió. Es
decir, es un error:
<persona>
<nombre>Jorge</nombre>
<apellido>Sánchez</persona>
</apellido>

Página 15 de 51
UT8. XML Documentos bien formados

Puede haber incluso elementos vacíos: <casado></casado>


En este caso se pueden cerrar en la propia etiqueta de apertura:

<casado />

Atributos

Se definen dentro de las etiquetas de apertura de los elementos. Se indica


su nombre seguido del signo = y del valor (entre comillas) que se le da al
atributo. Ejemplo:
<persona complejidad=”alta”>
<nombre>Jorge</nombre>
<apellido>Sánchez</apellido>
</persona>

Un elemento puede contener varios atributos separados por espacios:

<persona privacidad=”alta” tipo=”autor”>


<nombre>Jorge</nombre>
<apellido>Sánchez</apellido>
</persona>

Así por ejemplo el fichero xml que permite almacenar información sobre
películas, en las que nos interesa incluir la siguiente información sobre cada
película:

 Título
 Director
 Actor_principal
 Actor_secundario
 Productora
Una película pude tener el atributo de ciencia-ficción, policiaca o comedia

Página 16 de 51
UT8. XML Documentos bien formados

<?xml version="1.0" encoding="ISO-8859-1"?>

<peliculas>

<pelicula tipo="ciencia-ficcion">
<titulo>Inseparables</titulo>
<director>David Cronenberg</director>
<actor_principal>Jeremy Irons</actor_principal>
<actor_secundario>Genevieve Bujold</actor_secundario>
<productora>The Rank Organisation</productora>
</pelicula>

<pelicula tipo="policiaca">
<titulo>En línea de fuego</titulo>
<director>Wolfgand Petersen</director>
<actor_principal>Clint Eastwood</actor_principal>
<actor_secundario>John Malkovich</actor_secundario>
<productora>Paramount Pictures</productora>
</pelicula>

<pelicula tipo="comedia">
<titulo>El Guateque</titulo>
<director>Blake Edwards</director>
<actor_principal>Peter Sellers</actor_principal>
<actor_secundario>Claudine Longet</actor_secundario>
<productora>United Artists</productora>
</pelicula>

</peliculas>

Página 17 de 51
UT8. XML Documentos bien formados

Entidades predefinidas

En XML 1.0 se definen cinco entidades para representar caracteres


especiales y que no se interpreten como marcas por el parser o procesador
o analizador sintáctico XML. Es decir, así podemos utilizar, por ejemplo, el
carácter "<" sin que se interprete como comienzo de una etiqueta XML.

entidad caracter

&amp; &

&lt; <

&gt; >

&apos; '

&quot; "

Ejemplo:

<?xml version="1.0" encoding="UTF-8" standalone='yes'?>


<ejemplos>
<descripcion>Lo siguiente es un ejemplo de HTML.</descripcion>
<ejemplo>
&lt;HTML&gt;
&lt;HEAD&gt;
&lt;TITLE&gt;Rock &amp; Roll&lt;/TITLE&gt;
&lt;/HEAD&gt;
</ejemplo>
</ejemplos>

Secciones CDATA

Las secciones CDATA también nos van a permitir especificar datos,


utilizando cualquier carácter, especial o no, sin que se interprete como una

Página 18 de 51
UT8. XML Documentos bien formados

marca XML. La razón es que así se puede leer más fácilmente el documento
XML sin tener que descifrar los códigos de las entidades. Las secciones
CDATA empiezan por la cadena "<![CDATA[" y terminan con la cadena "]]>" y
sólo ésta última se reconoce como marca. No se pueden anidar secciones
CDATA

Ejemplo:

<?xml version="1.0" encoding="UTF-8" standalone='yes'?>


<ejemplos>
<descripcion>Lo siguiente es un ejemplo de HTML.</descripcion>
<ejemplo>
<![CDATA[
<HTML>
<HEAD>
<TITLE>Rock & Roll</TITLE>
</HEAD>
]]>
</ejemplo>
</ejemplos>

Comentarios

Comienzan con el símbolo <!-- y terminan con -->. Dentro puede haber
cualquier texto que se utiliza con fines explicativos o de documentación del
código.
Los comentarios no pueden meterse dentro de la etiqueta de un elemento, ni
tampoco puede contener etiquetas tanto de apertura como de cierre.

Definición de tipo de documento (DTD, Document Type


Definition)

La DTD es una definición, en un documento SGML o XML, que especifica


restricciones en la estructura y sintaxis del mismo. La DTD se puede incluir
dentro del archivo del documento, pero normalmente se almacena en un
fichero ASCII de texto separado. La sintaxis de las DTD para SGML y XML
es similar pero no idéntica.

Página 19 de 51
UT8. XML Documentos bien formados

La definición de una DTD especifica la sintaxis de una aplicación de SGML o


XML, que puede ser un estándar ampliamente utilizado como XHTML o una
aplicación local.
Las DTD se emplean generalmente para determinar la estructura de un
documento mediante etiquetas (en inglés tags) XML o SGML. Una DTD
describe:

 Elementos: indican qué etiquetas son permitidas y el contenido de


dichas etiquetas.
 Estructura: indica el orden en que van las etiquetas en el
documento.

 Anidamiento: indica qué etiquetas van dentro de otras.

Declaración de tipo elemento

Mediante un DTD podemos especificar elemento que se puede utilizar en un


XML se define en su DTD mediante una etiqueta !ELEMENT. La sintaxis de
la misma es:

<!ELEMENT nombre tipo>

El nombre es el identificador que tendrá el elemento en el documento XML


(hay que recordar que se distingue entre mayúsculas y minúsculas).

El tipo indica el funcionamiento del elemento, relativo al contenido que


puede tener. A continuación se indican las posibilidades de este parámetro
tipos de contenido en los elementos

EMPTY
Significa que el elemento no podrá tener contenido alguno, es un elemento
vacío (como la etiqueta br de las páginas web). Ejemplo de definición de
elemento vacío:
<!ELEMENT línea EMPTY >

Cuando se indica como tipo la palabra EMPTY, se indica que el elemento no


puede tener contenido, pero sí podrá contener atributos (si se especifican
en el DTD).
Los elementos definidos con EMPTY sólo pueden utilizarse de esta forma:
<línea></línea>
Página 20 de 51
UT8. XML Documentos bien formados

o bien:
<línea />

ANY
Permite cualquier contenido en el elemento, sin restricciones de ningún tipo.
Es decir puede contener texto, otro tipo de datos y cualquier etiqueta.
Además puede tener atributos.

Ejemplo:

<?xml version="1.0"?>
<!DOCTYPE persona [
<!ELEMENT persona (nombre, apellidos)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellidos ANY>
]>
<persona>
<nombre>Jorge</nombre>
<apellidos>Sánchez Asenjo
<nombre>Jorge</nombre>
</apellidos>
</persona>

Al definir apellidos como elemento ANY, permite incluso que dentro haya
una etiqueta nombre.

Puesto que un DTD se usa para restringir la escritura de un tipo de


documentos XML, el uso de ANY debe de ser muy cauteloso.

elemento concreto
En los elementos se puede indicar claramente un contenido concreto para el
mismo. Dicho contenido se indica entre paréntesis.

Ejemplo:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE persona [
<!ELEMENT persona (nombre)>
<!ELEMENT nombre (#PCDATA)>

Página 21 de 51
UT8. XML Documentos bien formados

]>
<persona>
<nombre>Antonio</nombre>
</persona>

En el ejemplo dentro de una etiqueta persona obligatoriamente debe de


existir una etiqueta nombre (una y sólo una).
No sólo se pueden indicar nombres de elementos como contenido concreto,
la indicación #PCDATA significa que el elemento podrá contener texto
literal (tan largo como se desee).

secuencias

En el caso de indicar una lista de elementos separados por comas, por


ejemplo:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE persona [
<!ELEMENT persona (nombre, apellidos, edad)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellidos (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
]>
<persona>
<nombre>Antonio</nombre>
<apellidos>Pérez</apellidos>
<edad>35</edad>
</persona>

Indica que el elemento contendrá la lista de elementos indicada, la cual


deberá estar en el mismo orden de la secuencia. Es decir en el ejemplo los
apellidos no se podrían poner delante del nombre.

elecciones

Los elementos pueden contener elementos opcionales (puede aparecer uno u


otro). Ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE artículo [

Página 22 de 51
UT8. XML Documentos bien formados

<!ELEMENT artículo (id | serie)>


<!ELEMENT id (#PCDATA)>
<!ELEMENT serie (#PCDATA)>
]>
<artículo>
<id>16</id>
</artículo>
La barra vertical indica que el elemento puede contener una u otra opción
(pero sólo una). Es decir también sería válido:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE artículo [
<!ELEMENT artículo (id | serie)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT serie (#PCDATA)>
]>
<artículo>
<serie>X1238H</serie>
</artículo>

Si dentro de la lista de opciones aparece PCDATA, éste debe de ser el


primer elemento de la lista.

combinaciones

Por supuesto puede haber combinaciones, si tenemos un documento DTD


llamado coordenada.dtd con este contenido:

<?xml version="1.0" encoding="UTF-8"?>


<!ELEMENT coordenada ((longitud, latitud) | coordUniversal)>
<!ELEMENT longitud (#PCDATA)>
<!ELEMENT latitud (#PCDATA)>
<!ELEMENT coordUniversal (#PCDATA)>

Sería válido este documento:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE coordenada SYSTEM "coordenada.dtd">
<coordenada>

Página 23 de 51
UT8. XML Documentos bien formados

<longitud>234</longitud>
<latitud>-23</latitud>
</coordenada>

Sería válido también:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE coordenada SYSTEM "coordenada.dtd">
<coordenada>
<coordUniversal>1232332</coordUniversal>
</coordenada>

cardinalidad

La cardinalidad es el número de veces que puede aparecer un determinado


contenido en un elemento. Se realiza mediante estos símbolos:
? Contenido opcional, puede aparecer (una sola vez) o no aparecer
* Contenido opcional y repetible. Es decir puede no aparecer y puede incluso
aparecer varias veces
+ Contenido obligatorio y repetible. Tiene que aparecer e incluso puede
aparecer varias veces

Ejemplo:

<!ELEMENT película (título, dirección+, argumento?, actor*)>


Según la instrucción anterior el elemento película consta de un título, uno o
más elementos de dirección, puede o no tener argumento, y de varios a
ningún actor (además se tendría que respetar ese orden).

Otro ejemplo (polígono.dtd):

<?xml version="1.0" encoding="UTF-8"?>


<!ELEMENT polígono ((coordX,coordY)+ | nombre)>
<!ELEMENT coordX (#PCDATA)>
<!ELEMENT coordY (#PCDATA)>
<!ELEMENT nombre (#PCDATA)>

Página 24 de 51
UT8. XML Documentos bien formados

Con esa DTD sería válido el documento:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE polígono SYSTEM "polígono.dtd">
<polígono>
<coordX>12</coordX>
<coordY>13</coordY>
<coordX>17</coordX>
<coordY>23</coordY>
<coordX>34</coordX>
<coordY>56</coordY>
</polígono>

Pero también:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE polígono SYSTEM "polígono.dtd">
<polígono>
<nombre>Triángulo</nombre>

</polígono>

Declaración de atributos

Los atributos permiten añadir información a un elemento. Un atributo no


puede constar de más atributos y cada atributo sólo puede aparecer una vez
en cada elemento.
Sintaxis de la declaración de atributos:

Los atributos se declaran mediante la etiqueta !ATTLIST, sintaxis:

<!ATTLIST elemento nombreAtributo tipo presencia valorPorDefecto>


Página 25 de 51
UT8. XML Documentos bien formados

Donde:
elemento. Es el nombre del elemento que podrá utilizar el atributo
nombreAtributo. Es el identificador del atributo que estamos declarando (y
que debe de cumplir las reglas de identificadores de XML)
tipo. Es el tipo de valores que podemos asignar al atributo
presencia. Indica las características de los valores que puede tomar el
atributo: si es obligatorio, si hay valor por defecto,...
valorPorDefecto. Permite dar un valor que el atributo tomará en el
documento XML en caso de que no se le dé en el mismo ningún valor al
atributo. También indica si es necesario rellenar o no el atributo o bien si es
opcional

declarar atributos

Esta declaración:

<!ATTLIST persona nacionalidad CDATA>

Significa que hemos definido el atributo nacionalidad correspondiente al


elemento persona. Que será de tipo CDATA, es decir texto normal. Así en
un XML que se valide con el DTD en el que está la instrucción anterior,
podremos:
<persona nacionalidad=”española”>

valores por defecto

Al declarar un atributo, lo último que se indica es la propiedad relativa al


valor por defecto del atributo. Se comentan a continuación sus
posibilidades:

valor por defecto concreto


Si al final de la declaración de un atributo aparece un valor concreto, se
entiende que ese será el valor por defecto. Es decir que se podría no
utilizar el atributo en un elemento y entonces dicho atributo tomaría dicho
valor.
Por ejemplo supongamos que éste es el archivo directorio.dtd:

<?xml version="1.0" encoding="UTF-8"?>

Página 26 de 51
UT8. XML Documentos bien formados

<!ELEMENT directorio (persona)+>


<!ELEMENT persona (#PCDATA)>
<!ATTLIST persona nacionalidad CDATA "Española">

Se define en él el atributo nacionalidad para el elemento persona como un


atributo que contendrá texto de todo tipo, pero que por defecto toma el
valor Española (nacionalidad por defecto en dicho archivo).

Entonces este archivo XML será válido:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE directorio SYSTEM "directorio.dtd">
<directorio>
<persona nacionalidad="Francesa">Vivian Maret</persona>
<persona>Juan Martín</persona>
</directorio>

Entonces para Vivian Maret se ha indicado explícitamente la nacionalidad,


pero no se ha usado el atributo para Juan Martín, por lo que tomará la
nacionalidad española.

valores fijos

Se puede utilizar el término #FIXED antes de indicar el valor por defecto


de un atributo. En ese caso en ningún documento XML se podrá modificar
dicho atributo.

Ejemplo:

<?xml version="1.0" encoding="UTF-8"?>


<!ELEMENT directorio (persona)+>
<!ELEMENT persona (#PCDATA)>
<!ATTLIST persona nacionalidad CDATA #FIXED "Española">

El atributo nacionalidad no podrá tomar ningún valor que no sea el valor


Española, impidiendo tomar otra nacionalidad. Su uso es muy limitado.

valores requeridos
Página 27 de 51
UT8. XML Documentos bien formados

En este caso se usa la palabra #REQUIRED indicando con ello que al


atributo debe obligatoriamente asignársele algún valor en el documento
XML. Ejemplo:

<!ATTLIST persona nacionalidad CDATA #REQUIRED>

Un documento XML que utilice el elemento persona deberá especificar


obligatoriamente la nacionalidad.

Obviamente usando #REQUIRED no se puede indicar un valor por defecto


(al no poder dejarse sin especificar el atributo).

valor opcional

La palabra #IMPLIED especificada en el atributo indicaría que dicho


atributo puede quedarse sin valor; es decir no posee valor por defecto, pero
puede quedarse sin especificar (quedaría nulo por tanto).

<!ATTLIST persona nacionalidad CDATA #IMPLIED>

En el ejemplo, el atributo nacionalidad no es obligatorio especificarle, puede


quedar sin valor. Nuevamente en este caso no se puede especificar un valor
por defecto (sería absurdo).

tipos de atributo

CDATA

Los atributos de tipo CDATA permiten indicar como valor cualquier texto. A
diferencia de los datos PCDATA de los elementos, los CDATA admiten
cualquier carácter del tipo que sea (PCDATA no admite caracteres inválidos
para la sintaxis de XML, como el signo < por ejemplo, CDATA sí los admite).

ID

El valor del atributo servirá para identificar al elemento que le contiene.


Los IDs deben de cumplir estas reglas:

Página 28 de 51
UT8. XML Documentos bien formados

 El valor tiene que cumplir las mismas reglas que para especificar
nombres XML.
 No puede haber dos etiquetas con el mismo ID en un mismo
documento XML
 En el DTD, para cada elemento sólo puede indicarse un atributo como
ID.
 Los atributos ID sólo pueden indicar #IMPLIED o #REQUIRED en
el apartado del valor por defecto.

Los IDs son especialmente útiles para las herramientas de maquetación,


análisis y programación de aplicaciones XML.

IDREF

El atributo contendrá el nombre de un ID de otro elemento. Es decir será


una referencia a otra etiqueta. Las reglas de los IDREFs son:

 El valor de un IDREF debe cumplir las reglas para especificar


nombres XML
 Debe existir un atributo ID en el documento XML cuyo valor coincida
con él (de otro modo se haría referencia a una etiqueta inexistente y
esto no está permitido)
La idea es poder relacionar elementos a través de atributos de tipo ID e
IDREF

Ejemplo de uso:

<?xml version="1.0" encoding="UTF-8"?>


<!-- Archivo directorio.dtd -->
<!ELEMENT directorio (persona)+ >
<!ELEMENT persona (#PCDATA) >
<!ATTLIST persona id ID #REQUIRED
madre IDREF #IMPLIED
padre IDREF #IMPLIED>

<?xml version="1.0" encoding="UTF-8"?>


<!-- Archivo directorio1.xml-->
<!DOCTYPE directorio SYSTEM "directorio.dtd">

Página 29 de 51
UT8. XML Documentos bien formados

<directorio>
<persona id="p1">Pedro</persona>
<persona id="p2">Marisa</persona>
<persona id="p3" madre="p2" padre="p1">Carmen</persona>
</directorio>

Carmen es la hija de Pedro y Marisa, según el código anterior.

IDREFS
Igual que el anterior sólo que permite indicar varias referencias (que deben
existir en el documento XML) a otros ID, separadas por espacios.

NMTOKEN
El valor del atributo será un texto que cumplirá las reglas para nombres
XML. Se usa en atributos donde CDATA permite demasiadas libertades, de
esta forma al menos sabremos que es un texto donde sólo existirán letras,
números y el símbolo _, es decir un texto que cumple las reglas para
nombres XML.

NMTOKENS
El atributo puede contener varios valores de tipo NMTOKEN separados por
espacios

ENTITY
El valor de un atributo será una entidad de la cual se indica el nombre. Más
adelante se explica el uso de las entidades.

ENTITIES
El valor del atributo será una lista de nombres de entidades separadas por
espacios.

Enumeración
En este caso el valor del atributo debe de ser uno de una lista de valores
posibles cada uno de los cuales se separa del siguiente mediante el símbolo
|.
Ejemplo:

<!ATTLIST persona sexo (Hombre | Mujer) #REQUIRED >

Página 30 de 51
UT8. XML Documentos bien formados

Las personas sólo podrán especificar como sexo "Hombre" o "Mujer" y nada
más:
<persona sexo="Varón">Javier Ruiz</persona>

El código anterior XML fallaría ya que el atributo sexo no admite el valor


"Varón".

Declaración de varios atributos en la misma etiqueta

Se usa muy habitualmente para indicar de forma cómoda todos los atributos
de un determinado elemento:

<?xml version="1.0" encoding="UTF-8"?>


<!ELEMENT directorio (persona)+>
<!ELEMENT persona (#PCDATA)>
<!ATTLIST persona nacionalidad CDATA "Española"
sexo (Hombre | Mujer) #IMPLIED
id ID #REQUIRED>

Para ese documento DTD, sería válido este XML:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE directorio SYSTEM "directorio.dtd">
<directorio>
<persona nacionalidad="Francesa" id="A1234">Vivian Maret</persona>
<persona id="A789">Juan Martín</persona>
<persona sexo="Hombre" id="A12">Rafael Díaz</persona>
</directorio>

ENTIDADES

Las entidades son elementos XML que permiten indicar abreviaturas de


texto (o referencias a elementos externos abreviadas) o utilizar caracteres
que de otra forma serían inválidos en el documento.
Se explican sus posibilidades
entidades ya existentes

Página 31 de 51
UT8. XML Documentos bien formados

En XML están definidas las siguientes entidades:

entidad significado
&lt; El símbolo de menor (<)
&gt; El símbolo de mayor (>)
&amp; El ampersand: &
&apos; La comilla simple (')
&quot; La comilla doble (")

Estas entidades no hay que declararlas en ningún DTD, todos los


analizadores de XML estándar conocen estas entidades

Ejemplo:
<autor>Leopoldo Alas &apos;Clarín&apos;</autor>
El texto PCDATA del autor es Leopoldo Alas 'Clarín' (así se visualizará en
el navegador).

entidades para referencias a caracteres especiales

La etiqueta inicial <?xml permite indicar (entre otras cosas) el juego de


caracteres que utiliza un documento XML (normalmente Unicode, UTF8).
Si deseamos indicar un carácter especial que no está contenido en nuestro
teclado, conociendo su código en el juego de caracteres que utiliza el
documento, podemos especificarle con la sintaxis: &#nnnn; o &#xhhhh;
donde nnnn es el código en base decimal, y hhhh es el código en base
hexadecimal. La x debe ser minúscula en los documentos XML. La
forma nnnn o hhhh puede ser cualquier número de dígitos y puede incluir
ceros. La forma hhhh puede combinar mayúsculas y minúsculas, siendo las
mayúsculas el estilo usual.
&#número;

Página 32 de 51
UT8. XML Documentos bien formados

Donde el número es el código del carácter en decimal. En hexadecimal se


puede hacer con:
&#xnúmero;
Ejemplo:
<calle>Kantstra&#223;e, Berlín</calle>
En el navegador este elemento aparecería como:
<calle>Kantstraße, Berlín</calle>
El número se puede poner en hexadecimal si se antecede una x al nombre,
por ejemplo:
<calle>Kantstra&#xEF;e, Berlín</calle>

entidades generales
Se usan como abreviaturas que aparecerán en el documento XML. La razón
de su uso es facilitar la escritura de nombres repetitivos (nombres de la
empresa, direcciones muy utilizadas,). La sintaxis para declarar una entidad
de este tipo es:
<!ENTITY nombre "texto">
Para usar en un documento XML la entidad declarada, se usa:
&nombre;
Ejemplo de declaración de una entidad:
<!ENTITY mayor "Calle Mayor Principal" >
uso en un documento XML:
<dirección>&mayor; 18</dirección>

La dirección indicada es Calle Mayor Principal 18.

Incluso se pueden indicar símbolos que no son PCDATA al definir entidades:

<!ENTITY negCursiva "<strong><em></em></strong>">

El documento XML que utilice dicha entidad incluirá todos los símbolos (y
por lo tanto estará especificando etiquetas en el código).
Un uso muy interesante es usar entidades que hacen referencia a archivos
externos (mediante su dirección URL), por ejemplo:
<!ENTITY direcciónCompleta SYSTEM "direccion.txt" >

Es la palabra SYSTEM la que indica que la entidad no es un texto sino que


es el contenido de un archivo. El uso de la entidad &direcciónCompleta; en

Página 33 de 51
UT8. XML Documentos bien formados

un documento XML provocará que en dicho documento se añada el contenido


del archivo dirección.txt (en la posición exacta en la que esté colocada la
referencia a la entidad).

entidades de parámetros
Sólo se pueden utilizar dentro del DTD (no en el documento XML). Su uso
más habitual es construir DTD utilizando las entidades definidas a fin de
ahorrar trabajo.
Su uso es similar a las entidades generales sólo que utilizan el símbolo % en
lugar del símbolo &. Al igual que las generales deben de ser declaradas antes
de poder usarse:
<!ENTITY % mayor "Calle Mayor Principal" >
Y su uso (dentro del DTD), por ejemplo:
<!ATTLIST persona dirección CDATA "%mayor;">
En este caso las comillas dobles son obligatorias porque los valores por
defecto van entrecomillados (como se ha visto anteriormente).
Las entidades de parámetros pueden utilizar archivos externos, ejemplo de
DTD:

<?xml version="1.0" encoding="UTF-8"?>


<!ENTITY % directorio SYSTEM "directorio.dtd" >
%directorio;
<!ELEMENT empresa (razónSocial, directorio) >
<!ELEMENT razónSocial (#PCDATA) >

De esta forma se construye un DTD con el contenido ya especificado en


otro DTD. En el ejemplo las empresas constan de elementos razónSocial y
de directorio. El elemento directorio no se define, sino que su descripción
está especificada en directorio.dtd

Utilización de espacios de nombres en Xml

Puede ocurrir que cuando se manejan documentos XML puede ocurrir que
diferentes XML que tengamos, utilicen las mismas etiquetas. Aunque el
contexto sería distinto, tendríamos un problema si manejamos ambos
documentos con el mismo software, ya que el analizador, no sabría cómo
manejar ambas etiquetas iguales.

Página 34 de 51
UT8. XML Documentos bien formados

Los espacios de nombres (namespacing en inglés) evitan el problema


indicando en cada etiqueta un código que sirve para indicar el contexto de
cada etiqueta y así diferenciar las que son iguales. Ejemplo:

<?xml version="1.0" encoding="UTF-8"?>


<document>
<title>Documento de prueba</title>
<content>
<html>
<head>
<title>Titulo HTML</title>
</head>
<body>
Texto del document
</body>
</html>
</content>
<author>Jorge</author>
</document>

En el ejemplo anterior se usan etiquetas en inglés para el documento (algo


muy habitual en el mundo empresarial) y eso hace que la etiqueta title se
repita en contextos distintos, el primero es para poner un título genérico al
documento (y es una etiqueta de la empresa en cuestión) y la segunda se
corresponde a la etiqueta title del lenguaje HTML (o mejor XHTML).
La solución es anteponer al nombre de la etiqueta un nombre que indique el
propietario de la misma, por ejemplo:

<?xml version="1.0" encoding="UTF-8"?>


<document>
<jorge.title>Documento de prueba</jorge.title>
<content>
<html>
<head>
<html.title>Titulo HTML</html.title>

Página 35 de 51
UT8. XML Documentos bien formados

</head>
<body> Texto del documento </body>
</html>
</content>
<author>Jorge</author>
</document>
Ese prefijo diferenciador es el espacio de nombres al que pertenece la
etiqueta, pero usado así tendríamos el problema de que con un sufijo tan
corto, se podría repetir. Por ello una solución es indicar la URL de la entidad
responsable de la etiqueta:

<?xml version="1.0" encoding="UTF-8"?>


<www.jorgesanz.es.document>
<www.jorgesanz.es.title>
Documento de prueba
</www.jorgesanz.es.title>
<www.jorgesanz.es.content>
<www.w3c.org.html>
<www.w3c.org.head>
<www.w3c.org.title>
Titulo HTML
</www.w3c.org.title>
</www.w3c.org.head>
<www.w3c.org.body>
Texto del documento
</www.w3c.org.body>
</www.w3c.org.html>
</www.jorgesanz.es.content>
<www.jorgesanz.es.author>
Jorge
</www.jorgesanz.es.author>
</document>

Pero el documento quedaría muy poco legible. Por ello se aplican espacios de
nombres, de modo que se asigna una URL a un prefijo de etiqueta; de este
modo cada vez que el documento se utiliza el prefijo, se sabe que se refiere
a la URL indicada (las URLs son únicas).

Página 36 de 51
UT8. XML Documentos bien formados

Esas URL es en realidad una URI (Universal Resource Identifier) un


identificador único de recurso, de modo que la raíz de la URI es el dominio
universal (Internet) de la empresa y a él se añade la ruta al recurso. Así si
hemos definido documentos XML cuyo elemento raíz es document, la URI
relacionada con el espacio de nombres del documento sería por ejemplo
www.jorgesanz.es/document.

uso del atributo xmlns


Todas las etiquetas en XML pueden hacer uso del atributo xmlns (xml
namespacing) que permite asignar un espacio de nombres a un prefijo en el
documento dentro del elemento en el que se usa el espacio de nombres.

Ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<document
xmlns:jorge="http.//www.jorgesanz.es/document"
xmlns:html="htp://www.w3c.org/html">
<jorge:title>
Documento de prueba
</jorge:title>
<jorge:content>
<html:html>
<html:head>
<html:title>
Titulo HTML
</html:title>
</html:head>
<html:body>
Texto del documento
</html:body>
</html:html>
</jorge:content>
<jorge:author>
Jorge
</jorge:author>
</document>

Página 37 de 51
UT8. XML Documentos bien formados

En el ejemplo se usa el prefijo jorge para indicar etiquetas del espacio de


nombres www.jorgesanz.es/document y html para el espacio de nombres
de HTML.

Espacios de nombre por defecto

En el caso de que las etiquetas, mayoritariamente, en un documento


pertenezcan a un mismo espacio de nombres, lo lógico es indicar el espacio
de nombres por defecto. Eso se hace sin indicar prefijo en el atributo
xmlns.

Ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<document
xmlns ="http.//www.jorgesanz.es/document"
xmlns:html="htp://www.w3c.org/html">
<title>
Documento de prueba
</title>
<content>
<html:html>
<html:head>
<html:title>
Titulo HTML
</html:title>
</html:head>
<html:body>
Texto del documento
</html:body>
</html:html>
</content>
<author>
Jorge
</author>
</document>

Página 38 de 51
UT8. XML Documentos bien formados

Las etiquetas sin prefijo se entiende que pertenecen al espacio de nombres


www.jorgesanz.es/document, para las del otro espacio se usa el prefijo.

Uso de espacios de nombres en etiquetas interiores

El atributo xmlns no tiene por qué utilizarse en el elemento raíz, se puede


posponer su declaración en el primer elemento que pertenezca al espacio de
nombres deseado.

Por ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns ="http.//www.jorgesanz.es/document">
<title>
Documento de prueba
</title>
<content>
<html:html xmlns:html="htp://www.w3c.org/html">
<html:head>
<html:title>
Titulo HTML
</html:title>
</html:head>
<html:body>
Texto del documento
</html:body>
</html:html>
</content>
<author>
Jorge
</author>
</document>

Página 39 de 51
UT8. XML Documentos bien formados

Uso de espacios por defecto en etiquetas interiores

Un documento puede declarar espacios por defecto en etiquetas interiores


lo que permite aún más versatilidad en los documentos.
Ejemplo:

<?xml version="1.0" encoding="UTF-8"?>


<document xmlns ="http.//www.jorgesanz.es/document">
<!-- comienza el espacio de nombres de jorgesanz.es -->
<title>
Documento de prueba
</title>
<content>
<html xmlns="htp://www.w3c.org/html">
<!-- desde aquí el espacio ahora es el de html -->
<head>
<title>
Titulo HTML
</title>
</head>
<body>
Texto del documento
</body>

Página 40 de 51
UT8. XML Documentos bien formados

</html>
<!-- fin del espacio html, regresa el espacio jorgesanz.es -->
</content>
<author>
Jorge
</author>
</document>

Cancelar espacios por defecto

Si se usa el atributo xmlns="", entonces se está indicando (en el interior de


la etiqueta en la que se use) que ese elemento y sus hijos no usan ningún
espacio de nombres

Validación de documentos XML

validación por DTD

Es la técnica más veterana y, en realidad procede de SGML el lenguaje base


de XML. Es indudablemente la más utilizada, pero también la menos
coherente con las reglas XML. Su éxito se debe a que ya era una forma de
validación reconocida antes de la aparición de XML, por lo que muchísimo
productos software la reconocen desde hace mucho y la compatibilidad con
ellos ha determinado su éxito.

posibilidades de uso de DTD

a. en el propio documento

Se puede definir la estructura que debe cumplir un documento XML


mediante código DTD insertado en el propio documento. La desventaja
evidente, es que esta definición sólo vale para dicho documento, por lo que
realmente no define tipos de documentos XML (no es una plantilla en
definitiva de definición de documentos internos). Por ello es la forma menos
habitual de utilizar DTD.

Página 41 de 51
UT8. XML Documentos bien formados

Su única (pero muy discutible) ventaja es que la validación está dentro del
propio documento, por lo que siempre viajan juntas la validación y el
contenido del mismo.

Un documento XML que defina internamente su DTD, simplemente escribe


instrucciones DTD dentro del propio documento dentro de una etiqueta
DOCTYPE.

La sintaxis es:

<!DOCTYPE raíz [....códigoDTD...]>

Dentro de los símbolos [ y ] se especifican las instrucciones DTD.

Ejemplo:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE persona [
<!ELEMENT persona (nombre)>
<!ELEMENT nombre (#PCDATA)>
]>
<persona>
<nombre>Antonio</nombre>
</persona>

b. En un documento externo privado

En este caso la validación se crea en un documento-plantilla externa. De


modo que cuando un documento debe cumplir las reglas de la plantilla DTD,
se debe indicar la ruta (sea relativa o absoluta) a la misma.

La sintaxis de la etiqueta DOCTYPE que permite asignar un DTD privado a


un documento XML es:

<!DOCTYPE raíz SYSTEM "rutaURLalDTD">

Página 42 de 51
UT8. XML Documentos bien formados

Salvo que se desee crear un único documento con una validación DTD, lo
lógico es utilizar la forma de DTD externa ya que de esa forma se pueden
validar varios documentos a la vez. La ruta puede ser absoluta y entonces se
indica su URL:

<!DOCTYPE raíz SYSTEM "http://www.empresa.com/docs.dtd">

Pero puede ser relativa:


<!DOCTYPE raíz SYSTEM " docs.dtd">

Entonces se busca al archivo DTD desde el directorio donde se encuentra el


archivo XML que queremos validar (en el ejemplo, el archivo docs.dtd debe
encontrarse en el mismo directorio que el archivo que contiene ese código
DOCTYPE).

En ambos casos se puede añadir código DTD para en ese documento


concreto añadir instrucciones de validación.

Ejemplo:

<!DOCTYPE raíz SYSTEM “http://www.empresa.com/docs.dtd” [


<!ELEMENT nombre (#PCDATA)>
] >

DTD externo de tipo PUBLIC


Se entiende que SYSTEM se utiliza cuando el documento DTD es privado. Si
se trata de un documento de uso público, entonces se usa PUBLIC. La
sintaxis sería:

<!DOCTYPE raíz PUBLIC “nombreDTD” “DTD_URL”>

La raíz sigue siendo el nombre del elemento raíz. El nombreDTD es el


nombre público que se le da al DTD en cuestión. Si disponemos de un
repositorio de DTDs públicos (como ocurre en entornos de trabajo como
Oxygene por ejemplo) le cargaría sin ir a Internet. Si el nombreDTD no es
reconocido se usa la dirección URL para descargarlo y utilizarlo.

Ejemplo:

Página 43 de 51
UT8. XML Documentos bien formados

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Este es el DOCTYPE para una página web escrita en XHTML 1.0 estricto,
utilizada para validar miles de páginas web.

atributo standalone de la etiqueta de cabecera

La etiqueta <?xml de cabecera de todo documento XML, posee un atributo


llamado standalone que puede tomar dos valores:
yes. En caso de el documento XML no utilice DTD externa
no. Cuando el documento obligatoriamente hace uso de DTD externa

Validación de documentos Xml

Ejemplo: Escribe un documento XML que modele la información que se


propone a continuación: una estructura de unidades, directorios y ficheros
como la del sistema operativo Windows. Cada unidad tendrá asignada una
letra, y dentro podrá tener directorios y ficheros. Los directorios pueden a
su vez contener otros directorios o ficheros. Para cada directorio o fichero
se debe especificar su nombre y fecha de modificación. Para los ficheros,
adicionalmente, se especificará el tamaño.

Fichero xml:

<?xml version="1.0" encoding="ISO-8859-1"?>


<!DOCTYPE sistema SYSTEM "dtddirectorio.dtd">
<sistema>
<unidad letra="A"/>
<unidad letra="C">
<directorio>
<nombre>Archivos de Programa</nombre>
<fecha>
<dia>17</dia>
Página 44 de 51
UT8. XML Documentos bien formados

<mes>5</mes>
<anio>2004</anio>
</fecha>
<directorio>
<nombre>Internet Explorer</nombre>
<fecha>
<dia>19</dia>
<mes>8</mes>
<anio>2004</anio>
</fecha>
<fichero tamano="87545546">
<nombre>Iexplore.exe</nombre>
<fecha>
<dia>19</dia>
<mes>8</mes>
<anio>2004</anio>
</fecha>
</fichero>
</directorio>
</directorio>
<fichero tamano="456">
<nombre>config.sys</nombre>
<fecha>
<dia>8</dia>
<mes>12</mes>
<anio>2003</anio>
</fecha>
</fichero>
</unidad>
</sistema>

Fichero dtd

<!ELEMENT sistema (unidad*)>


<!ENTITY % contenido "(directorio | fichero)*">
<!ELEMENT unidad %contenido; >
<!ATTLIST unidad
letra ID #REQUIRED>
<!ENTITY % nombreyfecha "nombre, fecha">

Página 45 de 51
UT8. XML Documentos bien formados

<!ELEMENT nombre (#PCDATA) >


<!ELEMENT fecha (dia, mes, anio)>
<!ELEMENT dia (#PCDATA)>
<!ELEMENT mes (#PCDATA)>
<!ELEMENT anio (#PCDATA)>
<!ELEMENT directorio (%nombreyfecha;, %contenido;) >
<!ELEMENT fichero (%nombreyfecha;) >
<!ATTLIST fichero
tamano CDATA #REQUIRED>

Para validar un documento xml entramos en la página web


www.xmlvalidation.com

1.- seleccionamos el archivo xml a validar o lo escribimos, no seleccionamos


contra el esquema externo xml y le damos a validación.
2.- nos pide el dtd. Le escribimos o seleccionamos. Y pulsamos continuar
validación. Nos da que no hay errores.

Si no cerráramos alguna etiqueta en el fichero xml o pusiéramos algo mal en


el dtd nos daría algún error el validador comprobémoslo.

Página 46 de 51
UT8. XML Documentos bien formados

Ejercicios

1º.- Crear un fichero XML para almacenar información sobre los libros del
departamento. Nos interesa incluir la siguiente información sobre cada
libro:
 Título
 Autor
 Editorial
 Descripción (si la conozco)
 Precio

2º.- Crear un fichero XML para almacenar información sobre alumnos. Nos
interesa incluir la siguiente información:
 Nombre
 Dirección
 Ciudad
 Código
 Teléfono
Escribir la DTD correspondiente.

Página 47 de 51
UT8. XML Documentos bien formados

3º.- Dado el siguiente fichero XML, escribir su correspondiente DTD.


Enlazar el DTD con el fichero XML, de las dos formas posibles.

<?xml version="1.0" encoding="ISO-8859-1"?>


<listatitulos>
<cuaderno>
<titulo>Photoshop 5.5</titulo>
<autor>Michael Karbo</autor>
<autor>Peter G. Christiansen</autor>
<editorial>PC Cuadernos</editorial>
<precio>4</precio>
</cuaderno>
<cuaderno>
<titulo>Cree su página Web (I)</titulo>
<autor>Johann-Christian Hanke</autor>
<editorial>PC Cuadernos</editorial>
<descripcion>Introducción a HTML</descripcion>
<precio>4</precio>
</cuaderno>
<cuaderno>
<titulo>El registro de Windows</titulo>
<autor>David Bosman</autor>
<editorial>PC Cuadernos</editorial>
<descripcion>Trucos para editar el registro</descripcion>
<precio>4</precio>
</cuaderno>
</listatitulos>

4º.- Dado el siguiente fichero DTD, construir un fichero XML de ejemplo


que sea válido.
<!ELEMENT listin (persona)+>
<!ELEMENT persona (nombre, email*)>
<!ATTLIST persona id CDATA #REQUIRED >
<!ATTLIST persona sexo (hombre | mujer) #REQUIRED>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT email (#PCDATA)>

5º.- Dado el siguiente fichero DTD, construir un fichero XML de ejemplo


que sea válido.

Página 48 de 51
UT8. XML Documentos bien formados

<!ELEMENT addressbook (contact)+>


<!ELEMENT contact (name, address+, city, state, zip, phone, email, web,
company)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT zip (#PCDATA)>
<!ELEMENT phone (voice, fax?)>
<!ELEMENT voice (#PCDATA)>
<!ELEMENT fax (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT web (#PCDATA)>
<!ELEMENT company (#PCDATA)>

6º.- Dado el siguiente fichero XML, construir un DTD que corresponda con
su estructura.
<?xml version="1.0" encoding="ISO-8859-1"?>
<peliculas>
<pelicula tipo="comedia">
<titulo>Arizona Baby</titulo>
<escritor>Ethan Coen</escritor>
<escritor>Joel Coen</escritor>
<productor>Ethan Coen</productor>
<director>Joel Coen</director>
<actor>Nicolas Cage</actor>
<actor>Holly Hunter</actor>
<actor>John Goodman</actor>
<comentario>Una historia de amor con final inusitado.</comentario>
</pelicula>
<pelicula tipo="misterio">
<titulo>Sospechosos Habituales</titulo>
<escritor>Christopher McQuarrie</escritor>

Página 49 de 51
UT8. XML Documentos bien formados

<productor>Bryan Singer</productor>
<productor>Michael McDonnell</productor>
<director>Bryan Singer</director>
<actor>Stephen Baldwin</actor>
<actor>Gabriel Byrne</actor>
<actor>Benicio Del Toro</actor>
<actor>Chazz Palminteri</actor>
<actor>Kevin Pollak</actor>
<actor>Kevin Spacey</actor>
<comentario>Un crimen con cambios en el argumento muy
intrincados.</comentario>
</pelicula>
<pelicula tipo="dibujos">
<titulo>Los aristogatos</titulo>
<escritor>Walt Disney</escritor>
<productor> Walt Disney </productor>
<director> Walt Disney </director>
</pelicula>
</peliculas>

7º.- Dado el siguiente fichero XML, construir un DTD que corresponda con
su estructura.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE FAQ SYSTEM "FAQ.DTD">
<FAQ>
<INFO>
<TITULO> WINDOWS? SOLO SI ME OBLIGAN! </TITULO>
<AUTOR> Fernando Damián Lorenzo García </AUTOR>
<EMAIL> Fer@yahoo.es </EMAIL>
<VERSION> 1.0 </VERSION>
<FECHA> 20.MAYO.12 </FECHA>
</INFO>
<PART NO="1">
<Q NO="1">
<QTEXT>¿Por qué tengo que instalar W?</QTEXT>
<A> A mi también me parece una buena pregunta.</A>
</Q>

Página 50 de 51
UT8. XML Documentos bien formados

<Q NO="2">
<QTEXT>Y de que me vale?</QTEXT>
<A>Otra ingeniosa pregunta.</A>
</Q>
</PART>
</FAQ>

8º.- Crear un fichero XML y su correspondiente DTD para el siguiente


supuesto:
Queremos guardar la información sobre un CD de música. Necesitamos
información del nombre del artista, el título del CD y el año de creación, así
como también el género musical.
También será necesario suministrar la información de cada canción, es
decir, su título y su duración en minutos y segundos. Cada canción es una
parodia de otra por lo que hay que incluir información de la canción que está
parodiando en cada caso (si corresponde). Para cada CD hay que indicar el
número de serie, su duración y número total de canciones.

Página 51 de 51

También podría gustarte