DevSupportDocs/dtd.md

5.0 KiB

Apuntes DTD

Definición

Es una definición de estructura y sintaxis para los documentos XML o SGML. Se puede incluir dentro del mismo documento XML, ser un archivo separado, o una mezcla de ambas.

Tipo de documento DTD (y su declaración dentro del XML)

XML con DTD interno

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE marcadores [
   <!ELEMENT marcadores (pagina)*>
   <!ELEMENT pagina (nombre, descripcion, url)>
   <!ELEMENT nombre (#PCDATA)>
   <!ELEMENT descripcion (#PCDATA)>
   <!ELEMENT url (#PCDATA)>
]>
<marcadores>
   <pagina>
      <nombre>Abrirllave</nombre>
      <descripcion>Tutoriales de informática.</descripcion>
      <url>http://www.abrirllave.com/</url>
   </pagina>
</marcadores>

XML con DTD externo (Privado)

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE marcadores SYSTEM "marcadores.dtd">
<marcadores>
   <pagina>
      <nombre>Abrirllave</nombre>
      <descripcion>Tutoriales de informática.</descripcion>
      <url>http://www.abrirllave.com/</url>
   </pagina>
</marcadores>
<!ELEMENT marcadores (pagina)*>
<!ELEMENT pagina (nombre, descripcion, url)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT descripcion (#PCDATA)>
<!ELEMENT url (#PCDATA)>

XML con DTD externo (Público)

<?xml version="1.0" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
   <head>
      <title>Título</title>
   </head>
   <body>
      <p>Párrafo</p>
   </body>
</html>

Se suele usar el método externo cuando se utiliza para validar más de un documento.

XML con DTD combinado (interno y externo)

<!DOCTYPE elemento-raíz SYSTEM "URI" [ declaraciones ]>
---
<!DOCTYPE elemento-raíz PUBLIC "identificador-público" "URI" [ declaraciones ]>

Elementos

Tipos de declaraciones

<!ELEMENT nombre-del-elemento tipo-de-contenido>

El tipo de contenido permitido dentro de un elemento puede ser:

  • Texto - (#PCDATA)
  • Otros elementos
  • Elemento vacío - EMPTY
  • Combinación de texto y otros elementos - ANY
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE persona SYSTEM "persona.dtd">

<persona>
   <nombre>Carl</nombre>
   <edad/>
   <direccion>Rúa Veintisiete, 36246 <ciudad>Vigo</ciudad></direccion>
</persona>
<!-- Otros elementos -->
<!ELEMENT persona(nombre, edad, direccion)>
<!-- Texto -->
<!ELEMENT nombre (#PCDATA)>
<!-- Elemento vacío -->
<!ELEMENT edad EMPTY>
<!-- Combinación de texto y elementos -->
<!ELEMENT direccion ANY>

Cardinalidad de los elementos

Operador Cardinalidad
? 0-1 (min:0,max:1)
* 0-n (min:0,max:muchos)
+ 1-n (min:1,max:muchos)

Los elementos declarados en una DTD sobre los que no actúe ningún operador de cardinalidad, tendrán que aparecer obligatoriamente una única vez.

Operador de elección de elementos

Para declarar elementos que contengan elementos opcionales se utiliza el operador |

<!-- codigo o id, pudiendo repetirse -->
<!ELEMENT articulos (codigo | id)*>
<!-- codigo o id -->
<!ELEMENT articulo ((codigo | id), nombre)>
<!-- pais y ciudad o codigo_postal -->
<!ELEMENT localidad ((pais, ciudad) | codigo_postal)>
<!-- #PCDATA (texto sin etiquetas), o codigo, o id -->
<!ELEMENT articulos (#PCDATA | codigo | id)*>

Si una de las opciones es #PCDATA, esta debe escribirse en primer lugar.

Atributos

Tipos de declaraciones

<!ATTLIST nombre-del-elemento nombre-del-atributo tipo-de-atributo valor-del-atributo>

El tipo de atributo puede ser:

  • Valor por defecto - "valor"
  • Atributo obligatorio - #REQUIRED
  • Atributo opcional - #IMPLIED
  • Atributo fijo - #FIXED "valor"
<!-- Valor por defecto -->
<!ATTLIST f1 pais CDATA "España">
<!-- Valor obligatorio -->
<!ATTLIST f1 pais CDATA #REQUIRED>
<!-- Valor opcional -->
<!ATTLIST f1 pais CDATA #IMPLIED>
<!-- Valor fijo -->
<!ATTLIST f1 pais CDATA #FIXED "España">

Tipos de atributos

Tipo Descripcion
CDATA Texto
(val1 | val2) Elección de una lista
ID Id único
IDREF Id con referencia a otro atributo id
IDREFS Lista de ids existentes
NMTOKEN Cadena de caracteres**
NMTOKENS Uno o varios NMTOKEN separados por espacios
NOTATION El nombre de una notacion
ENTITY El nombre de una entidad
ENTITIES El nombre de varias entidades
xml:lang Indica el idioma del contenido
xml:space Espacios, tabs e intros se mantienen

https://en.wikipedia.org/wiki/XML_schema#Languages