Saltar al contenido

www. La mandarina mecánica .es

Programación y Tecnología

Archivo

Etiqueta: dtd

Las DTD conocidas como (Document Type Definition) nos definen estructuras que nos definen del formato de datos, para usar un formato común y mantener la consistencia entre todos los documentos. Nos puede definir fundamentelmente :

- Nos define que etiquetas podemos usar .

- Lo atributos que pueden llevar esas etiquetas

- Combinaciones de elementos etc..

Un Ejemplo de DTD :

<!ELEMENT lista_de_clientes (persona*)>

<!ELEMENT clientes (nombre,sexo?, Dni?)>

<!ELEMENT nombre (#PCDATA) >

<!ELEMENT sexo (#PCDATA) >

<!ELEMENT Dni (#PCDATA)>

 

- <lista_de_clientes> es un nombre de elemento válido. El * indica que puede haber 0 o más elementos de persona.

- <clientes> es un nombre de elemento válido. Éste contiene obligatoriamente el elemento nombre mientras que el resto son opcionales. Y lo son porque nos lo indica el símbolo “?”.

- <nombre> es un nombre de elemento válido. Contiene caracteres.

- <sexo> es un nombre de elemento válido. Contiene caracteres.

- < Dni > es un nombre de elemento válido.

Un ejemplo de xml que hace unos de una DTD:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE lista_de_personas SYSTEM “ejemplo.dtd”>

< lista_de_clientes >

<clientes>

<nombre>Antoñito el fantástico</nombre>

<sexo>Varón</sexo>

</clientes>

</ lista_de_clientes >

El uso de las DTD está un poco obsoleto , debido a que es muy poco flexible ( vamos que una DTD no podría ser gimnasta ni nada de eso) y no nos permite por ejemplo definir el tipo de dato que puede llevar cada entidad si no es texto ( Fechas, limitacion caracteres etc…) , ni tampoco de sus atributos, por estos problemas y por algunos otros propicio que se creasen otros lenguajes para validación de XML los llamados XML Schema.

Los esquemas XML Schema presentan una serie de ventajas con respecto a las DTD como pueden ser:

- Nos da una sintaxis de Xml, al contrario que las DTD

- Permiten especificación de tipos datos

- Tienen notación Xml

- Son extensibles.

Ejemplos de XML Schema TiendaLibro.xsd :

<?xml version=”1.0″ encoding=” ISO-8859-1“?>

<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema

targetNamespace=”http://www.libros.org/

xmlns=”http://www.libros.org/“ elementFormDefault=”qualified”>

<xs:element name=”Libreria” type=”TipoLibreria”/>

<xs:complexType name=”TipoLibreria”>

<xs:sequence>

<xs:element name=”Libro” type=”TipoLibro” maxOccurs=”unbounded”/>

</xs:sequence>

</xs:complexType>

<xs:complexType name=”TipoLibro”>

<xs:sequence>

<xs:element name=”Titulo” type=”xs:string”/>

<xs:element name=”Autor” type=”xs:string” maxOccurs=”3″/>

<xs:element name=”Fecha” type=”xs:string”/>

<xs:element name=”ISBN” type=”xs:string”/>

</xs:sequence>

</xs:complexType> </xsd:schema>

Para incluir la validacion en el Xml contra un esquema pondríamos por ejemplo :

<?xml version=”1.0″ encoding=” ISO-8859-1“?>

<Libreria xmlns=”http://www.libros.org/

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance

xsi:schemaLocation=”http://www.libros.org/libreria.xsd”>

<Libro>

<Titulo>El ultimo viaje</Titulo>

<Autor>Perico Federico Eurico Sigerico</Autor>

<Autor>Catalina Par de Ases</Autor>

<Fecha> 1998</Fecha>

<ISBN>00000-1000-43892</ISBN>

</Libro>

</Libreria>

 

Le estamos diciendo al analizador sintáctico XML (parser) que valide el

documento contra el schema “libreria.xsd”.

 

NOTA: puede ser que el Xml no tenga ese tag aunque luego lo validemos explícitamente por otros medios aunque no lo hayamos descrito de todas formas lo correcto es hacerlo.

Un Esquema por tanto:

- Define los elementos y atributos que pueden aparecer en un documento

- Define los hijos de cada elemento

- Define el orden de los hijos

- Define el número de hijos

- Define el contenido (si lo tiene) de cada elemento

- Define tipos de atributos y elementos

- Define valores fijos, por defecto o la forma de éstos para los atributos.

- En definitiva aumenta las capacidades de DTD.

Para entender la referencia a los esquemas en los Xml tenemos que saber que son los espacios de nombres :

- Los espacios de nombres XML proporcionan un método para la unicidad, establecen las diferencias entre varios autores de esquemas que utilizan los mismos nombres de elementos.

- Cada espacio de nombres se asocia con una URI,que sólo sirve como identificador único y no tiene por qué ser un localizador real.

Ej: xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>

<xsl:template match=”/”>

<html>

Cada documento XML posee una estructura lógica y una física. La estructura lógica del documento es una serie de declaraciones, elementos, comentarios, etc. que se indican en el documento mediante marcas explícitas. La estructura física del documento es una serie de unidades llamadas entidades, es decir, indica los datos que contendrá el documento. Las estructuras lógica y física deben anidarse de forma correcta.

En documento XML podremos observar una serie de partes generales:

· Prólogo.

o Contiene información relativa al presente XML

o Contiene la vinculación con su DTD (si existe).

o Contiene instrucciones que deben ser ejecutadas por la aplicación que lo procese (instrucciones de proceso).

o Contiene la vinculación con su hoja de estilo correspondiente (si existe).

Ej: <?xml version=”1.0″ encoding=”ISO-8859-1″ standalone=”yes”?>

· Elemento root o raíz principal: Elemento principal del docuemtno que englobara a todos los demás será el elemento “Padre”.

· Contenido de los elementos: Es el dato contenido en este ejemplo el contenido seria a 00001

Ej: <DNI> 00001</DNI>

· Atributos: Puede servir para dar información adicional sobre el

elemento.

Ej: <Tema sección=’naturaleza’>

El canto de la paloma torcaz

</Tema>

· Comentarios: Al igual que en Html sirven para poner notas al código del documento

Ej: <!– Este es un comentario –>

· Entidades: Deben estar predefinidas en la DTD ( en otro post explicaremos que son las DTD función sintaxis etc..)

Se usan precediendo &nombreEntidad;

Teniendo en la DTD

<!ENTITY NombreAsegurado “Paco”>

En el Xml pondríamos:

<Asegurado> &NombreAsegurado ; </ Asegurado >

· Secciones CDATA : Secciones que no son tenidas en cuenta por el parser (Los parser son herramientas para el tratamiento y manipulacion de XMLhablaramoes sobre ellos mas exhaustivamente mas adenlate) en las cuales podremos incluir palabras o simbolos reservados por ejemplo el símbolo “<” es un símbolo que no se puede poner como tal pero si podemos incluirlo con esta etiqueta:

<![CDATA["<nombre>"]]>

NOTA: Lo único que no podría contener esta sección es “]]>” dado q es el fin de la propia entidad y no se puede anidar.

Centrándonos en su Validación tenemos que hacer una diferenciación entre lo que es un documento bien formado (well-formed) y un documento Válido (valid).

Un documento Xml está bien formado según la W3C (World Wide Web Consortium) cuando :

1- Tomado como un todo, cumple la regla denominada “document”. Cumplir esta regla indica:

a- Que contiene al menos uno o mas elementos.

b- Tiene un elemento root , raiz o principal, bien delimitado, que no es contenido por ningún otro elemento y que contiene a su vez a todos los demás. Es decir el elemento root, es el elemento padre y los demás serán sus hijos.

Por ejemplo, en este caso Tienda seria el elemento principal las demas etiquetas serian sus hijos suyos:

<?xml version=”1.0″ encoding=”ISO-8859-1″ standalone=”yes”?>

<Tiendas>

<Tienda1>

<Direcion>Calle Teruel</Direccion>

<Poblacion>Villa Manuela de Arriba</Poblacion>

<Responsable>Mr T.</Responsable>

</Tienda1>

<Tienda2>

<Direccion>Calle Teruel</Direccion>

<Poblacion>Villa Manuela de Abajo</Poblacion>

<Responsable>Mr T.</Responsable>

</Tienda2>

</ Tiendas >

2- Respeta todas las restricciones de buena formación cuyas especificaciones son:

a- Si no se utiliza DTD, el documento debe comenzar con un Declaración de Documento Standalone.

b- Todas las etiquetas deben estar balanceadas: esto es, todos los elementos que contengan datos de tipo carácter deben tener etiquetas de principio y fin.

c- Todos los valores de los atributos deben ir entrecomillados (el carácter comilla simple [el apóstrofe] puede utilizarse si el valor contiene caracteres comillas dobles, y viceversa): si necesitas ambos, utiliza &apos; y &quot .

d- Cualquier elemento VACÍO (p.e. aquellos que no tienen etiqueta final como <IMG>, <HR>, y <BR> y otros de HTML) deben terminar con ‘/>’ o debes hacerlos no VACÍOS añadiéndoles una etiqueta de fin.

e- No debe haber etiquetas aisladas (< ó &) en el texto (p.e. debe darse como &lt; y &amp;), y la secuencia ]]> debe darse como ]]&gt; si no ocurre esto como final de una sección marcada como CDATA.

