207 lines
6.2 KiB
Markdown
207 lines
6.2 KiB
Markdown
## Documentación 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 para que se pueda hacer referencia a ellas tanto desde el propio documento dtd (parametricas) como desde el xml (generales), pero se deben declarar en el mismo documento donde se vayan a utilizar.
|
|
|
|
```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
|
|
|
|
### Secciones condicionales
|
|
|
|
Las secciones condicionales sirven para definir grupos de elementos que se deban de incluir o ignorar dentro del documento xml
|
|
|
|
|
|
|
|
https://en.wikipedia.org/wiki/XML_schema#Languages |