054 011 15-4437-6034
skip to the main content area of this page
XML

Valid XHTML 1.0!

 

 

Buenos Aires, Argentina.

Ultima fecha de actualización, Agosto de 2001.

 

 

Anterior      Menú Principal      Siguiente

 

XML Schema:

Según la W3C XML Schema es un conjunto de reglas que sirve para forzar la estructura y la articulación del conjunto de documentos XML. Atento a ciertas limitaciones que el W3C encontró en las DTDs, en enero de 1998, emite una primera nota sobre XML-Data.

No se puede andar por la vida sin entender que nos dicen cuando las W3C emite una nota, o un borrador de trabajo o una recomendación. No son la misma cosa. No.

Una nota es la especificación de menor nivel que publica la W3C, es una idea en forma de documento con fecha y no representa un compromiso de parte de la W3C de continuar con este trabajo, es decir que puede no prosperar. Un borrador de trabajo representa un trabajo en curso, sujeto a modificaciones y bajo el compromiso de la W3C de desarrollar el borrador hasta el nivel de recomendación que es el estadio mas alto de una especificación W3C y representa una especificación estable y finalizada. Previo al estado de recomendación tenemos las recomendaciones candidatas que son borradores de trabajo que han recibido una significativa cantidad de lecturas y correcciones de parte de las comunidades técnicas más afines. En un nivel superior, más cercano a la recomendación están las recomendaciones propuestas que son recomendaciones candidatas, que cuentan con el consenso del grupo de trabajo que la produce y ha sido propuesta por el Director del Comité de Consejo para su examinación.

En julio de ese mismo año se publica otra nota llamada DCD (Document Content Description) basada en RDF (Resource Description Framework) que es un vocabulario XML.

Quien quiera ver algo más sobre XML-Data o DCD puede mirar en http://www.w3.org/TR/1998/NOTE-XML-data-0105 o en http://www.w3.org/TR/NOTE-dcd

XML-Schema es una tecnología Microsoft basada en XML-Data, en mayo de 1999 la W3C emitió una especificación de esquema de nombre XML-Schema que viene a unificar estas tres tendencias mencionadas arriba. XML_Schema está en su etapa de borrador de trabajo, esto nos indica que la especificación puede sufrir modificaciones. El borrador de XML-Schema puede consultarse en línea en http://www.w3.org/1999/05/06-xmlschema-1

Las características salientes de esta tecnología son:

 

XML-Schema está basado en XML.
Puede ser analizado sintácticamente como cualquier documento XML.
Soporta un conjunto de tipo de datos (int, float, boolean, date, etc.).
Como se basa en XML presenta un modelo de datos abierto que permite ampliar el vocabulario.
Soporta la integración de namespaces o espacios de nombres, con esto se pueden asociar documentos con las declaraciones de tipos de un esquema.
Soporta grupos de atributos, con lo que se pueden combinar atributos.

 

Actualmente Microsoft es el único que soporta XML-Schema.

Como XML-Schema es un vocabulario XML puede pensarse que requiera una DTD y es correcto, pero no es necesaria salvo el caso que quiera validar su documento de esquema. Pero hay que tener en cuenta que esta DTD valida al esquema y no al documento cuya estructura se describe en XML-Schema.

Veamos los elementos que definen el vocabulario XML-Schema:

 

Schema
datatype
ElementType
element
group
AttributeType
attribute
description

 

Elemento Schema:

Actúa como elemento raiz y contiene a todo el resto del documento tiene dos atributos de nombre name y xmlns para definir el nombre del esquema y para establecer el espacio de nombres. El atributo xmlns debe configurarse a urn:schemas-microsoft-com:xml-data para poder utilizar la implementación XML-Schema que hace Microsoft,

 

<Schema name="MiSchema" xmlns="urn:schemas-microsoft-com:xml-data">

           <!-El contenido del esquema va aquí->

</Schema>

 

Los espacios de nombres o namespaces se usan para garantizar la unicidad de los nombres de los elementos y atributos asociados a un determinado vocabulario XML.

