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
#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>
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 elementonota
contienetitulo
ycuerpo
en ese orden. -
<!ELEMENT titulo (#PCDATA)>
significa quetitulo
solo puede contener datos de texto. -
<!ELEMENT cuerpo (#PCDATA)>
establece quecuerpo
tambié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.dtd
define 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;