Se pretende construir una DTD que valide este documento XML: persona.xml:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE pertsona SYSTEM "persona.dtd"]>
<persona dni="12345678-L" situacionCivil="Casado">
<nombre>Maria</nombre>
<apellido></apellido>
<edad>60</edad>
<actividad/>
</pertsona>
Se pretende construir una DTD que valide este documento XML: persona.xml::
- dni El atributo es un identificador obligatorio.
- El estado civil puede ser: soltero, casado o divorciado. Por defecto, casado.
- <actividad> es un elemento opcional
El DTD que lo encuentra se encuentra en el archivo persona.dtd, que es:
<!ELEMENT persona (nombre, apellido, edad, actividad?)>
<!ATTLIST persona dni ID #REQUIRED
situacionCivil (Soltero | Casado | Divorciado) "Soltero">
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellido (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
<!ELEMENT actividad (#PCDATA) EMPTY>
DTD
Aquí hay algunas limitaciones de DTD:
- Un DTD no es un documento XML; por lo que no se puede verificar si está bien formado.
- Las restricciones no pueden incluirse en los valores de elementos y atributos; es decir, su tipo de datos, su tamaño, y así sucesivamente.
- No se permite el espacio de nombres.
- Los valores de los atributos solo se pueden enumerar (no hay elementos).
- A los atributos solo se les puede dar el valor predeterminado (sin elementos).
- Un control limitado se puede establecer en elementos cardinales; Es decir, cuántas veces se puede determinar.
Uso de elementos y atributos.
Elementos:
- Se utilizan para representar los contenidos de las jerarquías o los elementos contenidos en los elementos.
- Se pueden ampliar con otros elementos internos.
- El orden de aparición es inextricable.
- Pueden tener atributos.
- Puede haber varias apariencias de un elemento.
Atributos:
- Aparecen vinculados a los elementos.
- Son modificadores de información.
- Se usan para registrar metadatos.
- La ocurrencia más obvia (dentro del elemento vinculado) no es significativa.
- No se pueden expandir con otros elementos internos.
- Dentro de un elemento, no se puede mostrar una cantidad de apariencias de un atributo.
- DTD en el documento mismo
- <!DOCTYPE nombre [ ... deklaraciones ... ]>
- DTD fuera del documento:
- <!DOCTYPE nombre SYSTEM "uri">
- Combinado, dentro y fuera del DTD:
- <!DOCTYPE nombre SYSTEM "uri" [ ... deklaraciones ... ]>
- La aplicación DTD es un documento externo para diferentes:
- <!DOCTYPE nombre PUBLIC "fpi" "uri">
- Combinado el DTD interno y externo:
- <!DOCTYPE nombre PUBLIC "fpi" "uri" [ ... deklaraciones ... ]>
Para todos los casos:
- "nombre" será el nombre del tipo de documento XML, debe coincidir con el nombre de la raíz del documento XML.
- "uri" es el camino a la DTD (absoluto o relativo).
- "fpi" (Identificador público formal).
- Entidades internas:
- <!ENTITY NombreEntidad "ValorEntidad">
- Entidades externas (archivo de texto):
- <!ENTITY NombreEntidad SYSTEM "uri">
- <!ENTITY NombreEntidad PUBLIC "fpi" "uri">
- Entidad externa (archivo no de texto):
- <!ENTITY NombreEntidad SYSTEM "uri" NDATA tipo>
- <!ENTITY NombreEntidad PUBLIC "fpi" "uri" NDATA tipo>
- Entidades paramétricas:
- <!ENTITY % NombreEntidad "ValorEntidad">
- <!ENTITY % NombreEntidad SYSTEM "uri">
- <!ENTITY % NombreEntidad SYSTEM "uri" NDATA tipo>
Para todos:
- "NombreEntidad"
- "ValorEntidad"
- El camino a "uri" (absoluto o relativo).
- "tipo": especifica el tipo de archivo (gif, jpg, etc.).
- "fpi" (Identificador público formal).
Las notaciones se usan en XML para definir las entidades externas que no va a analizar en procesador XML (aunque sí lo hará la aplicación que trate un documento). Para hacer referencia estas entidades no se utiliza la notación habitual (&nombreEntidad;), sino que se utiliza el nombre de la entidad directamente.
- Elementos:
- <!ELEMENT NombreElementos (contenido)>
- Edukia:
- EMPTY: elemento vacio
- (#PCDATA): texto
- ANY: cualquier cosa.
- , (coma): Los elementos aparecen en orden.
- | (o lógico): uno de los elementos a los lados.
- ?: Si el elemento puede aparecer o no, solo una vez.
- *: El elemento puede aparecer el doble de veces (cero o más veces).
- +: por lo menos tiene que aparecer una vez
- (): para unir declaraciones
- Atributos:
- <!ATTLIST NombreElemento NombreAtributo TipoAtibuto AtributoPorDefecto >
- <!ATTLIST NombreElemento NombreAtributo1 TipoAtibuto1 AtributoPorDefecto1>
- <!ATTLIST NombreElemento NombreAtributo2 TipoAtibuto2 AtributoPorDefecto2>
- <!ATTLIST NombreElemento
- NombreAtributo1 TipoAtibuto1 AtributoPorDefecto1
- NombreElemento NombreAtributo2 TipoAtibuto2 AtributoPorDefecto2
- >
- Tipo de atributos:
- CDATA: caracteres de cadena (ilimitados).
- NMTOKEN: letras, números y puntos "," línea "-", línea debajo "_", dos puntos ":".
- NMTOKENS:leras, números y puntos "," línea "-", línea debajo de "_", dos puntos ":" (como NMTOKEN) y espacios.
- valores: lista de valores Listar los corchetes, con líneas verticales "|" valores alejados Si tienen espacios, deben pasar entre comillas simples o dobles.
- ID: Los valores no se pueden repetir en otro elemento o atributo.
- IDREF: el valor debe coincidir con el ID de otro elemento.
- IDEREFS: El valor es una lista de los demás valores de ID de atributos.
- ENTITY: Entidad definida por DTD.
- ENTITIES: Lista de entidades definidas por el DTD.
- NOTATION: DTD notación definida.
- Valores iniciales:
- #REQUIRED: Soy un atributo perverso y no le pongo el valor inicial.
- #IMPLIED: No es falso y no tiene un valor inicial.
- #FIXED value: El atributo tiene un valor fijo.