Cuando creamos un documento DTD estamos creando nuestro propio lenguaje de marcado, que puede ser definido a nuestro antojo y con el fin que deseemos, por ejemplo, definir un estándar de comunicación entre nuestras aplicaciones, definir una tarjeta visita y quien sabe cuantas cosas más. La DTD define los tipos de elementos, atributos y entidades permitidas, y puede expresar algunas limitaciones para combinarlos.
Los documentos que se ajustan a su DTD se pueden definir como documentos validos, un DTD puede ser un fichero externo el cual puede ser usados por varios ficheros XML, o simplemente puede estar incluido en el mismo fichero XML.
Un ejemplo:
<! DOCTYPE etiqueta[
<!ELEMENT etiqueta (nombre, calle, ciudad, país, código)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT calle (#PCDATA)>
<!ELEMENT ciudad (#PCDATA)>
<!ELEMENT pais (#PCDATA)>
<!ELEMENT codigo (#PCDATA)>
]>
<calle>c/ Mayor, 27</call>
<ciudad>Valderredible</ciudad>
<pais>España</pais>
<codigo>39343</codigo>
</etiqueta>
La declaración del DTD empieza en la primera línea y termina con “]>”, en este documento se encuentra el DTD embebido dentro del fichero XML, esta puede cambiar y encontrase en cualquier otro lugar, como quedaría esto:
<?xml version="1.0"?>
<!DOCTYPE pc SYSTEM "http://www.sitio.com/dtd/pc.dtd">
<modelo>...</modelo>
...
Declarando elementos:
Los elementos son el corazón del fichero XML y estos deben ajustarse al DTD que los defina para considerar valido dicho documento.A la hora de declarar un elemento en nuestro DTD siempre comenzamos nuestra línea con <!ELEMENT seguidas por el identificador genérico del elemento que se declara. A continuación tienen una especificación de contenido.
<!ELEMENT receta (titulo, ingredientes, procedimiento)>
En este ejemplo, el elemento
<receta>
puede contener dentro elementos <titulo>
, <ingredientes>
y <procedimiento>
, que, a su vez, estarán definidos también en la DTD y podrán contener más elementos.Siguiendo la definición de elemento anterior, este ejemplo de documento XML sería válido:
<receta>
<titulo>...</titulo>
<ingredientes>...</ingredientes>
<procedimiento>...</procedimiento>
</receta>
Pero no este:
<receta>
<parrafo>Esto es un párrafo</parrafo>
<titulo>...</titulo>
<ingredientes>...</ingredientes>
<procedimiento>...</procedimiento>
</receta>
La especificación de contenido puede ser de cuatro tipos:
EMPTY
Puede no tener contenido. Suele usarse para los atributos.<!ELEMENT salto-de-pagina EMPTY>
ANY
Puede tener cualquier contenido. No se suele usar, ya que es conveniente estructurar adecuadamente nuestros documenteo XML.<!ELEMENT batiburrillo ANY>
Mixed
Puede tener caracteres de tipo dato o una mezcla de caracteres y sub-elementos especificados en la especificación de contenido mixto.<!ELEMENT enfasis (#PCDATA)>
<!ELEMENT parrafo (#PCDATA|enfasis)*>
Por ejemplo, el primer elemento definido en el ejemplo (<enfasis>) puede contener datos de carácter (#PCDATA). Y el segundo (<parrafo>) puede contener tanto datos de carácter (#PCDATA) como subelementos de tipo <enfasis>.
Element
Sólo puede contener sub-elementos especificados en la especificación de contenido.<!ELEMENT mensaje (remite, destinatario, texto)>
Para declarar que un tipo de elemento tenga contenido de elementos se especifica un modelo de contenido en lugar de una especificación de contenido mixto o una de las claves ya descritas.
Modelos de contenido:
Un modelo de contenido es en donde definimos los elementos aceptados y en el orden que deben aparecer.Un modelo bien sencillo podría ser este, que solo soporta un elemento dentro
<!ELEMENT aviso (parrafo)>
Esto nos dice que <aviso> solo puede contener un elemento párrafo.
El uso de la coma nos permite definir el orden estricto en el cual deben aparecer los elementos.
<!ELEMENT aviso (titulo, parrafo)>
Esto nos dice que un elemento <aviso> tiene que contener un elemento <titulo> y seguido un elemento <parrafo>.
<!ELEMENT aviso (parrafo | grafico)>
Con la barra vertical nos permite representar un ó, en este caso quedaría, dentro del elemento <aviso> podemos tener un elemento <párrafo> o un elemento <grafico>.
Aquí mostramos como se pueden combinar para crear DTD mas complicados y que se adapten a nuestras necesidades.
<!ELEMENT aviso (titulo, (parrafo | grafico))>
Además, cada partícula de contenido puede llevar un indicador de frecuencia, que siguen directamente a un identificador general, una secuencia o una opción, y no pueden ir precedidos por espacios en blanco.
Indicadores de frecuencia:
? - opcional (0 o 1 ves)
* - Opcional y repetible (0 o más veces)
+ - necesario y repetible (1 o mas veces)
Para entender esto, vemos este ejemplo:
<!ELEMENT aviso (titulo?, (parrafo+, grafico)*)>
En este caso, <aviso> puede tener <titulo> o no (pero sólo uno), y puede tener cero o más conjuntos <parrafo><grafico>, <parrafo><parrafo><grafico>, etc.
No hay comentarios:
Publicar un comentario