Además se debe especificar el nombre del espacio de tipo de datos, asi se pueden usar tipos de datos como float, int,date y otros,

 

<Schema name="MiSchema" xmlns="urn:schemas-microsoft-com:xml-data"

xmlns:dt="urn:schemas-microsoft-com:datatypes">

           <!-El contenido del esquema va aquí->

</Schema>

 

Podemos ver la recomendación de la W3C acerca de namespaces aquí http://www.w3.org/TR/REC-xml-names

El elemento Schema puede tener elementos secundarios del tipo ElementType, AttributeType y description

 

Elemento datatype:

Se usa para especificar un tipo de dato para un tipo de elemento o atributo, para eso usa su atributo dt:type que puede contener alguno de los siguientes valores:

 

entity tipo ENTITY.
entities tipo ENTITIES.
enumeration tipo enumerado.
id tipo ID.
idref tipo IDREF.
idrefs tipo IDREFS.
nmtoken tipo NMTOKEN.
nmtokens tipo NMTOKENS.
notation tipo NOTATION.
string cadena de caracteres.
bin.base64 número de base 64.
bin.hex número hexadecimal.
boolean booleano 0 o 1.
char cadena de caracterer de longitud uno.
date fecha sin configuración regional.
dateTime fecha con hora opcional, sin configuración regional.
dateTime.tz fecha con hora opcional, con configuración regional.
fixed.14.4 número real de 14 posiciones enteras y 4 decimales.
float número real.
int número entero.
number número real.
time hora sin fecha, sin configuración regional.
time.tz hora sin fecha, con configuración regional.
i1entero de 1 byte.
i2 entero de 2 bytes.
i4 entero de 4 bytes.
r4 real de 4 bytes.
r8 real de 8 bytes.
ui1entero sin signo de 1 byte.
ui2 entero sin signo de 2 bytes.
ui4 entero sin signo de 4 bytes.
uri identificador uniforme de recursos.
uuid identificador global.

 

Ejemplo:

 

<datatype dt:type="float"/>

 

Este elemento tiene sentido si se produce en el contexto de un elemento ElementType o AttributeType, fuera de estos esta declaración no tiene razón de ser.

 

Elemento ElementType

Este elemento junto al elemento AttributeType forman la estructura de cualquier documento XML-Schema.ElementType puede contener elementos secundarios datatype, element, group, AttributeType, attribute y description.

Con datatype se define el tipo de dato del tipo de elemento, element identifica una instancia de un elemento secundario del elemento, con group pueden agruparse elementos.

AttributeType define un tipo de atributo, attribute identifica un atributo del tipo de elemento.

Todos los tipos de atributo que se definan en un ElementType son locales a ese elemento, es decir que pueden existir otros atributos con el mismo nombre en otro ámbito del mismo documento de esquema.

El elemento ElementType tiene los siguientes atributos:

 

name
model
content
order
dt:type

 

Veamos un ejemplo de una empresa de transporte:

<ElementType name="chofer" content=textOnly dt:type="string"/>

<ElementType name="reemplazo" content=textOnly dt:type="string"/>

<ElementType name="viaje" model="closed" content=eltOnly order="seq">

           <element type="chofer"/>

           <element type="reemplazo"/>

<ElementType/>

 

chofer y reemplazo se declaran primero con ElementType para luego identificarse en el modelo de contenido por medio del elemento element.

 

Atributos name y model:

name se usa para identificar al ElementType, model define si el esquema es abierto o cerrado, un modelo abierto permite definir elementos adicionales no declarados en el esquema, por defecto es abierto. Esta es una de las ventajas sobre las DTDs.

 

Atributo content:

Establece el tipo de contenido y este puede ser:

 

empty sin contenido.
textOnly sólo puede contener texto.
eltOnly sólo puede contener los elementos secundarios especificados.
mixed puede contener tanto texto como elementos secundarios especificados.

 

Atributo order:

Establece el orden y la frecuencia del grupo de elementos secundarios que hay declarados dentro del elemento. Sus valores pueden ser:

 

