Guía de DTD - Irene-Frias/1DAM GitHub Wiki
DTD (Document Type Definition) es un conjunto de reglas que define la estructura, los elementos y los atributos permitidos en un documento XML. Se usa para validar que un archivo XML cumple con un formato predefinido.
- Validación de XML: permite verificar que un documento XML sigue una estructura establecida.
- Definición de estructura: especifica qué elementos y atributos pueden aparecer en un documento XML.
- Estandarización: asegura que los datos en XML tengan un formato uniforme.
- Interoperabilidad: facilita el intercambio de datos entre diferentes sistemas.
- Automatización: Los programas que procesan XML pueden usar un DTD para garantizar que los datos sean correctos y completos.
- Declaramos el tipo de fichero, el elemento raíz del XML y todo lo que está en corchetes
[]donde especificaremos las reglas que debe cumplir el XML.
<!DOCTYPE persona [...]>- Declaramos el elemento
<persona>donde debe contener los subelementos<nombre>y<correo>en ese orden. En este caso no se corresponde más elementos dentro de<persona>fuera de los definidos.
<!ELEMENT persona (nombre, edad, correo)>- Indicaremos que el elemento el tipo de datos, en este caso solo debe contener los datos como texto
#PCDATAy no puede incluir otros elementos en el XML dentro. Al igual que<edad>y<correo>
<!ELEMENT nombre (#PCDATA)>La estructura del DTD sería la siguiente:
<!DOCTYPE persona [
<!ELEMENT persona (nombre, edad, correo)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
<!ELEMENT correo (#PCDATA)>
]>Si queremos que sea un documento XML válido con DTD, debe seguir la siguiente estructura:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persona [
<!ELEMENT persona (nombre, edad, correo)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
<!ELEMENT correo (#PCDATA)>
]>
<persona>
<nombre>Juan Pérez</nombre>
<edad>30</edad>
<correo>[email protected]</correo>
</persona>Esto es un fichero DTD con XML:
<!DOCTYPE nota [
<!ELEMENT nota (titulo, cuerpo)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT cuerpo (#PCDATA)>
]>
<nota>
<titulo>Recordatorio</titulo>
<cuerpo>No olvidar la reunión a las 3 PM.</cuerpo>
</nota>Existen dos tipos de DTD:
- DTD Interno: definido dentro del mismo documento XML.
<!DOCTYPE nota [
<!ELEMENT nota (titulo, cuerpo)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT cuerpo (#PCDATA)>
]>Explicación:
-
<!ELEMENT nota (titulo, cuerpo)>indica que el elementonotacontienetituloycuerpoen ese orden. -
<!ELEMENT titulo (#PCDATA)>significa quetitulosolo puede contener datos de texto. -
<!ELEMENT cuerpo (#PCDATA)>establece quecuerpotambién contiene solo texto.
- DTD Externo: guardado en un archivo separado y referenciado en el XML. Se almacenan los siguientes archivos:
- Archivo
nota.dtd
<!ELEMENT nota (titulo, cuerpo)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT cuerpo (#PCDATA)>- Archivo XML que lo usa
<!DOCTYPE nota SYSTEM "nota.dtd">
<nota>
<titulo>Recordatorio</titulo>
<cuerpo>No olvidar la reunión a las 3 PM.</cuerpo>
</nota>Explicación:
-
SYSTEM "nota.dtd"indica que el archivo externonota.dtddefine la estructura del XML. - Permite reutilizar el mismo DTD en múltiples documentos XML.
Para crear un DTD válido, es importante seguir ciertas reglas:
-
Definir Elementos con
<!ELEMENT>Cada elemento debe estar definido con su contenido permitido:-
(#PCDATA): Solo texto. -
(subelemento1, subelemento2): Contiene otros elementos en un orden específico. -
(subelemento1 | subelemento2): Puede contener uno u otro. -
(subelemento1*): Puede aparecer 0 o más veces. -
(subelemento1+): Debe aparecer al menos una vez. -
(subelemento1?): Es opcional (0 o 1 vez).
-
<!ELEMENT libro (titulo, autor, paginas?)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT paginas (#PCDATA)>-
Definir Atributos con
<!ATTLIST>Los atributos se definen dentro de<!ATTLIST>:
<!ELEMENT persona (nombre, edad)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
<!ATTLIST persona id CDATA #REQUIRED>Tipos de atributos:
-
CDATA: Cualquier texto. -
ID: Un identificador único en el documento. -
IDREF: Referencia a otro ID en el documento. -
NMTOKEN: Un nombre sin espacios.
Ejemplo con valores predeterminados:
<!ATTLIST producto categoria (electronica | hogar | ropa) "electronica">Aquí, categoria tiene un valor predeterminado electronica.
- Orden y Jerarquía
- XML debe seguir el orden definido en el DTD.
- Los elementos deben cerrarse correctamente.
- Los atributos deben estar bien escritos.
- Uso de Entidades
- Las entidades permiten reutilizar texto en XML:
<!ENTITY aviso "Este producto está en oferta.">Se usa en el documento XML como &aviso;