DevSupportDocs/dtd.md

201 lines
5.8 KiB
Markdown

## 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
<?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
<?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>
```
```dtd
<!ELEMENT marcadores (pagina)*>
<!ELEMENT pagina (nombre, descripcion, url)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT descripcion (#PCDATA)>
<!ELEMENT url (#PCDATA)>
```
#### XML con DTD externo (Público)
```xml
<?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)
```xml
<!DOCTYPE elemento-raíz SYSTEM "URI" [ declaraciones ]>
---
<!DOCTYPE elemento-raíz PUBLIC "identificador-público" "URI" [ declaraciones ]>
```
### Elementos
#### Tipos de declaraciones
```dtd
<!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
<?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>
```
```dtd
<!-- 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 |
```dtd
<!-- 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
```dtd
<!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"
```dtd
<!-- 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 |
### Entidades
Las entidades permiten definir constantes
```dtd
<!-- Interna -->
<!ENTITY nombre-de-la-entidad "valor-de-la-entidad">
<!-- Externa SYSTEM texto -->
<!ENTITY nombre-de-la-entidad SYSTEM "URI">
<!-- Externa PUBLIC texto -->
<!ENTITY nombre-de-la-entidad PUBLIC "identificador-público" "URI">
<!-- Externa SYSTEM binario -->
<!ENTITY nombre-de-la-entidad SYSTEM "URI" NDATA notación>
<!-- Externa PUBLIC binario -->
<!ENTITY nombre-de-la-entidad PUBLIC "identificador-público" "URI" NDATA notación>
<!-- Interna parametrizable (constantes para los propios dtd) -->
<!ENTITY % nombre-de-la-entidad "valor-de-la-entidad">
<!-- Externa parametrizable SYSTEM -->
<!ENTITY % nombre-de-la-entidad SYSTEM "URI">
<!-- Externa parametrizable PUBLIC -->
<!ENTITY % nombre-de-la-entidad PUBLIC "identificador-público" "URI">
```
### Notaciones
https://en.wikipedia.org/wiki/XML_schema#Languages