domingo, 10 de febrero de 2013

Elementos del DTD

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.


Imagenes de la definición de ficheros con xml y dtd:

No hay comentarios:

Publicar un comentario