Resumen DTD
Un DTD (Document Type Definition) es un conjunto de reglas y especificaciones que define la estructura y el contenido de un documento XML.
Se utiliza para validar documentos XML.
Declaración
DTD interno
El DTD está incluido en el documento XML.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE email[
<!ELEMENT email (date, to, from)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
]>
<email>
<date>2008-01-10</date>
<to>Tove</to>
<from>Jani</from>
</email>
DTD externo
El DTD es un fichero externo. Se debe indicar el atributo standalone
en la declaración XML.
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE email SYSTEM "email.dtd">
<email>
<date>2008-01-10</date>
<to>Tove</to>
<from>Jani</from>
</email>
email.dtd
<?xml version="1.0"?>
<!ELEMENT email(date, to, from)>
<!ELEMENT to(#PCDATA)>
<!ELEMENT from(#PCDATA)>
<!ELEMENT date(#PCDATA)>
Elementos
Contenido
Contenido | Ejemplo | Descripción |
---|---|---|
PCDATA | <!ELEMENT date (#PCDATA)> | PCDATA (Parsed Character Data). NO puede contener caracteres como < , > , & ... |
EMPTY | <!ELEMENT date EMPTY> | Elementos vacíos: <date /> |
ANY | <!ELEMENT date ANY> | Pueden contener cualquier cosa. |
Elemento | <!ELEMENT date (a, b)> | Puede contener un elemento <a> y un elemnto <b> . |
<!ELEMENT articulo (#PCDATA)> <!-- OK -->
<!ELEMENT articulo #PCDATA> <!-- ERROR -->
<!ELEMENT articulo EMPTY> <!-- OK -->
<!ELEMENT articulo ANY> <!-- OK -->
<!ELEMENT articulo (nombre, precio)> <!-- OK -->
<!ELEMENT articulo nombre, precio> <!-- ERROR -->
Cardinalidad
Modificador | Cardinalidad | Descripción |
---|---|---|
? | 0-1 | El elemento es opcional, pudiendo aparecer una sola vez o ninguna. |
+ | 1-n | El elemento tiene que aparecer, obligatoriamente, una o más veces. |
* | 0-n | El elemento puede aparecer cero, una o más veces. |
<!ELEMENT texto (#PCDATA)> <!-- una vez -->
<!ELEMENT articulo (codigo | id)> <!-- "codigo" o "id" -->
<!ELEMENT articulos (codigo | id)*> <!-- puede contener varios "codigo" y/o "id" -->
<!ELEMENT articulo ((codigo | id), nombre)> <!-- codigo o id, y nombre -->
<!ELEMENT localidad ((pais, ciudad) | codigo_postal)> <!-- pais y ciudad, o código postal -->
<!ELEMENT articulos (#PCDATA | codigo | id)> <!-- contenido mixto -->
<!ELEMENT articulos (codigo | #PCDATA | id*> <!-- INCORRECTO: #PCDATA debe ir primero -->
Atributos
Contenido
Tipo | Descripción |
---|---|
Enumeración | Enumeración. Permite definir una lista de valores permitidos. |
CDATA | Cadena de texto. |
NMTOKEN | Name Token. |
NMTOKENS | Lista de NMTOKEN . |
ID | Identificador único del elemento. |
IDREF | Referencia a un ID de otro elemento. Establece conexiones entre elementos. |
IDREFS | Lista de IDREF . Permite referenciar a múltiples IDs. |
ENTITY | Representa una entidad general no interpetada (unparsed general entity). |
ENTITIES | Lista de ENTITY . |
NOTATION | Nombre de una notación. |
<!ATTLIST email data (jan|feb|mar)> <!-- ERROR -->
<!ATTLIST email data (jan|feb|mar) "jan"> <!-- OK -->
<!ATTLIST email data (jan|feb|mar) #IMPLIED> <!-- OK -->
<!ATTLIST email data CDATA #IMPLIED>
<!ATTLIST email data NMTOKEN #IMPLIED>
<!ATTLIST email data NMTOKENS #IMPLIED>
<!ATTLIST email data ID #IMPLIED>
<!ATTLIST email data IDREF> <!-- ERROR -->
<!ATTLIST email data IDREF #IMPLIED> <!-- OK -->
<!ATTLIST email data IDREFS #IMPLIED>
Modificadores
Modificador | Descripción |
---|---|
#REQUIRED | Atributo obligatorio. |
#IMPLIED | Atributo sin valor fijo, sin valor por defecto y no requerido. El atributo es opcional. |
#FIXED | Atributo con valor fijo. |
<!ATTLIST email uid CDATA #REQUIRED>
<!ATTLIST email uid CDATA #IMPLIED>
<!ATTLIST email uid CDATA #FIXED "eml">
Entidades
Entidades de XML
& <!-- Muestra & -->
" <!-- Muestra " -->
' <!-- Muestra ' -->
< <!-- Muestra < -->
> <!-- Muestra > -->
Entidades propias
<!ENTITY escritor "Miguel de Cervantes"> <!--General interna -->
<!ENTITY lenguaje SYSTEM "lang.txt"> <!--General externa (privada) -->
<!ENTITY % texto "(#PCDATA)"> <!-- Paramétrica interna -->
<!ENTITY % idioma SYSTEM "idioma.dtd"> <!-- Paramétrica externa (privada) -->
&escritor; <!-- Entidad general -->
%texto; <!-- Entidad paramétrica -->
Secciones condicionales
El uso de las secciones condicionales suele estar ligado a entidades paramétricas.
<![ INCLUDE [ declaraciones ]]> <!-- Incluir -->
<![ IGNORE [ declaraciones ]]> <!-- Ignorar -->