Está usted en Indice > Construcción > Lenguajes > XML > Manual de XML > DTD vs XML-Schema
Construcción
Maletín
Utilidades
Cursos
Promoción
Rentabilidad
Zona Novatos
Foros
Acceso a tu cuenta

MANUAL DE XML

DTD VS XML-SCHEMA

Ejemplo de documento XML para matrícula
Definición general del documento XML que representa la imagen de matrícula de un alumno que realiza la Automatrícula en la Universitat Jaume I. En esto documento no diferenciamos si su estructura interna va a ser definida por un DTD o por un XML-Schema ...

<?xml version="1.0" encoding="ISO-8859-1"?>
        <matricula>
          <personal>
            <dni>52945813C</dni>
            <nombre>Ricardo Borillo Domenech</nombre>
            <titulacion>Enginyeria Informàtica (Pla 2001)</titulacion>
            <curso_academico>2002/2003</curso_academico>

            <domicilios>
              <domicilio tipo="familiar">
                <nombre>C/ Principal nº1</nombre>
              </domicilio>
              <domicilio tipo="habitual">
                <nombre>C/ Secundaria nº2</nombre>
              </domicilio>
            </domicilios>
          </personal>

          <pago>
            <tipo_matricula>Matrícula ordinària</tipo_matricula>
          </pago>
        </matricula>

En el caso de que queramos definir la estructura del documento mediante un XML-Schema, deberemos sustituir la cabecera del documento de la forma siguiente:

<?xml version="1.0" encoding="ISO-8859-1"?>
        <matricula xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="prueba.xsd">
        ...
        </matricula>

Si por el contrario, queremos seguir utilizando la estructura clásica de un DTD:

<?xml version="1.0" encoding="ISO-8859-1"?>
        <!DOCTYPE matricula SYSTEM "matricula.dtd">
        <matricula>
        ...
        </matricula>

Ejemplo de DTD para matrícula.-
<!ENTITY matricula (personal, pago)>

        <!ENTITY personal (dni, nombre, titulacion, curso_academico, domicilios)>
        <!ENTITY dni (#PCDATA)>
        <!ENTITY nombre (#PCDATA)>
        <!ENTITY titulacion (#PCDATA)>
        <!ENTITY curso_academico (#PCDATA)>
        <!ENTITY domicilios (domicilio+)>
        <!ENTITY domicilio (nombre)>
        <!ATTLIST domicilio
           tipo (familiar|habitual) #REQUIRED>
        <!ENTITY nombre (#PCDATA)>

        <!ENTITY pago (tipo_matricula)>
        <!ENTITY tipo_matricula (#PCDATA)>

Ejemplo de XML-Schema para matrícula.-
<?xml version="1.0" encoding="ISO-8859-1"?>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="ES">
          <xs:element name="matricula" type="tMatricula"/>

          <xs:complexType name="tMatricula">
            <xs:sequence>
              <xs:element name="personal" type="tPersonal"/>
              <xs:element name="pago" type="tPago"/>
            </xs:sequence>
          </xs:complexType>

          <xs:complexType name="tPersonal">
            <xs:all>
              <xs:element name="dni" type="xs:string"/>
              <xs:element name="nombre" type="xs:string"/>
              <xs:element name="titulacion" type="xs:string"/>
              <xs:element name="curso_academico" type="xs:string"/>
              <xs:element name="domicilios" type="tDomicilio"/>
            </xs:all>
          </xs:complexType>

          <xs:complexType name="tPago">
            <xs:all>
              <xs:element name="tipo_matricula" type="xs:string"/>
            </xs:all>
          </xs:complexType>

          <xs:complexType name="tDomicilio">
            <xs:sequence>
              <xs:element name="domiclio" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:all>
                    <xs:element name="nombre" type="xs:string"/>
                  </xs:all>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:schema>

XML-Schemas y RELAX NG.- Al igual que surgió XML Schema como una mejora necesaria sobre la idea en la que se fundamentaban las DTDs, han surgido distintas propuestas al margen de los Schemas, de estas ideas no vamos a quedar con una, RELAX NG, que es, a su vez, la fusión de otras dos iniciativas TREX y RELAX que para conseguir un mayor avance han decidido aunar fuerzas. Básicamente, RELAX NG maneja documentos XML que representan esquemas e instancias a través de un modelo abstracto de datos, esto que suena un poco oscuro viene a querer expresar que, para RELAX NG, un documento XML es la representación de un elemento y que a su vez un elemento está formado por una serie de "partes" como son: un nombre, un contexto, un conjunto de atributos y una secuencia ordenada de cero o más hijos. Y así con cada una de estas partes. Aunque la especificación completa se puede encontrar en OASIS7, vamos a mostrar cuales son la principales diferencias, no tanto conceptuales si no de uso, de RELAX NG con respecto a XML Schema. En primer lugar es importante resaltar que RELAX NG, y sus precursores RELAX y TREX, son intentos de simplificar y/o potenciar la utilidad de las DTDs en general y en particular de XML Schema. También es importante indicar que esta iniciativa no es oficial de W3.ORG, si bien está impulsándose dentro de un nutrido grupo de gente lideradas por James Clark, MURATA Makoto, y aún no está reconocido por el estándar ni tan siquiera como recomendación. En segundo lugar, podemos decir, sin mucho margen de error, que la principal mejora de RELAX NG respecto a XML Schema es la mayor simplicidad en manejo y aprendizaje que requiere. Como consecuencia de esta simplificación renunciamos al uso de los <simpleType> y <complexType> a favor del uso de, únicamente, elementos y ciertas etiquetas especiales para marcar número requerido de apariciones, tipo de dato de un elemento, etc

 

 



Versión imprimible - Versión imprimible de este documento
Enviar e-mail - Enviar por e-mail este documento
Publicidad

Información legal | Política de Privacidad | Contacte con nosotros

Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.


Página generada el 05-07-2008 a las 15:18:47