f- Los elementos deben anidar dentro de sí sus propiedades (no se deben sobreponer etiquetas, como en el resto de SGML).

g- Los ficheros bien-formados sin-DTD pueden utilizar atributos en sus elementos, pero éstos deben ser todos del tipo CDATA, por defecto. El tipo CDATA (character DATA) son caracteres.

3- Cada una de las entidades analizadas que se referencia directa o indirectamente en el documento está bien formada

Un documento válido es aquel que además de estar bien formado, cumplen las especificaciones de la DTD (Document Type Definition), del Schema o esquema ( como es nuestro caso), o del elemento que lo valide, y siguen las pautas marcadas por sus modelos de contenido. No hay esquemas de documentos idénticos, por eso es difícil concretar las reglas que deben cumplir.

Para que un documento XML también sea válido, durante el proceso de validación se comprueba:

1 -Qué elementos o atributos se permiten en un documento del tipo definido en el esquema.

2 -La estructura de los elementos y atributos (elementos anidados, atributos obligatorios u opcionales, etc.) .

3 -El orden de los elementos.

4 -Los valores de los datos de atributos y elementos (según enumeraciones, rangos de valores delimitados, tipo de dato correcto (p.ex formato correcto de una fecha, utilizar un entero para expresar un número), etc.

5 -La unicidad de valores dentro de un documento (p. ex. Referencias de productos que no pueden repetirse.

Bueno en próximos post Veremos que es una DTD (Document Type Definition) que es un XML Schema y cómo podemos validar documentos XML con ellos.