one una sóla serie de elementos.
seq una sóla serie de elementos en el orden especificado.
many los elementos pueden producirse cualquier cantidad de veces sin orden.

 

Atributo dt:type:

Son los tipos de datos especificados anteriormente.

 

Elemento element:

Se usa para declarar un elemento con un grupo o con un tipo de elemento. Incluye los siguientes atributos:

 

type define el tipo de elemento.
minOccurs mínima cantidad de veces que el elemento debe repetirse.
maxOccurs máxima cantidad de veces que el elemento debe repetirse.

 

minOccurs puede tomar cualquier valor entero, en cambio maxOccurs puede tomar valores 1 o *.

Siguiendo con el ejemplo anterior:

 

<ElementType name="chofer" content=textOnly dt:type="string"/>

<ElementType name="reemplazo" content=textOnly dt:type="string"/>

<ElementType name="viaje" model="closed" content=eltOnly order="seq">

           <element type="chofer" minOccurs="1" maxOccurs="1"/>

           <element type="reemplazo" minOccurs="0" maxOccurs="1"/>

<ElementType/>

 

Elemento group:

Se usa para agrupar elementos para trabajar con modelos de contenido complejos, es decir de más de un grupo de elementos. Cuenta con tres atributos:

 

order establece el orden en los elementos secundarios
minOccurs mínima cantidad de veces que se produce el grupo.
maxOccurs máxima cantidad de veces que se produce el grupo.

 

El atributo order puede tener tres valores:

 

one sólo permite una ocurrencia de elementos en el grupo.
seq los elementos deben producirse en la secuencia especificada.
many los los elementos pueden producirse cualquier número de veces y encualquier orden.

 

Elemento AttributeType:

Sirve para definir tipos de atributos para ser usados en elementos. Para declarar un atributo como parte de un elemento hay que utilizar el elemento attribute que hace referencia a un elemento AttributeType.

Los elementos AttributeType pueden definirse en la parte superior del documento de esquema o en tipos de elemento individuales, así se tienen atributos globales o locales respectivamente para un ámbito determinado.

AttributeType tiene los siguientes atributos:

 

namedefine el nombre del tipode atributo.
dt:type para declarar el tipo de dato del tipo de atributo.
dt:values se usa cuando dt:type está fijado en el valor enumeration y define la lista de valores posibles.
default valor predeterminado.
required indica el carácter de obligatorio del atributo.

 

Los valores que puede tomar dt:type son sólo los tipos de datos primitivos XML 1.0 que es un conjunto reducido de los tipos de dato XML-Schema. Los tipos de dato primitivo son:

 

entity tipoENTITY.
entities tipoENTITIES.
enumeration tipo enumerado.
id tipo ID.
idref tipo IDREF.
idrefs tipo IDREFS.
nmtoken tipo NMTOKEN.
nmtokens tipo NMTOKENS.
notation tipo NOTATION.
string cadena de caracteres.

 

Aunque Internet Explorer 5.0 soporta atributos de XML-Schema no soporta todos los tipos de atributo, solamente soporta los tipos de atributo estándar, llamados tipos primitivos en XML-Schema.

Veamos un ejemplo de dt:types combinado con dt:values y default:

 

<AttributeType name="pais" dt:type="enumeration" dt:values="Argentina Brasil Uruguay" default="Argentina"/>

 

Elemento attribute

Se usa para declarar una instancia de atributo en un tipo de elemento, para esto tiene tres atributos:

 

type
default
required

 

Veamos nuestro ejemplo algo más completo:

 

<ElementType name="chofer" content=textOnly dt:type="string"/>

<ElementType name="reemplazo" content=textOnly dt:type="string"/>

<ElementType name="terminal" content=textOnly dt:type="string"/>

<ElementType name="darsena" content=textOnly dt:type="string"/>

<ElementType name="micro" content=textOnly dt:type="string"/>

<ElementType name="fecha" content=textOnly dt:type="date"/>

<ElementType name="hora" content=textOnly dt:type="time"/>

<AttributeType name="origen" dt:type="enumeration" dt:values="BAires Rosario BBlanca"/>

