Guía de DTD - Irene-Frias/1DAM GitHub Wiki

📔 Guía de DTD

📑 ¿Qué es un DTD?

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.


✍🏻 ¿Para qué se utiliza?

  • 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.

🧩 Estructura de un documento DTD

  • 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 #PCDATA y 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>

📄 Tipos de DTD

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:

  1. 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 elemento nota contiene titulo y cuerpo en ese orden.
  • <!ELEMENT titulo (#PCDATA)> significa que titulo solo puede contener datos de texto.
  • <!ELEMENT cuerpo (#PCDATA)> establece que cuerpo también contiene solo texto.
  1. 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 externo nota.dtd define la estructura del XML.
  • Permite reutilizar el mismo DTD en múltiples documentos XML.

📋 Definición de atributos en DTD

Para crear un DTD válido, es importante seguir ciertas reglas:

  1. 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)>
  1. 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.

  1. Orden y Jerarquía
  • XML debe seguir el orden definido en el DTD.
  • Los elementos deben cerrarse correctamente.
  • Los atributos deben estar bien escritos.
  1. 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;

⚠️ **GitHub.com Fallback** ⚠️