Declaración del DTD:
Definir un documento DTD dentro de un fichero xml:
ejemplo.xml /* Nombre del fichero xml
<?xml versión=”1.0”?> /*El documento es xml version 1<[!DOCTYPE elemento_raiz [ /* Para crear una definición de un DTD
Las declaraciones internas van aquí
]> /* fin de un documento DTD
/ * A partir de aqui se escribe el documento xml será validado por el documento DTD
<elemento_raiz>…</elemento_raiz>
Definir un documento DTD fuera de un fichero xml:
ejemplo.xml /* Nombre del fichero xml.
<?xml version="1.0" encoding=”ISO-8859-1” ?><!DOCTYPE elemento_raiz SYSTEM "nombre_fichero.dtd"> /* el documento xml se relacionará con nombre_fichero.dtd, el cual debe estar en el mismo directorio que el fichero xml.
<elemento_raiz>…</elemento_raiz> / Las etiquetas del fichero xml.
Declaración de tipos de elementos
Durante el
proceso de diseño se identifican los distintos tipos de elementos que forman
parte del documento. En el DTD hay que incluir la declaración de cada uno de
ellos.
<!ELEMENT
nombre tipo_contenido>
El nombre
del elemento debe ser un nombre XML válido. Solo podrá haber una declaración
por elemento.
Podemos
tener diferentes tipos de elementos clasificados según su contenido:
·
Elementos vacíos
o
<!ELEMENT br EMPTY>
·
Contienen datos
o
<!ELEMENT first (#PCDATA)> /* #PCDATA especifica un texto
·
Mixtos
o
Contienen tanto datos como elementos
Elementos que solo
contienen elementos
Se
distinguen dos tipos de relación entre los elementos hijos. Secuenciales o
alternativos.
• Secuenciales: Imaginemos un
elemento mensaje que contiene elementos hijos: origen, destino, cuestion y
cuerpo. La declaración del elemento mensaje sería: <!ELEMENT mensaje (origen,
destino, cuestion, cuerpo)>
• Alternativos: Cuando el elemento
contiene uno y solo uno de los elementos hijos
especificados.
<!ELEMENT persona (física |
jurídica)>
Además de
especificar qué elementos hijos puede contener el elemento y en qué orden, se
puede establecer cuántas veces aparece cada uno de ellos mediante un carácter expresiones
regulares, indique el factor de repetición:
● El carácter ‘*’: el elemento o
grupo de elementos puede repetirse 0 o más veces.
● El carácter ‘?’: el elemento o
grupo de elementos puede aparecer 0 o 1 veces.
● El carácter ‘+’: el elemento o
grupo de elementos puede repetirse 1 o más veces.
● Por defecto, si no ponemos nada, el
elemtno debe aparecer una vez.
Ejemplo:
<!ELEMENT elem (a, (b|c)*, d+,
e?>
De acuerdo a
este declaración podemos encontrarnos con los siguientes documentos válidos:
<elem><a></a><d></d><elem>
<elem><a></a><d></d><d></d><e></e><elem>
<elem><a></a><b></b><d></d><elem>
<elem><a></a><c></c><b></b><c></c><d></d><elem>
Declaración de tipos
de atributos.
Al igual que
ocurre con los elementos, cada uno de los distintos atributos identificados en
la fase de diseño debe declararse en el DTD. Una única declaración permite
definir una lista de atributos asociados a un elemento. La sintaxis es la
siguiente:
<!ATTLIST elemento atrib1 atrib2
atrib3 …>
Puede haber
múltiples definiciones de listas de atributos para un mismo elemento. Pero si
se declara varias veces el mismo atributo solo prevalece el primero.
Atributos CDATA y NMTOKEN
El tipo de
atributos CDATA consiste en una cadena de caracteres. Esta cadena puede incluir
cualquier
carácter a excepción de los caracteres especiales, incluidos los espacios en
blanco. Si
pretendemos
limitar el tipo de caracteres que pueden aparecer como valor en el atributo,
debemos utilizar el tipo NMTOKEN. Ese solo permite que aparezcan los mismos
caracteres que utilizamos para definir elementos y atributos. Existe también la
posibilidad de utilizar el tipo NMTOKENS, esto indica que el atributo contendrá
una lista de cadenas de tipo NMTOKEN.
Ejemplos:
<!ATTLIST coche color CDATA>.
La propiedad color puede tomar cualquier valor.
<!ATTLIST coche color NMTOKEN>.
La propiedad color puede tomar solo valores que contengan letras, dígitos,
puntos, guiones y subrayados. Deben comenzar por letra y no pueden contener espacios
en blanco.
<ATTLIST coche color NMTOKENS>.
La propiedad color será una lista de NMTOKENS. Por ejemplo <coche
color=”blanco negro gris”>
Atributos enumerados
Se usan
cuando el valor del atributo está restringido a un conjunto de valores. En la
declaración se usa el carácter ‘|’ para separar los valores.
<!ATTLIST
coche color (blanco | negro | gris)>
De esta
forma la propiedad color solo puede tomar los valores “blanco”, “negro” o
“gris”. Cualquier otro valor hará que la validación del documento XML falle.
Declaración de
Entidades
En general
entidad se refiere a un objeto usado para guardar información y por ello
necesariamente cada documento tiene al menos la entidad del propio documento.
Permite guardar contenido que puede ser utilizado muchas veces y poder
descomponer un documento grande en subconjuntos más manejables.
Entidad
interna. Es la más sencilla. Consiste en abreviaturas definidas en el DTD. Por
ejemplo:<!ENTITY derechos “Copyright 2002”>. Al definir esta entidad, en
el documento XML podemos utilizarla escribiendo ‘&derechos;’. El parser cambiará
la entidad por el valor asignado.
Entidad
externa. El contenido no está dentro del DTD sino en cualquier otro sitio del
sistema. Se hace referencia a su contenido mediante una URI precedida de la
palabra SYSTEM o PUBLIC
según
proceda. La sintaxis es
<!ENTITY
nombre SYSTEM “URI”>
Por ejemplo:
<!ENTITY intro SYSTEM http://ww.miservidor.com/intro.xml>
Estas
entidades externas permiten descomponer grandes archivos en unidades más
pequeñas.
Para mas información http://www.slideshare.net/elismur/xml-dtd
Imagenes de la definición de ficheros con xml y dtd:
No hay comentarios:
Publicar un comentario