<AttributeType name="destino" dt:type="enumeration" dt:values="BAires Rosario BBlanca"/>

<AttributeType name="distancia" dt:type="float"/>

<ElementType name="viaje" content=eltOnly order="seq">

           <element type="chofer" minOccurs="1" maxOccurs="1"/>

           <element type="reemplazo" minOccurs="0" maxOccurs="1"/>

           <element type="terminal" minOccurs="1" maxOccurs="1"/>

           <element type="darsena" minOccurs="1" maxOccurs="1"/>

           <element type="micro" minOccurs="1" maxOccurs="1"/>

           <element type="fecha" minOccurs="1" maxOccurs="1"/>

           <element type="hora" minOccurs="1" maxOccurs="1"/>

           <attribute type="origen" default="BAires"/>

           <attribute type="destino" default="BBlanca"/>

           <attribute type="distancia"/>

<ElementType/>

 

Primero se declaran todos los elementos a agrupar con ElementType, luego los atributos origen, destino y distancia con AttributeType, después se asocian a un tipo de elemento con los elementos element y attribute en el elemento ElementType.

No hay orden determinado en los atributos, pero no puede haber más de un atributo con el mismo nombre.

 

Elemento description:

Este elemento sirve para ubicar una descripción de texto en un esquema:

 

<ElementType name="viajes" content="eltOnly">

           <description>

                       Este es un registro de viaje

           </description>

           <element type="viaje" minOccurs="1" maxOccurs="*"/>

</ElementType>

 

Existe una herramienta Microsoft de nombre Validator que sirve para validar documentos XML ante un esquema, puede bajarse de http://msdn.microsoft.com/downloads/samples/internet/xml/xml_validator esta es una herramienta que se implementa sobre un documento HTML, Microsoft ofrece otra herramienta de línea de comandos para validar frente a DTDs o esquemas y se puede bajar de http://msdn.microsoft.com/downloads

Existe también una herramienta llamada Authotity que no es de dominio público que entre otras cosas permite construir esquemas y traducir DTDs en XML-Schemas automáticamente, está disponible para Windows 98, NT y Unix, se puede adquirir en Extensibility en http://www.extensibility.com también tienen una versión de evaluación.

 

Modelos de contenido abierto:

En XML-Schema los modelos de contenido, por defecto, son abiertos. Las DTD son modelos de contenido cerrados, entonces esta característica XML-Schema presenta una ventaja sobre las DTDs ya que las hace extensibles, esto proporciona flexibilidad permitiendo ampliar el vocabulario y sin perder la posibilidad de generar documentos válidos.

Puede darse el caso que al desarrollar una aplicación XML encuentre un esquema que resuelva en gran medida el tema, sólo habría que adicionar algunos pocos elementos y atributos.

Ejemplo:

 

<Schema name="MiSchema" xmlns=" urn:schemas-microsoft-com:xml-data"

           xmlns:otro="urn:otro.xml"

           <!-El contenido del esquema va aquí->

</Schema>

 

Aquí vemos que a la declaración de espacio de nombre se le agrega otra definición de espacio de nombres llamada otro, que aporta su namespace particular. Entonces tenemos al esquema otro asociado al espacio de nombres otro, esto permite utilizar un elemento del espacio de nombres otro que no está definido en el espacio de nombre MiSchema, para hacerlos sólo hay que anteponer otro: al elemento a instanciar.

 

El futuro de XML-Schema:

Internet Explorer 5.0 es el navegador que más soporta XML-Schema, todavía no alcanza a cubrir la especificación del borrador de trabajo de la W3C. Están faltando mecanismos que soporten herencia, tipo de datos restringidos ni representaciones léxicas (como las distintas máscaras de un número telefónico)

 

Espacios de Nombres XML:

La idea con los espacios de nombres es aislar los nombres de las construcciones de programación que se definen en un determinado objeto a partir de construcciones que se definen en otros objetos, definiendo así, un conjunto cerrado. Esta definición es válida en un ambiente XML, pero también lo es para Java, C++ u Oracle.

