TEMA 1.
DEFINICIÓN, DEFINICIÓN, PROPÓ PROPÓSITO SITO DEL DEL ESTÁNDAR DE XML_________ 1
TEMA 2.
HERRAMIE HERRAMIENTAS NTAS XML ___________________ _____________________________ _____________ ___ 7
TEMA 3.
EL DOCUM DOCUMENT ENTO O XML XML ___________________ _____________________________ ____________ __ 15
DOCUMENT TYPE TYPE DEFINI DEFINITIO TION N TEMA 4. DOCUMENT
___________________ ________________________ _____ 25
TEMA 5 .
XML SCHEMAS______________ SCHEMAS________________________ ___________________ _____________ ____ 35
TEMA 6.
PRESEN PRESENTACIÓN TACIÓN DE DOCUM DOCUMENTOS ENTOS XML ________________ _______________ _ 45
HIPERENLACES LACES EN XML ___________________ _____________________________ __________ TEMA 7. HIPEREN TEMA 8.
57
DOCU DOCUMEN MENTT OBJECT OBJECT MODEL MODEL ____________________ _________________________ _____ 65
A. GLOSARIO_____ GLOSARIO_______________ ____________________ ____________________ ___________________ _____________ ____ 79 B. BIBLIOGRAFÍA BIBLIOGRAFÍA ___________________ _____________________________ ____________________ _______________ _____ 81
Tema 1
DEFINICIÓN, PROPÓSITO DEL ESTANDAR DE XML
1.1. DEFINI DEFINICIÓN CIÓN ____________________________________________ __________________________________________________ ______ 3 1.2. 1.2. ORIGEN ORIGEN _______________________________________________ _____________________________________________________ ______ 3 1.3. 1.3. ÁMBITO DE APLICACIÓN _______________________________________ _______________________________________ 3 1.4. VENTAJAS VENTAJAS Y DESVENTAJAS DESVENTAJAS ____________________________________ ____________________________________ 3
-1-
1.1. DEFINICIÓN El eXtensible Markup Language es lo que se denomina un metalenguaje. Una sintaxis que nos permite definir lenguajes de marcas para usos concretos. Permite por tanto, que el usuario pueda crear sus propias etiquetas y que éste les dé un significado que necesite, siempre y cuando tengan un significado coherente y sigan las reglas adecuadas, a diferencia de HTML que sólo permite utilizar las etiquetas limitadas de las que dispone.
1.2. ORIGEN XML proviene de SGML, un estándar ISO con mayor potencia, pero también más difícil y no orientado a Internet. XML hereda todas las ventajas de SGML, pero simplificándolo y orientándolo a Internet. Debemos tener claro que XML no es HTML mejorado, aunque ambos procedan del mismo lenguaje (SGML), pues persiguen objetivos muy diferenciados. XML describe datos, información; HTML la presenta.
1.3. ÁMBITO DE APLICACIÓN Ya que el propósito de XML es el de dar una estructura concreta a la información de manera que ésta se pueda intercambiar sin límites o barreras, su utilización tiene como destino cualquier lugar donde se den numerosas situaciones de intercambio de información. La principal función de Internet es intercambiar todo tipo de información, es aquí por tanto donde se centra principalmente el uso de XML. Sin embargo, podemos encontrar su uso en telefonía móvil (WAP-WML), proyectos para compiladores, etc.
1.4. VENTAJAS Y DESVENTAJAS DE XML. El éxito de XML se debe principalmente a sus numerosas ventajas, de las que se enumeran las principales:
-
Simple. XML implica un bajo grado de dificultad, con lo que se elimina el límite principal de su predecesor, SGML.
-
Orientado a Internet. Como se dijo anteriormente, es el lugar donde mayor intercambio de información se da.
-3-
- Autodescripción de los datos. La capacidad de crear nuestro propio lenguaje de marcas y su capacidad para describir los datos de una información, hace que sea muy fácil reconocer y comprender la información contenida en un documento XML.
-
Portabilidad. Elimina cualquier límite impuesto por sistemas operativos, plataformas, etc.
-
Extensible. Podemos crear nuestras propias marcas o etiquetas.
-
Separa la información de su presentación.
Sin embargo y a pesar de estas ventajas, también tiene también alguna desventaja. La principal aparece en casos concretos como el tratamiento de documentos multimedia, como vídeos, sonido, etc. Pongamos por caso un fichero de vídeo que ha de transmitirse a través de Internet, en formato XML, para evitar incompatibilidades entre aplicaciones diferentes, que utilizan ese fichero. El vídeo en cuestión debería codificarse en XML, dando lugar a un documento bastante extenso, pues éste estaría formado por entero de texto plano. El documento XML al ser tan extenso y transmitirse éste por Internet, ocuparía mucho tiempo y ancho de banda en su transmisión.
SGML -Potente. -Independiente. -Flexible. -Abstrae información. -Difícil y poco orientado a Internet.
XML - Simple. - Independiente. - Flexible. - Abstrae información. - Autodescriptivo. - Orientado a Internet. - Orientado a objetos. - Comunicación entre máquinas.
HTML - Extremadamente simple. - Totalmente orientado a Internet. - Muy rígido. - Mezcla información con presentación. - Comunicación entre personas.
Figura 1. Esquema que muestra las características principales entre SGML, XML y HTML, sus diferencias y la interdependencia entre cada uno.
-4-
RECUERDE
-
XML no es una versión mejorada de HTML, sino que se trata de un subconjunto de SGML que permite a los usuarios poder crear su propio lenguaje de marcas.
-
Su utilización no solo se centra en intercambiar información a través de Internet, sino que puede emplearse en otras áreas como la telefonía móvil.
-
Es totalmente independiente del software, sistemas operativos, plataformas, etc.
-5-
Tema 2
HERRAMIENTAS XML
2.1. INTRODUCCIÓN _______________________________________________ 9 2.2. NAVEGADORES _______________________________________________ 9 2.3. PARSERS ____________________________________________________ 9 2.4. EDITORES __________________________________________________ 10 2.5. PROCESADORES_____________________________________________ 11
2.1. INTRODUCCIÓN Trabajar con XML implica el uso de diversas herramientas que ayudan en el proceso de trabajo o bien hacen posible realizar ciertas acciones propias del tratamiento de documentos XML. Al ser estos documentos de texto plano, un simple editor de textos para crear los documentos, junto con un procesador (parser) que los analice, pasan por ser las herramientas básicas. El conocido Bloc de Notas de Windows y el parser MSXML de Microsoft suministrado junto al navegador Internet Explorer desde la versión 5.0, nos permitiría comenzar a trabajar con XML sin coste económico alguno. Sin embargo, para lograr un rendimiento óptimo al utilizar XML, se hace necesario el uso de diferentes herramientas que pueden ser gratuitas o comerciales. A continuación se clasifican las diferentes herramientas más conocidas.
2.2. NAVEGADORES Puesto XML tiene como objetivo principal Internet y su trabajo en la Web, los navegadores de páginas web, aparecen como herramientas imprescindibles si queremos ver la presentación de un documento XML en su formato web. Actualmente, XML se ha extendido bastante y continúa haciéndolo, por lo que prácticamente cualquier navegador conocido hoy día, es capaz de presentar información en formato XML. El más extendido de todos ellos es el Microsoft Internet Explorer, que ha pesar de haber creado sus propias particularidades en cuanto a XML, cada día se acerca más al estándar propuesto por el W3C. Otros posibilidades pasan por Netscape Navigator, Mozilla y Ópera. Cada navegador tiene sus propias particularidades, a pesar de su acercamiento continuo al estándar, y a veces nos podemos encontrar con alguna que otra sorpresa al presentar los datos, existiendo la posibilidad, de que entre un navegador de un tipo u otro, halla alguna diferencia en la presentación. La mejor posibilidad es utilizar los dos más empleados: Internet Explorer o Netscape Navigator, sugiriendo el primero principalmente pues es el más empleado.
2.3. PARSERS Para trabajar con XML, se hace imprescindible algún software que permita el análisis de cualquier documento creado con este formato, para así verificar que sigue las reglas establecidas por XML, que la construcción del documento es correcta, etc. De esta forma, aseguramos que el documento analizado es correcto para su utilización. Este software es lo que se llama un parser.
-9-
Existen muchos, algunos orientados a la utilización de un lenguaje concreto de programación, aunque es de gran utilización el incluido con el navegador de Microsoft, como anteriormente se comentaba. La selección del parser más adecuado para nuestro trabajo, pasa por tener en cuenta dos factores. El primero es la velocidad de proceso a la que actúa. A medida que aumenta el tamaño y complejidad de los documentos XML que se procesen, la velocidad se convierte en una pieza clave para el buen rendimiento de nuestra aplicación. El segundo factor a tener en cuenta es la conformidad del parser con respecto al estándar del W3C. La elección dependerá por tanto, de las necesidades reales de cada desarrollador, aunque un equilibrio entre las dos, sería normalmente lo más adecuado. A lo hora de elegir, sería recomendable también, que el parser fuera capaz de analizar cualquier documento XML con respecto a un DTD o un XSchema (que se verá más adelante), dada la importancia de éstos en la actualidad. En la siguiente lista, aparecen los más conocidos: o
Microsoft MSXML. Cumple con los estándares establecidos por el W3C y es el más extendido en la actualidad. Se instala junto al navegador Internet Explorer o bien se puede bajar la última versión que viene integrada junto al MSMXL SDK, desde la página de Microsoft.
o
Xerces. Forma parte del Apache XML Project. Se encuentra disponible para Java, C++, Perl y COM, con lo que es compatible con parser MSXML de Microsoft. Cumple con los estándares establecidos actualmente, pudiendo trabajar con DTD y XSchema. Es muy utilizado en entornos de desarrollo Java.
o
Crimson. Alternativa al Xerces, y de características similares, aunque se encuentra totalmente orientado para el desarrollo con Java. Es una donación de Sun al Apache XML Project.
o
XP. Está orientado totalmente para trabajar con proyectos Java. Ofrece una alta velocidad de proceso y cumple con los estándares establecidos, pero no es validante: no puede trabajar con DTD o XSchema.
o
Oracle XDK. Totalmente orientado al desarrollo con Oracle que ofrece diversos componentes para su utilización con Java, C y C++. Cumple con los estándares, pero su principal pega es que es comercial.
2.4. EDITORES La composición de los diferentes documentos XML se puede realizar con cualquier editor de textos normal. Esto sin embargo, conlleva el crear manualmente todos y cada uno de los detalles que formen el
- 10 -
documento. Por tal razón, un editor XML es lo más conveniente, pues nos permitirá olvidarnos en cierta medida, de detalles. Suelen utilizar algún parser, para advertir de los posibles errores que pudiera haber en el documento, colorear el código para facilitar su lectura, etc. Algunos trabajan ofreciendo un esquema gráfico en árbol, de la estructura jerárquica del documento, que obviamente favorece su comprensión, pero no permiten la edición directa del texto. Los ideales son aquellos que ofrecen todo lo comentado y que son mixtos, ofreciendo edición mediante el mencionado esquema en árbol y acceso directo a texto y además permitan validar los documentos creados contra DTD o XSchema. Aún así, un editor de textos normal, es el indicado para que comience su formación en XML, pues obligará a trabajar manualmente todos los aspectos, y posteriormente, una vez familiarizado con la sintaxis de XML, utilizar los específicos. Veamos una lista de ellos: o
Microsoft XML Notepad. Apoyado lógicamente en el parser MSXML, se trata de un editor muy básico. Ofrece una edición gráfica en forma de árbol de los documentos, pero no permite mucho más.
o
EditML. Un completísimo editor de documentos XML que ofrece edición mixta, generación automática de documentos y otras muchas utilidades.
o
Emacs. Conocido editor de textos, sobre todo en entornos Unix/Linux, del que existen multitud de añadidos para trabajar con XML en prácticamente todas sus facetas.
o
Visual XML. Desarrollado íntegramente en Java, es un sencillo programa que ofrece edición mixta de los documentos y que también permite trabajar con DTD.
o
XML Spy. Más que un editor, es posiblemente el mejor entorno de desarrollo, ya que incluye prácticamente todo lo necesario para trabajar con XML. Es comercial.
2..5. PROCESADORES Los procesadores de XML son aquellas herramientas que tratan los documentos XML para su transformación, normalmente a través de XSL. Veamos: o
Xalan. También forma parte del Apache XML Project. Trabaja con el estándar de XSL. Se ofrece para Java y C++. - 11 -
o
XT. De los mismos autores que el parser XP. Trabaja con el estándar de XSL con un alto rendimiento.
o
Saxon. Incluye un conjunto de herramientas de proceso, entre ellas, XSL, XQuery, etc.
Dada la amplia difusión de XML y las excelentes expectativas de futuro, se encuentran también otras herramientas, que son entornos completos de desarrollo que engloban prácticamente todas las herramientas vistas. Incluido dentro de los editores, se menciona a XML Spy, que como su explicación indica, es la mejor herramienta de desarrollo para XML que existe actualmente.
- 12 -
RECUERDE
-
Para comenzar a trabajar con XML, sólo es necesario un editor de texto y un parser.
-
Los editores XML ofrecen gran ayuda al crear este tipo de documentos, indicándonos los errores cometidos, por ejemplo.
-
Actualmente el parser MSXML de Microsoft es el más utilizado, por tanto, el más recomendable de usar.
- 13 -
Tema 3
EL DOCUMENTO XML
3.1. OBJETOS DE UN DOCUMENTO XML _____________________________ 17 3.1.1. Instrucci ones de proceso __________________________________ 17 3.1.2. Elementos______________________________________________ 17 3.1.3. Atributos _______________________________________________ 18 3.1.4. Secciones cdata _________________________________________ 18 3.1.5. Comentarios ____________________________________________ 19 3.1.6. Datos __________________________________________________ 19 3.2. ESTRUCTURA _______________________________________________ 20 3.2.1. Cabecera o prólogo ______________________________________ 20 3.2.2. Cuerpo ________________________________________________ 20 3.3. TIPOS DE DOCUMENTOS XML _______________________________ 21 3.3.1. Bien formados (well-form ed) _______________________________ 21 3.3.2. Válidos ________________________________________________ 22
- 15 -
3.1. OBJETOS DE UN DOCUMENTO XML Para poder crear la estructura propia de los documentos XML es necesario el uso de una serie de objetos que le son propios. La mayoría de estos objetos se basan en las etiquetas o marcas que dan nombre al lenguaje. Una etiqueta queda definida por el conjunto de caracteres comprendido entre los paréntesis angulares (símbolos menor y mayor que)...
< identificador > .... donde identificador, es el nombre que posteriormente identificará a un objeto concreto, por ejemplo, las instrucciones de proceso o los elementos.
3.1.1. Instrucciones de proceso Las instrucciones de proceso son aquellos objetos existentes en los documentos XML cuya función es indicar ciertos aspectos o características sobre el documento. Una de estas instrucciones, común a todos los documentos XML, es la declaración de documento XML. La sintaxis propia de una instrucción de proceso, es la siguiente, ... identificador nombre1 = "valor1" nombre2 = "valor2" nombreN = "valorN" ?>
...donde identificador es el nombre de la instrucción de proceso; nombre1, nombre2, etc., son los parámetros o argumentos diferentes que pueda admitir cada instrucción.
3.1.2. Elementos Se trata de los objetos esenciales en un documento XML, la unidad básica de datos que forma la estructura de la información contenida en el documento. Un elemento queda definido por una etiqueta de apertura y otra de cierre, tal como muestra el ejemplo:
información del elemento
Existen elementos especiales que no contienen ningún tipo de información englobada dentro del elemento (la información que representan se entiende por la sola presencia del elemento), llamados
- 17 -
elementos vacíos. En este caso, la utilización de la etiqueta de apertura y cierre viene abreviada por el uso de una sola etiqueta que actúa como apertura y cierre:
3.1.3. Atributos A veces la información a que hace referencia un elemento, contiene una serie de propiedades que indican ciertas características sobre esa información y que podrían dar lugar a la creación de más elementos, lo que puede dar lugar a documentos XML con una cantidad excesiva de elementos en su estructura, que harán ilegibles los mismos. Para evitar esto, el W3C provee de un objeto que es totalmente dependiente de los elementos: los atributos.
Los atributos aparecen siempre dentro de la etiqueta de apertura de un elemento al que pertenecen. Su sintaxis:
El número de atributos de un elemento, no está limitado a uno, sino a los que sean necesarios, aunque siempre tendremos en cuenta, evitar un uso excesivo de éstos por elemento.
3.1.4. Secciones CDATA Las secciones CDATA nos permiten introducir información dentro del documento XML que aparecerá como tal, no será analizada por el parser. XML se reserva una serie de caracteres debido al uso que hace de éstos, que no deben aparecer directamente como información o contenido de un elemento, ya que ocasionarían errores en el documento XML, al ser analizado por el parser. La siguiente tabla muestra esos caracteres especiales:
Carácter
Entidad predefinida
& < > " '
& < > " '
- 18 -
La solución a este problema, viene dada por la columna derecha de la anterior tabla. En cada lugar dentro del contenido de un elemento donde aparezcan alguno de estos caracteres especiales, se insertará la secuencia de caracteres correspondiente, especificada como entidad predefinida. Sin embargo, si nos encontramos que en esa información aparecen demasiados caracteres especiales, la tarea de sustituirlos por sus correspondientes entidades predefinidas se volverá totalmente improductiva. Es aquí donde aparecen las secciones CDATA, ya que pueden contener cualquier texto (excepto la secuencia de caracteres: ]]>, que indica el final de una sección) ya que no será analizado por el parser.
Una sección CDATA queda construida siguiendo la siguiente sintaxis:
]]>
3.1.5. Comentarios Al igual que en otros lenguajes, los comentarios son bloques de texto que nunca serán analizados y/o procesados, quedando simplemente ignorados, y cuya única utilidad es crear notas dentro de un documento XML para realizar aclaraciones, documentación, etc.
Se utiliza exactamente el mismo sistema que en HTML. Como se indica, cualquier carácter dentro del bloque de comentario será ignorado, sin embargo, hemos de evitar el uso de la secuencia de caracteres que indica el fin del bloque:
3.1.6. Datos Como datos para un documento XML, será toda aquella información de texto, comprendida como contenido dentro de un elemento (entre sus etiquetas de apertura y de cierre), que figure como valor de algún atributo o bien forme parte de una sección CDATA. Es necesario tener claro esto, pues como contenido de un elemento, podemos encontrarnos con otros elementos. Esto cobra especial importancia al crear un DTD o un XSchema, donde se ha de tener claro los diferentes contenidos que puede tener un elemento.
- 19 -
3.2. ESTRUCTURA Todos los documentos XML tienen en común una estructura general, que nada tiene que ver con la que guarden entre ellos los diferentes objetos que compongan cada documento. Esta estructura en común se divide en dos partes bien diferenciadas.
3.2.1. Cabecera o prólogo La cabecera o prólogo de un documento XML es la sección que aparece en primer lugar. En ella tiene siempre lugar la declaración de XML, que es una instrucción de proceso que figurará en primer lugar en cada documento y que indica que el fichero de texto en el que figura es precisamente un documento XML, además de otras propiedades que se ven a continuación:
El atributo version, únicamente puede contener como valor actualmente, "1.0", ya que éste, indica la versión del estándar XML actual. Los otros atributos, opcionales, indican el código de caracteres internacionales que usa el documento y si éste, está enlazado ("no") o no ("yes") con algún DTD, respectivamente.
El prólogo de un documento XML puede contener también la declaración de un DTD, como se verá en otro tema, o también otras instrucciones que permitirán enlazar con XSchemas o con hojas de estilo XSL, etc.
3.2.2. Cuerpo El cuerpo del documento XML es la sección inmediata al prólogo o cabecera y que se identifica fácilmente porque es aquí donde se encuentra la etiqueta de apertura del llamado elemento raíz. Este elemento especial, está siempre presente en un documento XML y solo puede existir uno por documento. Cualquier contenido, datos u otros elementos, quedarán encerrados entre la etiqueta de apertura del elemento raíz y su correspondiente etiqueta de cierre:
- 20 -
Datos o contenido del subelemento1 Datos de subelemento1A Datos de subelemento2
3.3.TIPOS DE DOCUMENTOS XML Según una serie de condiciones que cumplan los documentos XML, estos pueden considerarse de diferentes formas.
3.3.1. Bien formados (well-form ed) Son considerados como documentos bien formados, todos aquellos que cumplen la llamada regla
document , que establece en realidad una serie de condiciones para que un documento XML pueda ser considerado como tal. Esas condiciones, son las que se detallan a continuación:
o
Todo elemento existente en un documento XML estará formado por una etiqueta de apertura y otra de cierre. Aquellos elementos llamados vacíos que solo tienen una etiqueta, dispondrán una barra (/) al final de la etiqueta, antes del símbolo mayor que >, para cerrarla.
o
Todos los valores de los atributos deben estar encerrados entre comillas dobles (" ).
o
Si hay una estructura jerárquica de elementos, la anidación de unos en otros debe ser totalmente correcta, sin solaparse unos a otros.
o
No se puede incluir como contenido analizable por un parser, los caracteres especiales indicados en este mismo tema.
- 21 -
o
Los nombres de los elementos solo pueden comenzar por letras o el carácter de subrayado y solo pueden contener letras, números, guiones, subrayados, dos puntos o puntos. Ningún nombre puede comenzar con "xml ", que se reserva para futuras revisiones del estándar.
3.2.2. Válidos Un documento XML válido es aquel documento bien formado que se encuentra enlazado a un DTD o a un XSchema y que sigue correctamente las definiciones y estructura establecidos en los mismos. En los temas referentes a DTD y a XSchema, aparecerán ejemplos de documentos XML válidos.
- 22 -
RECUERDE
-
Todo documento XML está formado por una cabecera o prólogo y un cuerpo.
-
Solo puede existir un elemento raíz por documento, que englobará a todos los demás.
-
Un documento bien formado cumple una serie de condiciones contenidas en la regla "document".
- 23 -
Tema 4
DOCUMENT TYPE DEFINITION
4.1. DEFINICIÓN _________________________________________________ 27 4.2. UTILIZACIÓN ________________________________________________ 27 4.3. ELEMENTOS ________________________________________________ 28 4.3.1. Conectores de grup o _____________________________________ 29 4.3.2. Indicadores de aparición __________________________________ 29 4.4. ATRIBUTOS _________________________________________________ 30 4.5. ENTIDADES _________________________________________________ 31 4.6. EJEMPLO COMPLETO_________________________________________ 31
- 25 -
4.1. DEFINICIÓN El Document Type Definition o DTD es una secuencia de instrucciones de declaración, que crean una estructura y unas propiedades concretas para un documento XML. Sería por tanto aquí, donde creamos nuestras propias etiquetas. HTML es una DTD creada a partir de SGML, de hecho, los DTD no son realmente propios de XML sino que se heredan de SGML. Como se verá más adelante en los ejemplos, no siguen las reglas sintácticas de XML. Según la DTD resida en un fichero XML o en otro distinto que sea necesario enlazar, nos encontramos con que un DTD puede ser externo o interno.
4.2. UTILIZACIÓN La instrucción que nos permite enlazar un DTD externo con un documento XML concreto, figurará en el prólogo de éste, siguiendo la siguiente sintaxis:
...
El documento agenda.dtd contiene la definición de los elementos, etc. La extensión .dtd no es obligatoria, pero se suele poner por convenio. En el caso de encontrarnos con un DTD definido dentro del propio documento XML la sintaxis, sería un tanto diferente:
...
- 27 -
4.3. ELEMENTOS Para declarar un elemento se utiliza la siguiente sintaxis:
En modelo_contenido indicamos precisamente el tipo de contenido que contendrá el elemento que se está declarando. La siguiente tabla muestra las distintas posibilidades:
TIPO CONTENIDO
DESCRIPCIÓN Se trata de un elemento vacío:
EMPTY
... da lugar a... Es un tipo de contenido muy ambigüo, ya que no se especifica realmente el tipo. Solo
ANY
suele utilizarse si no se tiene claro el contenido que tendrá un elemento (por ejemplo, para futuros usos): Este tipo no tiene una palabra clave reservada para definirlo, y comprende aquellos elementos que como contenido, tienen datos y otros elementos. La declaración del elemento, indica de forma implícita el contenido: ... da lugar a...
Mixto
Datos del elemento Datos del elemento Se trata de elementos que como contenido, únic amente tienen otros elementos:
Otros elementos
... da lugar a... Texto
#PCDATA
Indica que el contenido de un elemento es son datos, texto, pero no se indica el tipo de dato (si es un entero, una fecha, etc.).
- 28 -
4.3.1. Conectores de grupo Los conectores de grupo, son caracteres que se emplean cuando el modelo o tipo de contenido de un elemento es mixto o bien solo contiene otros elementos, para indicar la secuencia a seguir:
CONECTOR
DESCRIPCIÓN Los paréntesis indican una secuencia: ... da lugar a...
( ... )
Texto del elemento. Cualquiera. Solo permite utilizar un elemento de entre los ofrecidos en la secuencia:
|
... da lugar a...
,
Indica el orden a seguir por los elementos de una sec uencia. Véase la descripción del conector paréntesis ().
4.3.2. Indicadores de aparición Para indicar cuántas veces puede aparecer un elemento o secuencia de elementos se emplean unos caracteres llamados indicadores de aparición:
INDICADORES
DESCRIPCIÓN
?
El elemento o secuencia de elementos aparecerá cero, o una sola vez.
+
El elemento o secuencia de elementos aparecerá una o más veces.
*
El elemento o secuencia de elementos aparecerá cero, una, o más veces.
- 29 -
4.4. ATRIBUTOS La declaración de los atributos perteneciente a un elemento, se realiza creando una lista de atributos, aunque en la lista, tan solo figure la declaración de uno de ellos:
Ejemplos:
Los tipos de atributos que se pueden utilizar son:
TIPO CDATA
DESCRIPCIÓN Cualquier carácter: Este tipo acepta el nombre de una entidad general como valor:
ENTITY
... puede dar lugar a ...
ENTITIES
Lista de entidades. No es un tipo como tal, sino que se asignan al atributo una serie de valores entre los que habrá
Enumeración
que elegir:
ID IDREF IDREFS NMTOKEN NMTOKENS
Valor único en todo el documento XML, con las mismas restricciones que un NMTOKEN: Similar a ID. De hecho, será un valor que hará referencia a un atributo de tipo ID existente: Lista de IDREF. Cadena de texto con las mismas restricciones que tiene un nombre de elemento: Lista de NMTOKENS:
- 30 -
Podemos indicar asímismo si el valor de un atributo es requerido, etc., mediante unas palabras clave que se indicaran antes que el valor por defecto:
#IMPLIED: El valor del atributo es opcional. #REQUIRED: Requerido siempre. Forzamos a que se deba introducir un valor para este atributo. #FIXED: Indica un valor fijo que no se podrá cambiar. Ese valor lo indicaremos inmediatamente detrás, como valor por defecto.
4.5. ENTIDADES Las entidades se usan a modo de macros, pues en el lugar donde aparezca una, al analizarse el documento, esa entidad será sustituida por el valor al que equivale. Dependiendo de ese valor al que sustituye y alguna que otra particularidad, podemos encontrarnos con: - Entidades generales: una simple sustitución de texto.
que dará lugar a la entidad &abc; - Entidades externas: se encuentran definidas en un documento externo.
que será ∏ - Entidades paramétricas: una simple sustitución de texto, en un DTD.
que será &datos;
4.6. EJEMPLO COMPLETO El siguiente código, representa el contenido de un ficticio documento XML, donde existe un DTD. El código XML, responde en su totalidad a la DTD, es por tanto, un documento bien formado y válido.
Documento gestion.xml
- 31 -
]> HIERROS S.A. Calle Nombre Numero <30; fundición modelo1 500 20 MADERAS S.A. Calle Nombre Numero <90; panel modelo1 50 20 panel modelo2 100 10 - 32 -
RECUERDE
-
El DTD nos permitirá crear nuestro propio lenguaje de marcas.
-
Podremos crear cualquier objeto que pueda aparecer en un documento XML.
-
Un documento XML que cumple a la perfección lo expuesto en un DTD es un documento válido.
-
No utilice solamente elementos, sino también atributos, para evitar un número excesivo de ellos que haga ilegible el documento.
- 33 -
Tema 5
XML SCHEMAS
5.1. DEFINICIÓN. COMPARATIVA DTD-SCHEMA________________________ 37 5.2. NAMESPACES _______________________________________________ 37 5.3. UTILIZACIÓN ________________________________________________ 38 5.4. ELEMENTOS ________________________________________________ 39 5.4.1. Contenidos _____________________________________________ 40 5.4.2. Secuencias _____________________________________________ 40 5.5. ATRIBUTOS _________________________________________________ 41 5.6. EJEMPLO COMPLETO_________________________________________ 42
- 35 -
5.1. DEFINICIÓN. COMPARATIVA DTD-SCHEMA A pesar de que mediante los DTD podemos crear nuestras propias etiquetas, éstos tienen una serie de límites. No podemos por ejemplo identificar los tipos de datos de manera concreta (es imposible indicar si estamos ante una fecha), como tampoco podemos indicar si el valor de un elemento tiene que oscilar entre un límite máximo o mínimo, y a pesar de que podemos indicar las apariciones de un elemento, no nos permite indicar ese número de manera exacta.
Al mismo tiempo, existe otro inconveniente en el uso de los DTD. Hemos de aprender una sintaxis diferente a XML para crearlos, debido a que éstos provienen de SGML. Por todas estas razones Microsoft crea un sistema estándar propio para la creación de etiquetas, donde en todo momento se trabaja con XML. El W3C, toma estas ideas y crea un sistema estándar: los XSchemas (XML Schemas).
5.2. NAMESPACES Existen multitud de DTD e igualmente el número de Schemas va aumentando. Existe una gran probabilidad de encontrarnos un documento XML enlazado a dos DTD, donde existan elementos con igual nombre y que sin embargo, estén definidos para un objetivo diferente. Si utilizamos el nombre de ese elemento, ¿a cuál de ellos nos estaremos refiriendo? Para evitar estos casos de ambigüedad que pueden darse también en los atributos, se crean los llamados namespaces o espacios de nombre.
Un namespace es un identificador, al cual se asigna un grupo de elementos o atributos, de tal manera, que al utilizar un elemento o atributo perteneciente a un namespace concreto, sea necesario utilizar ese identificador antes:
Datos del elemento Gracias al identificador o prefijo xt , no habrá confusiones con otros elementos que utilicen el mismo nombre. Para usar un prefijo habría que hacer exactamente lo mismo.
Antes de utilizar un namespace, por supuesto hemos de declararlo:
xmlns:prefijo = URL - 37 -
La palabra clave xmlns, indica al procesador que analiza el documento, que estamos declarando un namespace, que no es ni más ni menos que asignar a un prefijo, una URI. Realmente, no estamos apuntando a un recurso mediante la URI del namespace, sino que simplemente se utiliza para dar más información al procesador, sobre el mismo y para evitar duplicar namespaces. Es necesario tener claro aquí, que el namespace no es el prefijo, sino la URI a la que se enlaza.
5.3. UTILIZACIÓN Puesto que un XSchema, no es ni más ni menos que un documento XML con una serie de elementos, la forma de que un documento XML normal trabaje en base a un documento XSchema es enlazándolo de una manera particular, establecida por el estándar. Este enlace, se haría en el prólogo del documento XML que va a seguir al XSchema:
xsi:noNamespaceSchemaLocation="./schemas/libreria.xsd" > . . . El nombre usado como prefijo (xsi ) no es obligatorio, sólo se indica por convenio. La URI que hace de namespace es obligatoria, pues indica el estándar del W3C. El atributo noNamespaceSchemaLocation indica la localización exacta del documento XSchema. Hay que hacer notar que el enlace al XSchema se realiza mediante la declaración de un namespace en el elemento raíz del documento.
La creación del documento XML que contiene al esquema pasa por un proceso similar:
. . .
- 38 -
Nótese que se trata de un documento XML que utiliza elementos ya predefinidos para crear etiquetas. Hacer notar también que el elemento raíz de un documento XSchema es schema. El prefijo xsd es también usado por convención y se podría usar otro si se quisiera. También por convención, se utiliza como extensión al nombrar a un archivo XSchema ,con el mismo nombre que el prefijo: xsd.
5.4. ELEMENTOS La definición de un elemento bastante simple en cuanto a su sintaxis, pero como se verá, será necesario conocer y distinguir perfectamente los diferentes tipos de contenido que puede tener un elemento. La sintaxis es:
Como tipos de datos tenemos una gran cantidad de ellos, los más utilizados serían: - string: Una cadena de texto. - integer : Entero. - float: Flotante. - double: Flotante doble. - time: Horas, minutos, etc. - date: Fecha. - boolean: Lógico.
Es necesario volver a mencionar que los tipos de datos que aquí aparecen son los principales, pero existen muchos más, normalmente, derivaciones de los anteriores. El siguiente ejemplo muestra la declaración de un elemento que utiliza como tipo de dato un número entero y un valor por defecto, gracias a default:
O indicando un valor fijo que no podrá cambiar, gracias al uso defixed :
- 39 -
5.4.1. Contenidos Para crear XSchemas que sean funcionales, es necesario tener muy claro de que manera clasifica los elementos este sistema, y también que contenidos puede tener. Los tipos de elementos que pueden aparecer en un XSchema son: - Complejos. Aquellos elementos que como contenido contengan otros elementos o bien posean atributos. Figuran aquí elementos vacíos con un atributo al menos, o elementos que contienen a su vez subelementos. - Simples . No poseen atributos y no pueden contener otros elementos. Se incluyen aquí los elementos vacíos sin atributos y cualquier elemento cuyo contenido solo sean datos.
Respecto a los tipos de contenidos, como se ha visto más arriba, éstos están estrechamente ligados a cada tipo de elemento:
Contenidos
Mixto
Complejo
Simple
Vacío
Con subelementos
Sí
Sí
No
No
Datos
Sí
No
Sí
No
5.4.2. Secuencias Todo elemento complejo con subelementos, debe indicar una secuencia a seguir por los diversos elementos que figuran como contenido. Para hacerlo se sigue una sintaxis como la del ejemplo:
- 40 -
El elemento indica el comienzo de la secuencia de subelementos y que deberán aparecer exactamente en el mismo orden en que han sido designados. Aparece minOccurs, que indica el número mínimo de apariciones del elemento y maxOccurs, que indica el máximo.
5.5. ATRIBUTOS Mediante los siguientes ejemplos, se podrá ver la forma de declarar un atributo junto a otras particularidades.
En este primer ejemplo, declaramos un atributo con un valor por defecto:
Si queremos que el atributo contenga siempre el mismo valor:
Si pretendemos que el atributo sea opcional:
Y finalmente si deseamos que sea requerido:
- 41 -
5.6. EJEMPLO COMPLETO Veamos un XSchema al completo.
Documento or denes.xsd Un documento XML que haga uso y siga correctamente las definiciones del XSchema del ejemplo, podría ser éste: John Smith Ola Nordmann Langgt 23 4000 Stavanger Norway
- 42 -
- Empire Burlesque Special Edition 1 10.90
- Hide your heart 1 9.90
- 43 -
RECUERDE
-
A pesar de la relativa sencillez de creación de DTD, a la larga es mejor utilizar XSchema, al obtenerse una mejor descripción de los datos y utilizarse en todo momento XML, no SGML.
-
Los namespaces o nombres de espacio no señalan una dirección física de un recurso, tan solo indica información para evitar ambigüedades.
-
Es importante a la hora de crear XSchemas, tener muy claro como clasifica los diferentes elementos que puedan crearse y sus tipos de contenidos.
- 44 -
Tema 6
PRESENTACIÓN DE DOCUMENTOS XML
6.1. 6.1. CONTENI CONTENIDO DO Y PRESEN PRESENTACIÓN TACIÓN _________________________________ _________________________________ 47 6.2. 6.2. CASCADE STYLESHEE STYLESHEETT (CSS) (CSS) __________________________________ __________________________________ 47 6.3. 6.3. XSL ________________________________________________ ________________________________________________________ ________ 47 6.3.1. 6.3.1. XPATH_________________________________ XPATH_________________________________________________ ________________ 47 6.3.2. 6.3.2. XSLT _____________________________________________ __________________________________________________ _____ 49 6.3.3. 6.3.3. XSL-FO _______________________________________________ _________________________________________________ 52
- 45 -
6.1. CONTENIDO Y PRESENTACIÓN Toda la información contenida en un documento XML, con sus DTD o XSchemas, no nos serviría de nada si no se pudiese presentar al usuario, de una manera más comprensible, por muy autodescriptivas que sean las etiquetas que forman XML. Actualmente se utilizan dos sistemas para lograr este propósito, y tenemos la posibilidad de que la presentación se haga en formato web, pdf, rtf, etc.
6.2. CASCADE STYLESHEET (CSS) Una primera posibilidad que nos permite presentar documentos XML en formato web, proviene de un sistema para mejorar HTML. Las CSS fue un estándar creado por el W3C como un primer intento de separar la información de su presentación en web y que se puede utilizar tanto en HTML como en XML, aunque en éste último se recomiende el uso de XSL, pues está específicamente creado para este lenguaje. La forma de enlazar un archivo CSS con un documento XML se realiza en el prólogo de éste, mediante la inclusión de una instrucción de proceso:
El documento archivo.css contiene el código CSS que formatea el documento XML para su presentación en web y text/css , indica que el sistema usado para presentar la información es CSS.
6.3. XSL El eXtensible Stylesheet Language, es el sistema apropiado para formatear la información contenida en un documento XML para presentarlo en diversas formas, ya que deriva del propio XML y como se dijo, es específico para él. Para realizar su labor, XSL se divide en tres subtecnologías.
6.3.1. xpath Para poder formatear y presentar la información existente en un documento XML, es necesario contar con una forma de acceder a los diferentes objetos que lo forman, y XPath es la tecnología de XSL encargada de realizar esta tarea. La sintaxis utilizada por XPath para recorrer los documentos es muy similar a la - 47 -
usada por el sistema de ficheros de un ordenador, tratando cada archivo como un árbol jerárquico de objetos donde cada nivel es un nodo, que se puede seleccionar o nombrar para indicar la ruta a seguir que nos permita seleccionar un objeto concreto que puede ser un elemento o un atributo, o bien un grupo de ellos. XPath, como se verá más adelante cuenta también con una serie de funciones que se pueden emplear también para potenciar el acceso a los objetos de un documento.
Comencemos viendo como seleccionar la unidad básica de un archivo XML, el elemento. - titulo , simplemente escribiendo el nombre, es posible seleccionar un elemento. Al no indicar una ruta a seguir, XPath intentará seleccionar todos aquellos elementos con ese nombre, a partir del objeto que en ese momento esté seleccionado. Mediante la utilización de la barra invertida: / y la doble barra invertida //, conseguiremos crear diferentes tipos de ruta. Con la utilización de la barra simple serán rutas absolutas, mediante las cuales indicamos un camino concreto a seguir, para seleccionar un objeto. La utilización de la doble barra es una forma de crear rutas no absolutas, pues con su utilización, estamos indicando que para realizar la selección de un objeto se busque en absolutamente todo el documento. Veamos unos ejemplos: - /elemento_raiz , selecciona el elemento raíz del documento. - /elemento_raiz/sub1 , selecciona todos los elementos sub1, que penden del raíz. - /elemento_raiz/sub1/sub2 , selecciona todos los elementos sub2 de todos los elementos sub1. - //libro , selecciona todos los elementos libro que existan en el documento.
Podemos usar caracteres especiales llamados comodines, comodines, como el asterisco, asterisco, que equivale equivale a cualquier elemento: - /*/mapas/andalucia , selecciona todos los elementos andalucia de todos los elementos mapas que tienen un ancestro o nivel superior de elementos, sea el que sea. - //* , selecciona absolutamente todos los elementos de un documento.
Mediante la utilización de corchetes, podemos indicar condiciones a la hora de seleccionar elementos:
- 48 -
- /imagenes/mapas[1] , selecciona el primer elemento mapa contenido en imagenes. - /imagenes/mapas[last()] , selecciona el último elemento mapa contenido en imagenes. - /imagenes/mapas[andalucia] , selecciona todos los elementos mapas de imagenes, que contienen al elemento andalucia. - /muebles/mesas[precio=30] , selecciona todos los elementos mesas que contienen elementos precio y cuyo contenido es 30.
Hasta ahora hemos estado trabajando con una sola ruta, pero es posible que necesitemos indicar más de una ruta. Para hacer esto se hará uso de caracteres conectores, como es el caso del carácter tubería |. Sirvan los siguientes ejemplos: - //titulo | //autor , selecciona todos los elementos titulo y autor del documento. - //titulo | //autor | /libros/editorial[editorial='Libreros'] , selecciona todos los elementos titulo y autor del documento y todos los elementos editorial de libros, cuyo contenido sea Libreros.
A la hora de seleccionar atributos, podemos actuar exactamente igual que con los elementos, salvo que antepondremos el carácter arroba (@) antes del nombre del atributo: - //@color , selecciona todos los atributos color del documento. - //fondo[@color] , selecciona todos los elementos fondo del documento que posean el atributo color. - /web/fondo[@*='opaco'] , selecciona todos los elementos fondo que estén dentro de web, que contengan atributos con el valor opaco.
Otros ejemplos sobre XPath: - ./precio[@moneda] , selecciona todos los elementos precio que estén un nivel por debajo del elemento actualmente seleccionado y que posean un atributo moneda. - ../alquiler[1] , selecciona el primer elemento alquiler que dependan del nivel superior al actual.
6.3.2. xslt El eXtensible Stylesheet Language Transformations, es la parte de XSL encargada de realizar la transformación de los objetos de un documento XML para su presentación. Para lograr esto hace uso de unas plantillas que realizan una serie de operaciones sobre los objetos de un archivo XML. Cada plantilla,
- 49 -
actúa en algún punto de un archivo XML, gracias a las rutas XPath, vistas en el punto anterior. Aquellas partes de un documento, que no sean utilizadas por una plantilla, quedarán tal cual, sin ningún tipo de transformación.
Estas plantillas se habrán creado en un archivo XML aparte, que únicamente contendrá a estas, y cuya extensión típica será .xsl, por convención. De esta manera, si queremos que un documento XSLT actúe en un determinado fichero XML, habremos de proceder a enlazarlo, de una forma similar a como lo hacíamos con los XSchemas, o más parecido aún con CSS en el prólogo, mediante una instrucción de proceso:
Una vez visto como enlazar la hoja de estilo XSL, veamos como puede crearse. Esa labor se hará también como si creáramos un documento XML, ya que al fin y al cabo eso es precisamente. La sintaxis de creación es como sigue:
. . . Como dijimos, todo el documento está basado en plantillas y la sintaxis para crearlas es:
... Observamos el uso del elemento template, que define la plantilla y su atributo match , donde indicamos una ruta XPath, que seleccione el lugar donde se aplicará la citada plantilla. Puesto que todo en XML gira en torno a la información, para presentarla es necesario una forma de acceder a ella y es el elemento XSL encargado de ello:
- 50 -
Extrae el valor de un elemento seleccionado, resultado del proceso de la ruta XPath existente en el atributo select.
El siguiente ejemplo, muestra un elemento que permite realizar un bucle, que recorra todos los elementos de un determinado nivel, con lo que podremos acceder de manera rápida al valor de cada elemento:
El resultado de aplicar el anterior código es que en la presentación aparecerán los valor de todos y cada uno de los elementos titulo y autor que se encuentren como subelementos de todos los elementos libro que halla por debajo de libros. Si quisiéramos que el resultado apareciera ordenado alfabéticamente por autor, utilizaríamos lo siguiente:
Si pretendiésemos filtrar toda la anterior información de salida, haciendo que solo aparecieran los datos de los autores y títulos de los libros con precio inferior a 20:
Y si deseamos que ocurran cosas diferentes con más de una condición:
- 51 -
6.3.3. xsl-fo Se ha visto como seleccionar los objetos de un documento XML, como lograr presentarlos, queda por tanto estudiar su formato y de eso es lo que se encarga la tercera y última de las tecnologías que componen XSL. eXtensible Stylesheet Language Formatting Objects nos permite de manera similar a como lo hacían las CSS, dar formato a la información de salida de un documento XML, cuando se le aplica una transformación por medio de
XSLT. Podemos crear documentos de estilo XSLFO
independientes, que después se enlazarán con el archivo XML con el que trabajen o bien podemos incorporar el código de XSLFO a un fichero XSLT, con lo que las instrucciones de transformación, se mezclarán con las de formato. Si nos decidimos por la primera opción, a la hora de nombrar el fichero XSLFO, por convención, se utiliza como extensión .fo o bien .fob . La declaración que indica que estamos ante un archivo de este tipo, se realiza de la siguiente manera:
...
- 52 -
Al tratarse al fin y al cabo de un documento XML, debe contener un elemento raíz, que en este caso concreto será siempre root. Respecto al trabajo que realiza en un archivo XML, se puede decir que se asimila a XSL pues trata cada documento, no por objetos, pero sí por bloques, siendo el primero de ellos el que representa a todo el documento y por tanto el que define toda la configuración general que se aplicará al proceso de formateo de la información para su presentación:
... Como el documento se puede dividir en páginas, es necesario un elemento que identifique cada página, que dará lugar normalmente a una plantilla:
El atributo master-name identifica de forma única a cada plantilla de página. Hay que asegurarse por tanto, que ese nombre no se repita. Si se trata de formatear una parte o bloque, del contenido de una página, tendremos que usar un elemento más que irá enlazado con una plantilla de página concreta. Este elemento se dispondrá fuera de layout-master-set . Mediante el atributo master-reference de una de estas plantillas de página es posible enlazar con simple-page-master :
Para la salida de los datos, XSLFO usa áreas rectangulares donde se presentará cualquier tipo de información resultado. Estas áreas guardan una jerarquía según sea el tipo de cada área:
Páginas. Cualquier resultado de los datos que se presente, será dividido en páginas. Ya se ha visto que elementos trabajan sobre las páginas. Regiones. Cada página estará dividida a su vez en regiones. Bloques. Las regiones se dividen en bloques. Líneas. Los bloques en líneas.
- 53 -
Aún existe otro tipo de área más, aunque ésta se refiere al interior de las líneas, pues cada una de ellas, englobará a un carácter concreto de la línea, un gráfico, etc.
Las páginas están divididas en unas regiones fijas, que hacen referencia a áreas típicas de una página: - region-body , cuerpo de la página. - region-before , área superior de la página, cabecera. - region-after , área inferior, pie de página. - region-start , área izquierda de la página. - region-end , área izquierda de la página.
El siguiente ejemplo muestra un fichero XSLFO que muestra la estructura a seguir y que al mismo tiempo indica que elementos se utilizan para indicar regiones, y las diferentes áreas que dependen de las regiones:
- 54 -
Este es solamente un texto de prueba contenido en una región, que asímismo contiene un texto anidado. Otro ejemplo de texto anidado y en negrilla como éste o en itálica como este otro..
Otra posibilidad de usar XSLFO es integrándolo directamente en un documento XSLT. El ejemplo que sigue muestra una forma usual de lograrlo:
- 55 -
RECUERDE -
CSS fue desarrollada para dotar a HTML de abstracción de datos, separando éstos de su presentación, por tal motivo para XML se recomienda el uso de XSL.
-
Con XSL podemos transformar un documento XML en otro que permita su presentación en diferentes formatos.
-
XSL utiliza a XPath, para recorrer cualquier documento XML; XSLT para acceder y gestionar los datos y XSLFO para darles un estilo de presentación.
- 56 -
Tema 7
HIPERENLACES EN XML
7.1. VÍNCULOS Y PUNTEROS EN XML ________________________________ 60 7.2. XLL ________________________________________________________ 61 7.2.1. xlink___________________________________________________ 61 7.2.2. xpointer ________________________________________________ 63
- 57 -
Quienes han utilizado la Web alguna vez, saben hasta qué punto es importante el hiperenlace. Sin embargo, no todo el mundo sabe que las nociones sobre hiperenlace de la Web son bastantes reducidas comparadas con los sistemas de hipertexto comerciales y académicos. XML por si solo no puede corregir esto, pero existen dos normas asociadas, XLink y XPointer, que dan un paso de gigante en la consecución de un entorno de hipertexto más avanzado que el utilizado por HTML. En el lenguaje de etiquetas HTML, colocamos un enlace utilizando la etiqueta ... y podemos enlazar a un único documento o al interior de éste, siempre y cuando esté marcado con la etiqueta ....
En la especificación XLink se describe como permitir el enlace entre documentos XML. Entre otras, nos permite:
o
Utilizar cualquier elemento del XML como origen de enlace.
o
Enlazar a más de un documento.
o
Crear enlaces fuera del documento.
o
Definir el comportamiento del enlace, etc.
En la especificación XPointer se define la sintaxis que nos permitirá enlazar al interior de un documento XML. Con esta nueva norma, los enlaces ya no sólo serán a elementos ya marcados sino que se permitirán enlaces a cualquier parte del documento, entre ellos:
o
Enlaces a una palabra del documento que cumpla unas condiciones concretas.
o
Enlaces a un párrafo concreto, etc.
No es posible tener hipertexto sin hipervínculos, y XML no podría funcionar en el mundo del WWW sin algún tipo de mecanismo de construcción de vínculos. Los hipervínculos de HTML son funcionales y han supuesto para los creadores de documentos un sistema fiable y estándar para hacer referencia a los trabajos de otros desde sus propios documentos. Sin embargo, los hipervínculos de HTML no explotan ni de lejos toda la capacidad de los hipervínculos. Por otro lado, los de XML son mucho más extensibles, y un sólo vínculo puede conectar cientos de documentos. En XML, disponemos de un sistema de vínculos denominado XLink y un mecanismo de referencia a elementos de un documento denominado XPointer. Junto con un conjunto de documentos escritos correctamente, XLink y XPointer llevan los vínculos a donde nunca nadie ha llegado.
- 59 -
7.1. VÍNCULOS Y PUNTEROS EN XML El sistema de vinculación de XML es tan especializado y exhaustivo que posee dos especificaciones que describen su funcionamiento. La primera de ellas, XLink, detalla el modo en que los documentos XML deben conectarse entre sí. Ya no existirán sólo los hipervínculos de A a B, sino que se podrá ir de A a B, luego a D, y de vuelta a A pasando por C, si le apetece. XLink también le permitirá guardar descripciones de sus vínculos en un documento, facilitando su gestión y actualización. La segunda de las especificaciones que rigen los vínculos de XML, XPointer, especifica cómo puede un vínculo apuntar a un lugar específico situado en el interior de un documento. Por tanto, XLink determina el documento al que se debe acceder, mientras que XPointer indica el lugar preciso dentro de ese documento. Combinados forman una potente herramienta para la creación de vínculos entre documentos XML. El objetivo de los creadores de XML es integrar los documentos de XML con los de HTML, con ese fin, XLink es compatible con la etiqueta de HTML, y es lo suficientemente potente como para satisfacer las necesidades de XML. Con XLink es posible crear vínculos entre documentos descritos con ambos lenguajes, así como entre documentos exclusivamente de XML. Los vínculos de XML pueden incrustarse en un documento y seguirse del mismo modo que los vínculos estándar de HTML. El navegador, de acuerdo con la hoja de estilo asociada al documento, determinará cómo debe mostrar los vínculos al usuario. Dentro de poco tiempo, desaparecerán los vínculos azules subrayados. Un usuario podrá activar los vínculos XML normalmente haciendo clic sobre ellos. Todas estas características deberían resultarle familiares, pues también se aplican a los vínculos HTML. Por su parte, los vínculos de XML también pueden:
o
Acoplarse a cualquier elemento, y no sólo a . De este modo se puede lograr una de las metas de XML; permitir a los diseñadores de DTDs definir sus propios elementos de marcado. Cualquier elemento puede constituir un hipervínculo en XML.
o
Hacer referencia a un punto específico de un documento XML conociendo su nombre o ciertas características especiales como su contexto o localización. Aquí es donde entra en juego XPointer.
o
Verse o procesarse de modos diferentes tal y como desee el creador de un documento. También pueden activarse automáticamente, en vez de confiar en que el usuario haga clic sobre el texto subrayado.
- 60 -
o
Describirse en un documento que en realidad no forma parte del vínculo. Ser multidireccionales, al contrario que los vínculos unidireccionales de HTML.
XPointer está diseñado para proporcionar a XLink un modo de apuntar a lugares específicos de un documento. En su forma más simple, XPointer puede apuntar a un elemento del que conozca su localización o contexto. Hace uso de un término de localización para especificar exactamente dónde debe llevar un vínculo. Estos términos pueden definirse en términos absolutos o relativos, con cadenas de caracteres, atributos, etc.
Como puede ver, los vínculos de XML son mucho más avanzados que los de HTML y le ofrecen más opciones de conexión entre sus documentos.
7.2. XLL XML Linking Language nos permite todo lo visto anteriormente. Como también se ha descrito, engloba a dos sublenguajes: XLink y XPointer.
7.2.1. xlink Este lenguaje utiliza dos tipos de hiperenlaces: simples y extendidos. Los simples son básicamente los mismos que se utilizan en HTML, los extendidos son los que nos permiten acceder a todas las ventajas anteriormente citadas. La forma de acceder a XLink en un documento XML, sería la siguiente:
La sintaxis para trabajar con hiperenlaces simples es la siguiente:
Este texto es de prueba.
- 61 -
El atributo xlink:type indica el tipo de enlace. Como en HTML, href indica la URL a la que apunta el hiperenlace. Podemos encontrarnos también con el atributo show , que nos indicará lo que ocurrirá al pulsar en el enlace: - xlink:show="replace" , reemplaza el documento actual por el recurso al que apunta el enlace. - xlink:show="new" , abre una nueva ventana del navegador con el documento destino. - xlink:show="embed" , el recurso apuntado se incluye en el lugar del enlace y es procesado como si fuera parte del documento origen.
El trabajo con enlaces extendidos, nos permite apuntar a más de un recurso en el mismo hiperenlace. Según los recursos estén situados local o externamente, se utilizará resource o bien locator , respectivamente. En el enlace simple teníamos un elemento con una serie de atributos que construían el hiperenlace; en el caso del enlace extendido es en realidad un elemento cualquiera que contendrá una serie de subelementos.
Puede verse que en resumen, un enlace extendido contiene más de un enlace simple con algunas particularidades. Tanto el elemento inicio como intermedio , contienen el atributo xlink:label que nos permite identificar de forma única un elemento para indicar por ejemplo, relaciones entre ellos. En cuanto al elemento recorrido , posee como valor del atributo xlink:type la cadena arc , que identifica básicamente un camino a recorrer entre los diferentes enlaces simples que componen el extendido. En el ejemplo que estamos tratando, mediante los atributos xlink:from y xlink:to , indicamos el comienzo y fin de ese recorrido.
- 62 -
7.2.2. xpointer XPointer es una extensión de XPath, permitiéndonos en el uso de hiperenlaces, acceder a cualquier punto de un documento, de manera muy exacta, incluso mediante condiciones. La sintaxis básica sería tal como se expone seguidamente:
url#xpointer(ruta XPath) /libreria/libros.xml#xpointer(/libro/capitulo[@public])
Actualmente XLink se encuentra en estado de "recomendación", por lo que su estado como estándar del Wordl Wide Web Consortium es inminente. Respecto a XPointer su estado en el W3C es "working draft", a pesar de lo cual es conveniente su estudio, ya que se usa junto a XLink para formar XLL de manera casi inseparable.
- 63 -
RECUERDE -
HTML nos ofrece un método simple pero poco potente de gestionar hiperenlaces.
-
XLL hace uso de XLink y XPointer para crear y gestionar potentes enlaces.
-
XLink trabaja todo lo referente a los enlaces.
-
XPointer gestiona todos los puntos de un documento a los que se puede acceder mediante un hiperenlace.
- 64 -
Tema 8
DOCUMENT OBJECT MODEL
8.1. INTRODUCCIÓN ______________________________________________ 67 8.2. MANIPULAR UN DOCUMENTO XML ______________________________ 67 8.2.1. Objetos xml según modelo dom_____________________________ 68 8.2.2. Propiedades de los objetos xml _____________________________ 69 8.3. INTERFACES DE DOM _________________________________________ 70 8.3.1. Node __________________________________________________ 70 8.3.2. Nodelis t________________________________________________ 71 8.3.3. Document ______________________________________________ 71 8.3.4. Element ________________________________________________ 71 8.3.5. Attr ___________________________________________________ 71 8.3.6. Text ___________________________________________________ 72 8.3.7. CDATASection __________________________________________ 72 8.3.8. Comm ent_______________________________________________ 72 8.3.9. OTRAS ________________________________________________ 72 8.3.9.1. DocumentFragment_________________________________ 72 8.3.9.2. DocumentType ____________________________________ 72 8.3.9.3. ProcessingInstruction________________________________ 73 8.3.9.4. Entity____________________________________________ 73 8.3.9.5. Notation__________________________________________ 73 8.4. DOM EN INTERNET EXPLORER _________________________________ 74
- 65 -
8.1. INTRODUCCIÓN Uno de los mayores problemas que se produce con cualquier estándar, como XML por ejemplo, es que las aplicaciones que los utilizan tienden a desarrollar sus propios métodos y particularidades. Esta situación es más que evidente en DHTML donde, para llevar a cabo una tarea dada, han sido desarrollados varios métodos y distintas sintaxis en los principales navegadores, tal como Internet Explorer de Microsoft o Netscape Navigator. La recomendación W3C XML DOM es seguramente uno de los estándares más importantes que han aparecido tras la recomendación XML 1.0, ya que proporciona a los desarrolladores un vocabulario común para la manipulación de documentos XML. Independientemente de que la aplicación fuese escrita en C, Java, PERL, PYTHON, o en Visual Basic, podrán ser utilizados exactamente los mismos métodos, aunque lo que vaya “por debajo” sea muy diferente. Es decir, es una API que nos permitirá trabajar con documentos XML desde cualquier lenguaje. Del mismo modo, en la parte cliente no importa si se está utilizando Mozilla, Internet Explorer, Netscape Navigator, etc., puesto que como todos ellos implementan el mismo DOM, podemos estar seguros de que nuestro script funcionará correctamente siempre, o al menos así debería ser.
8.2. MANIPULA R UN DOCUMENTO XML Los documentos XML son generalmente dinámicos y sujetos a cambios. Así que, si queremos una buena forma de modelar un documento XML, necesitamos un modelo que no sólo describa las partes intrínsecas del documento, sino que también pueda alterarlas y añadir otras partes nuevas. El modelo W3C DOM hace esto, trata conjuntamente cada documento XML como un árbol jerárquico y como un conjunto de objetos. La recomendación DOM también nos proporciona una serie de métodos que podríamos denominar "métodos de factoría" que nos permiten manipular los documentos XML. Estos métodos nos permiten realizar acciones del tipo "pon un elemento aquí", "añade este texto allí", "coloca un comentario aquí", etc. La API del W3C nos proporciona un conjunto excelente de estos métodos, que veremos más adelante. Veamos un documento XML bien-formado muy simple y como podría ser representado mediante un esquema en árbol:
- 67 -
Hola XML Adiós HTML La siguiente figura muestra, de forma gráfica, cómo quedaría el anterior código representado en forma de árbol:
Documento
Elemento
Elemento
Elemento
Texto
Texto
Seguir este modelo de trabajo con documentos XML nos permite crear un documento completo, recorrer su estructura, y añadir, modificar o eliminar cualquier elemento, etc.
8.2.1. Objetos XML según modelo DOM Según el W3C DOM, todos los objetos de un documento XML son tratados como nodos del sistema de árbol jerárquico que representa a la estructura del documento. Cada nodo puede tener a su vez, una serie - 68 -
de interfaces especializadas, según sea el tipo de nodo. Los objetos típicos que nos encontramos en un archivo XML se muestran en la siguiente tabla: OBJETO DTD o tipo de documento. Instrucción de proceso. Elemento.
EJEMPLO Índice cronológico
Atributo
tipo="indice"
Dato, texto.
Índice cronológico.
8.2.2. Propiedades de los objetos xml El objeto final de todo modelo es permitirnos crear o construir una réplica exacta de un documento original a partir del modelo. Para ello, cada objeto integrado en el citado archivo debe tener una serie de propiedades que nos lo permitan. Por supuesto, las propiedades variarán de un objeto a otro dependiendo de éste, pues si un elemento puede tener atributos, un texto nunca los tendrá: o
o
o
o
o
o
o
Tipo de nodo: esta propiedad indica si el nodo es un comentario, un elemento, una instrucción de proceso, una sección CDATA, un nodo de texto, etc. Nombre: la forma de asignar nombre a un nodo variará según el tipo del mismo. El nombre de un nodo de elemento es su etiqueta. El nombre sugerido por la especificación W3C DOM para un nodo de texto es #text, etc. Valor: al igual que sucede con el nombre, el valor de un nodo dependerá en parte del tipo de dicho nodo. En la especificación W3C, el valor de un nodo de elemento es "null", mientras que para un nodo de texto es la cadena de texto contenida en dicho nodo. Para otros tipos de nodos se dan otros valores. Padre: indica cuál es el nodo padre. Como única excepción se encuentra el nodo de documento, que no tiene padre. Lista de hijos: contiene una lista con todos los nodos hijos de un nodo determinado, ordenados desde el primero hasta el último. Hermanos: un nodo debe conocer su lugar dentro de una lista de hermanos, o al menos saber cual es su hermano "mayor" y su hermano "menor". Atributos: contiene una lista de pares atributo/valor dentro de un nodo elemento. En XML, el orden de los atributos no es importante. Los atributos podrían ser tratados con nodos hijos, sin embargo, W3C DOM prefiere tratarlos como propiedades de los nodos de elementos.
- 69 -
8.3. INTERFACES DE DOM Vistos los tipos de objetos y sus propiedades, pasamos ahora a ver las interfaces más comunes. El siguiente esquema muestra estas interfaces y la relación existente entre ellas:
DocumentFragment CDATASection
Document Element Attr
Text
CharacterData
Comment
Node DocumentType Notation Entity EntityReference NodeList
ProcessingInstruction
8.3.1. Node Se trata de la interfaz fundamental de DOM, teniendo en cuenta que cualquier objeto de un documento XML es tratado como nodo por esta API. Los diferentes métodos y propiedades nos permiten realizar una serie de acciones con los diferentes nodos:
-
Recorrer el árbol de objetos , pues para realizar ajustes en él, por ejemplo, se hace necesario situarse en el lugar correcto.
-
Tomar información del nodo , como puede ser el tipo de nodo, los atributos que tiene, su nombre, su valor, etc.
-
Añadir, eliminar, modificar nodos , para alterar la estructura del árbol si es necesario.
- 70 -
8.3.2. NodeList Se trata de una interfaz que trabaja con listas de nodos. La necesidad de crear esta interface viene dada por la existencia de métodos y/o propiedades que pueden devolver una colección ordenada de nodos. Se trata de una interface muy simple, ya que solamente tiene una propiedad y un método:
-
La propiedad length devuelve el número de objetos (nodos) que pueblan una lista de ellos.
-
El método item permite acceder a un nodo concreto de la lista a la que pertenece (y por tanto a sus respectivos métodos y propiedades) pasándole como argumento el índice que ocupa dentro de la lista.
8.3.3. Document Esta interfaz representa un documento XML completo. La propiedad más común de esta interfaz es documentElement que devuelve un objeto Element, que corresponde con el elemento raíz. También nos surte de métodos que nos permiten crear objetos típicos de un archivo XML, como elementos, atributos, etc. 8.3.4. Element Representa y permite trabajar con el nodo más típico de un documento XML: el elemento. Hay que hacer notar aquí, que el nombre de un nodo elemento viene dado por su etiqueta y su valor es siempre nulo, ya que el texto o dato que puede contener es a efectos del DOM otro nodo diferente. 8.3.5. Attr En DOM, la palabra "attribute" ha sido acortada a "attr" para evitar ambigüedades. Los atributos no son considerados como hijos de los elementos, debido principalmente a que el orden de aparición de los atributos carece de importancia. De esta forma, los pares atributo/valor se visualizan mejor como una propiedad del elemento, no siendo por tanto parte de la estructura en árbol de un documento. Es necesario tener esto en cuenta, pues no se puede trabajar con ellos indicando cual es por ejemplo su nodo "padre" o superior.
- 71 -
8.3.6. Text El nombre de un nodo de texto es "#text"’, y su valor es su contenido. Esta interfaz no puede tener hijos. 8.3.7. CDATASection El nombre de un nodo de una sección CDATA es "#cdata-section", y su valor es su contenido. Esta interfaz no puede tener hijos. 8.3.8. Comment El nombre de un nodo de comentario es "#comment", y su valor es su contenido, es decir, todo lo que haya entre . Esta interfaz no puede tener hijos. 8.3.9. Otras Pasamos a ver ahora interfaces menos frecuentes en su utilización. 8.3.9.1. DocumentFragment Un fragmento de documento es un concepto muy útil. Es posible construir un fragmento de documento partiendo de varios nodos y después insertarlo dentro del documento XML. La única condición que debe cumplirse es que el documento final deberá seguir estando bien formado después de haber sido incorporado dicho fragmento. El nombre de un nodo documentFragment es siempre "#documentfragment", y tiene un valor nulo. 8.3.9.2. DocumentType La especificación W3C DOM no hace grandes esfuerzos por soportar los DTD en su totalidad. El tipo de documento da acceso a las entidades y notaciones contenidas en la DTD, pero en no hay intención de soportar las declaraciones de elementos y atributos. El nombre de un nodo de tipo de documento viene dado por la cadena que sigue a , el nombre es "xdoc". Por otra parte, este nombre siempre será equivalente al del elemento raíz. El valor de este nodo siempre es nulo.
- 72 -
8.3.9.3. ProcessingInstruction El nombre de un nodo de instrucción de procesamiento es su destino (target). Su valor es su contenido completo, es decir, todo lo que haya entre y ?> a excepción del destino. Esta interfaz no puede tener hijos. 8.3.9.4. Entity Representa una entidad, procesada o no. El nombre de un nodo de entidad es el nombre de la propia entidad. El valor es siempre nulo. Esta interfaz no puede tener hijos. 8.3.9.5. Notation El nombre de un nodo de notación es el nombre de la propia notación. El valor es siempre nulo. Esta interfaz no puede tener hijos. A continuación se muestra una tabla que nos sirve como resumen de los distintos tipos de nodos que nos podemos encontrar: nod eType
nodeName
nodeValue
attri butes
Attr
Nombre del atributo
Valor del atributo
CDATASection
#cdata-section
Contenido de la sección null CDATA
Comment
#comment
Contenido del comentario
null
Document
#document
null
null
DocumentFragment
#document-fragment
null
null
DocumentType
Nombre del tipo de documento
null
null
Element
Nombre de la etiqueta (tag)
null
NamedNodeMap
Entity
Nombre de la entidad
null
null
EntityReference
Nombre de la entidad referenciada null
null
Notation
Nombre de la notación
null
null
ProcessingInstruction
Objetivo (target)
Contenido de la exceptuando el objetivo
Text
#text
Contenido del nodo de texto
- 73 -
null
PI null null
8.4. DOM EN INTERNET EXPLORER El parser XML de Microsoft es un componente ActiveX incluido en el navegador Internet Explorer a partir de su versión 5, por tanto, una vez instalado este navegador, tendremos la posibilidad de incluir scripts que trabajen con documentos XML. Este parser soporta varios lenguajes de programación como javascript, vbscript, perl, visual basic, java, c++ y otros. Por supuesto permite trabajar con el estándar XML y DOM del W3C, así como DTD's y validación. Si queremos asegurarnos las mayores ventajas, procuraremos tener instalada la última versión del Internet Explorer que lógicamente, incluirá la versión más reciente del parser XML de Microsoft. Puesto que el W3C DOM no incorpora funciones que carguen en memoria un documento XML para trabajar con él, por ejemplo, cada lenguaje o cada parser debe incorporar sus propias funciones o métodos específicos. En el caso del que nos ocupa, la sintaxis para ciertas tareas, varía en tanto decidamos utilizar diferentes lenguajes de programación. Seguidamente se muestra la sintaxis a seguir para crear objetos documentos XML: Para javascript: var xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); Para vbscript: set xmlDoc=CreateObject("Microsoft.XMLDOM") Para vbscript trabajando con ASP: set xmlDoc=Server.CreateObject("Microsoft.XMLDOM") Posteriormente se crearía el código necesario para cargar un documento XML cualquiera en memoria, utilizando para ello el objeto creado anteriormente. En javascript, el siguiente código mostraría el proceso de la tarea citada anteriormente: <script type="text/javascript"> var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = "false"; xmlDoc.load("../pruebas/catalogo.xml"); // Otras instrucciones.......
- 74 -
Según el código anterior, primero creamos un objeto que se enlazará a un documento XML. Después, mediante el método load de ese mismo objeto, cargamos el archivo XML que necesitemos, indicando la ruta del lugar donde estuviera situado. Igualmente, existe la posibilidad de cargar texto XML directamente, sin necesidad de que se encuentre almacenado en un archivo, simplemente almacenándolo en una variable que se pasará como parámetro al método load. Otra ventaja que proviene de la utilización de este parser es la posibilidad de gestionar errores, facilidad que tampoco incorpora el W3C DOM. El objeto parseError permite indicar códigos de errores, texto de error e incluso línea donde tuvo lugar el error: <script type="text/javascript"> var xmlDoc = new ActiveXObject("Microsoft.XML"); xmlDoc.async = "false"; xmlDoc.load("ejemplos.xml"); document.write("
Código de error: " + xmlDoc.parseError.e rrorCode); document.write("
Descripción del error: " + xmlDoc.parseError.reason); document.write("
Error en línea: " + xmlDoc.parseError.line); La propiedad errorCode devuelve un entero largo que representa el código de error; reason una cadena de texto que describe el error y por último line que mediante un entero largo indica en que línea a ocurrido. Respecto a la manera de extraer los elementos de un documento XML se puede hacer de tres formas: recorriendo el árbol de nodos, accediendo a los elementos por su número o índice y por último, accediendo a ellos a través del nombre. El primer ejemplo que viene a continuación, muestra mediante vbscript el acceso al árbol de nodos: set xmlDoc = CreateObject("Microsoft.XMLDOM") xmlDoc.async = "false" xmlDoc.load("fichero1.xml") for each x in xmlDoc.documentElement.childNodes document.write(x.nodename) document.write(": ") document.write(x.text) next - 75 -
Mediante documentElement.childNodes conseguimos acceder a los nodos que nos interesan. Mediante las propiedades nodename y text accedemos al nombre de cada elemento y su valor, respectivamente. En el siguiente ejemplo, accedemos a los elementos mediante su índice o número, esta vez, mediante javascript: var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.load("fichero2.xml"); nodes = xmlDoc.documentElement.childNodes; // to, from, header y body son elementos de fichero2.xml. to.innerText = nodes.item(0).text; from.innerText = nodes.item(1).text; header.innerText = nodes.item(2).text; body.innerText = nodes.item(3).text; Por último, el ejemplo que sigue usa el acceso a los elementos mediante su nombre: var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.load("fichero2.xml"); to.innerText = xmlDoc.getElementsByTagName("to").item(0).text; from.innerText = xmlDoc.getElementsByTagName("from").item(0).text; header.innerText = xmlDoc.getElementsByTagName("header").item(0).text; body.innerText = xmlDoc.getElementsByTagName("body").item(0).text; En este último ejemplo, puede resultar curioso el hecho de que vuelva a emplearse item para acceder por un índice al elemento correcto. La razón para esto es que getElementsByTagName, devuelve un array de elementos que cumplen con lo seleccionado: getElementsByTagName("libro"), devolverá un array con todos los elementos libro del documento.
- 76 -
RECUERDE
-
DOM nos permite administrar un documento XML al completo, permitiéndonos recorrerlo, añadir objetos, eleminarlos, modificarlos, etc.
-
DOM trata los documentos XML como un árbol de objetos, donde cada uno tiene una serie de métodos y propiedades, englobados en una interfaz.
-
Cada interfaz contiene los métodos y propiedades de un tipo de objeto concreto.
-
El parser de Microsoft incluye DOM. Se trata de uno de los parsers más extendidos.
- 77 -
GLOSARIO A Atributo. Un cualificador es una etiqueta XML que facilita información adicional. C Cdata. (Carácter data). Tipo de datos correspondiente a los caracteres. D DOM. Modelo de Objeto Documento. Se trata de un árbol de objetos con interfaces para moverse por él y escribir una versión XML del mismo, según la especificación obtenida en la W3C. E Enumerado. Tipo que indica que sólo puede contener valores de una lista de opciones dada. Espacio de nombre. Estándar que nos permite especificar una única etiqueta para un conjunto de nombres de elementos definidos por un DTD. Etiqueta. Texto que describe una unidad de datos (elemento) en XML que está encerrado entre las etiquetas “<” y “>”. M Meta-lenguaje. Sistema para la definición de lenguajes de marcación, como por ejemplo, el HTML. P Parser. Procesador de los diferentes datos que aparecen en los documentos. R RDF. "Resource Description Framework". Estándar para definir la clase de datos que contiene un fichero XML. La información puede ayudar a asegurar la integridad semántica. S SAX. Simple API for XML". Interface dirigido a eventos en que el que el analizador invoca uno o más métodos suministrados por el llamador cuando ocurre un "evento de análisis". SGML. Lenguaje de marca estándar generalizado, ( Estándar Generalized Markup Language) ISO8879.
- 79 -
U UNICODE. Un estándar definido por "Unicode Consortium" que usa una página de códigos de 16 bits, que mapea dígitos a caracteres de todos los idiomas del mundo, como los 16 bits pueden cubrir 32,768 códigos, Unicode es lo suficientemente grande como para cubrirlos todos, excepto los lenguajes que tienen caracteres diferentes para cada concepto, como el chino. URI. "Universal Resource Identifier". Un URI es una URL o una URN. Se trata de entidades concretas que realmente existen. Una "URI" es una superclase abstracta. W W3C. Siglas que corresponden al Word Wide Web Consortium. Es un organismo que lidera la creación de las nuevas tecnologías en la Web. http:// w3.org X XLL. La especificación "XML Link Language", consta de Xlink y Xpointer.
- 80 -
BIBLIOGRAFÍA - Dave Pawson. XSL-FO. Ed. O'Reilly. - Erik T. Ray. Learning XML. Ed. O'Reilly. - Etio Brun, Ricardo. Programación con XML. 1ª Ed. Anaya Multimedia. - John Robert Gardner. XSLT and XPath: A guide to XML Transformation s. Ed. Prentice Hall. - Kevin Williams. Professional XML Databases. Ed. Wrox. - R. Allen Wyke. XML Essentials. Ed. Wiley. - Sposito, Dino. Programación en XML para Microsoft .NET. Ed. McGraw-Hill. - Sturm, Jake. Desarrollo de soluciones XML. Ed. McGraw-Hill.
- 81 -