Saltar al contenido
Codifíca.me | Desarrollo web | Programación
XML

Documentos XML III : DTD, SCHEMAS y Validación

23 agosto, 2010

DTD, SCHEMAS y Validación

En este artículo comentaremos como funcionan las DTD, SCHEMAS y Validación en XML.

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>