Esto viene a resolver el delicado problema de los conflictos de nombres. XML Namespaces pasó a ser recomendación de la W3C en enero de 1999 y si quieren saber todo acerca de esta tecnología vayan a http://www.w3.org/TR/REC-xml-names

La técnica usada para resolver la unicidad de nombres implica el uso de URIs, Uniform Resource Identifiers, Identificadores únicos de Recursos, estos URI se refieren a recursos físicos de Internet por lo que deben ser únicos. Entonces un namespace es el nombre de un URI, por ejemplo:

 

<documento xmlns:documento="http://www.3pilares.com/notas/XML">

 

Se pueden usar también URNs, Universal Resource Name o Nombre Uniforme de Recurso.

Creo que es conveniente hacer una aclaración entre URI, URL yURN.

Las URIs contienen, como conjunto, a las URLs y a las URNs. Las URLs describen la ubicación física de un recurso. Las URNs describen un nombre único independiente de la ubicación física. La distinción es fácil, las URLs están prefijadas con un protocolo Internet (http, ftp, etc.) y las URNs están prefijadas por urn.

La sintaxis general de la declaración de espacios de nombres es la siguiente:

 

xmlns:Prefijo="NombreDeEspacio"

 

Así podemos decir que un nombre cualificado es un nombre que incluye la porción Prefijo de la declaración del namespace. Un nombre no cualificado es: titulo, un nombre cualificado es pelicula:titulo

Tenemos dos formas de declarar espacios de nombres:

 

Declaración predeterminada: se declara el espacio de nombres sin prefijo, todos los elementos y atributos se referencian con nombres no cualificados y se supone que estos se encuentran declarados en el namespace.
Declaración explícita: se declara con prefijo y todos los elementos y atributos de ese namespace deberán incluir el prefijo como parte de sus nombres cualificados. Estas son útiles cuando se necesita trabajar con múltiples espacios de nombres.

 

En caso que no se quiera declarar espacio de nombres se puede especificar el mismo como una cadena vacía, xmlns=""

Podemos ver el ejemplo Libros.xml estructurado por LibrosSchema.xml

Hasta aquí estuvimos viendo temas relacionados con la sintaxis XML y con su estructura interna de forma tal que sabemos como armar documentos XML bien formados y válidos.

Conocemos como estructurar datos con  XML y sabemos estructurarlos mediante dos tecnologías, DTDs y XML-Schema. El siguiente paso es ver como se puede dar formato a un documento XML o dar estilo de formato, en otras palabras: hojas de estilo. Existen dos tecnologías para dar estilo a documentos XML con hojas de estilos:

 

CSS, Cascading Style Sheet, Hojas de Estilo en Cascada.
XSL, eXtensible Style Language, Lenguaje de Estilo Extensible.

 

Estas dos tecnologías pueden utilizarse conjuntamente, no son excluyentes.

Una hoja de estilo define un conjunto de reglas de diseño que le indican a un navegador cómo mostrar las distintas partes de un documento HTML. El problema aquí es que cada navegador es el que decide como se debe ver un documento. Por ejemplo un navegador A muestra todos sus párrafos marcados con el tag <p> con fuente Times New Roman de 12 puntos, pero un navegador B usa una fuente Arial de 10 puntos. Debido a esto y otras causas se ha vuelto al principio SGML de separar el contenido de la presentación. Las tecnologías de hojas de estilos hicieron posible la readaptación de HTML.

 

Herramientas:

Desarrollo de esquemas:

XML Authority, ofrece una buena solución para aplicar XML-Schema, disponible para Windows 98, NT, 2000 y Unix, http://www.extensibility.com
Near and Far Designer, sólo modela esquemas XML/ DTD, no tiene una buena GUI, no soporta drag&drop, disponible para Windows 98, NT y 2000, http://www.microstar.com/near.html

 

Referencias:

http://www.w3.org/1999/05/06-xmlschema-1

 

Anterior      Menú Principal      Siguiente

 

 

Carlos Marcelo Santos.

Valid XHTML 1.0!