El lenguaje de marcado extensible XML

Los seres humanos tienen diversas necesidades de información, y cuando ésta se debe almacenar en la computadora, se suele hacer en forma de bases de datos o documentos digitales. Las bases de datos restringen en alguna medida la representación de información del mundo real a una estructura que debe definirse formalmente para poder ser eficientemente manipulada por el computador. Elaborar una base de datos es una tarea compleja que consume recursos considerables. Los documentos por el contrario, son menos estrictos por lo que pueden representar casi cualquier tipo de información del mundo real, pero tal libertad limita el poder de manipulación del computador. El XML es un lenguaje formal que busca las ventajas de ambos: la representación flexible de información en forma de documentos que pueden ser manipulados aprovechando el poder del computador.

El lenguaje de marcado extensible (XML, eXtensible Markup Language), es un conjunto de reglas estándar para representar información en forma de documentos digitales, que se caracteriza por permitir marcado definido a conveniencia del autor. Representar digitalmente un documento implica transformarlo en algún tipo de código legible por la computadora para que ésta sea capaz de almacenarlo, procesarlo, buscarlo, transmitirlo, mostrarlo e imprimirlo [Gold99].

A modo de ejemplo, supóngase que un profesor quiere anotar en su computadora varias ideas sobre el curso que va a impartir. No crea una base de datos para ello, sino que crea un nuevo documento y escribe algún texto como el que se aprecia en el ej_plain_doc



Este documento contiene un resumen de temas que servirán de
apoyo a los estudiantes del curso CI-2413 impartido en la Universidad...



INTRODUCCIÓN A LA TECNOLOGÍA WEB

De todas las aplicaciones que se han construido sobre Internet, la
World Wide Web (WWW o simplemente web) ha sido la más popular, tanto que,
muchas personas cuando escuchan el término "Internet" realmente[...]

La popularidad de la web puede adjudicarse a su facilidad de uso y por
ser el más exitoso de los sistemas distribuidos en la actualidad. Los
documentos se almacenan en computadoras distintas, con sistemas[...]


Historia de la web

La web fue conceptualizada en un artículo de 1989 de Tim Berners-Lee,
quien se convertiría en uno de sus grandes líderes. A finales de 1990,
Berners-Lee desarrolló el Protocolo de transferencia de hipertexto[...] ]]>
Ejemplo un documento sin estructura.

En un inicio el documento resulta muy práctico, pero conforme crece en tamaño y complejidad se descubren las imposibilidades de procesamiento del computador. Por ejemplo, no hay forma de decirle al computador que automáticamente enumere los títulos y cree una tabla de contenidos, porque simplemente no se ha identificado cuáles son los títulos en el documento. Sin embargo, el autor podría utilizar alguna convención para distinguir los títulos, por ejemplo, precederlos por varios cambios de línea, en proporción inversa al nivel del título; o emplear caracteres especiales. Cualquiera que sea el caso, el autor debe ser cuidadosamente consistente con su notación. Luego tendría que programar algún software que guiado por estas convenciones, cree el índice en forma automática, y provea otras funcionalidades similares.

Supóngase que otro profesor, con la misma necesidad de representar información de un curso en su computadora, crea una convención distinta, y además un software distinto. Además del trabajo redundante, estos dos autores no podrán compartir sus trabajos ya que desconocen sus notaciones. Aquí es donde tiene cabida XML. XML es simplemente un conjunto de convenciones para escribir documentos y un conjunto de reglas estándar que le dice a los software cómo deben procesar esos documentos guiados por las necesidades de los autores. El documento del ej_plain_doc podría representarse como el xml_eg_book en XML.





   Aplicaciones web
   
      
         Jeisson Hidalgo-Céspedes
         jeissonh@gmail.com
      
   

   
      
Prólogo

Este documento contiene un resumen de temas que servirán de apoyo a los estudiantes del curso CI-2413 impartido...

Agradecimientos

Quiero agradecer en primer lugar, a usted, que con sus ojos da vida a estas inanimadas palabras pintadas en...

Introducción a la tecnología web

De todas las aplicaciones que se han construido sobre Internet...

Su popularidad puede deberse a su "facilidad de uso" y...

Historia

La web fue conceptualizada en un artículo de 1989 Tim Berners-Lee

]]>
Ejemplo de un libro hipotético en XML. Obtener archivo.

Un documento XML es un archivo de texto. El texto se clasifica en tres tipos: datos de carácter, elementos y entidades. Los datos de carácter corresponden al texto normal que el autor quiere escribir, como el presentado originalmente en el ej_plain_doc. La computadora poco puede hacer con este texto, por ejemplo, no puede crear la tabla de contenidos porque no sabe cuáles partes del texto son los títulos. XML solicita al autor que además de escribir el texto, distinga claramente cada parte del mismo. En terminología XML, una parte de un documento se conoce como elemento. Por ejemplo, los elementos que componen un libro son: portada, tabla de contenidos, partes, capítulos, secciones, párrafos, palabras, títulos, notas, etc. Finalmente, las entidades XML permiten darle nombre a un trozo de información (incluso binaria) y reutilizarla en una o varias partes del documento.

Los elementos se pueden anidar, formando un árbol. Los elementos dentro de otros se llaman elementos hijos y a los contenedores, elementos padres. Sólo puede existir un único elemento raíz, también llamado elemento documento, que contiene a todos los demás [Marc00]. En el xml_eg_book el elemento con identificador book es elemento raíz. El elemento es sin duda el constructo XML más frecuente que usará un autor, sin embargo, antes de empezar a escribirlos, el autor debe proporcionar otros detalles sobre el documento XML que se explican a continuación.

5 pts.

Describa un ejemplo de una situación en que usted se hubiera beneficiado de haber representado información en XML. Puede ser un proyecto de programación que hizo en algún curso previo, o un proyecto profesional en que haya participado. Sugerencia: piense en archivos de texto sin estructura o bases de datos que haya utilizado previamente.

5 pts.

En los sistemas operativos basados en Unix, es común que los programas guarden su configuración en archivos de texto. Por ejemplo, la configuración de dispositivos y particiones se configura en /etc/fstab, los programas a ejecutar de forma periódica en /etc/crontab; el intérprete de comandos Bash guarda su configuración en un archivo oculto .bashrc en la carpeta del usuario, el servidor web Apache en varios archivos de texto en la carpeta /etc/apache2, el servidor de SSH en /etc/ssh/; entre muchos otros. Cada uno de estos programas utilizan una notación diferente para representar su configuración. Liste ventajas y desventajas si todos estos programas utilizaran notación XML para representar sus configuraciones.

5 pts.

Muchos programas registran eventos o errores en bitácoras. Por ejemplo, todas las solicitudes HTTP que el servidor web Apache recibe se registran en /var/log/apache2/access.log, y los eventos de arranque o de solicitudes al kernel de Linux se registran en /var/log/messages. Normalmentelas bitácoras son archivos de texto y cada programa utiliza su propio formato. ¿Sugeriría usted que las bitácoras se escriban en XML? Justifique su respuesta.

Encabezado de documento

Los documentos XML constan de dos partes: encabezado (head) y cuerpo (body). El encabezado de un documento XML recibe el nombre de prólogo de documento y almacena información que describe al cuerpo del documento, como la versión de XML, el tipo de documento (DTD) al que pertenece, la codificación y otros. El cuerpo del documento XML recibe el nombre de instancia de documento, que contiene los datos reales del documento.

El prólogo de un documento suele incluir la declaración de XML y la declaración del tipo de documento, en ese orden; además de otras características como comentarios e instrucciones de procesamiento. Todas son opcionales, pero se aconseja maximizar la cantidad de información en el prólogo ya que ayuda al procesamiento posterior del documento [Gold99]. El prólogo termina cuando abre la etiqueta de inicio del elemento raíz, es decir, donde inicia la instancia de documento.

La declaración XML

La declaración XML indica que el documento usa notación XML e indica la codificación del mismo. Tiene la forma mínima <?xml version="1.0"?> y no posee una etiqueta de cierre. Tiene tres atributos: la versión, la codificación y el documento autónomo:

  • La declaración de versión con el atributo version, indica la versión de XML utilizada en el documento. Normalmente "1.0".
  • La declaración de codificación con el atributo encoding, indica la codificación de caracteres del documento. Aunque los procesadores XML tienden a reconocer automáticamente la codificación, es mejor indicarlo explícitamente, por ejemplo, "UTF-8", "UTF-16" o "iso-8859-1" [Gold99]. Lo importante es que este atributo refleje realmente el tipo de codificación que usó para generar el documento.
  • La declaración de documento autónomo con el atributo standalone no se suele utilizar con frecuencia ni tampoco se recomienda su uso. Su comprensión es compleja y se explica ampliamente por Goldfarb [Gold99].

A modo de ejemplo, la declaración XML en su forma más amplia tiene la siguiente forma:

]]>
5 pts.

Suponga que un cliente tiene repetidas dificultades para localizar eficientemente activos en su empresa dispersa en varias sucursales, y le ha contratado para que le desarrolle un sistema de administración del inventario, el cual debe ser accesible vía web. Usted decide utilizar documentos XML para representar los activos y así transferirlos entre el navegador y el servidor web mediante AJAX.

Cree un documento XML vacío, que en ejercicios posteriores utilizará para ir representando el inventario. Utilizando un editor de texto, cree un archivo con extensión .xml. Incluya la declaración XML. Declare la codificación como utf-8 y asegúrese de que su editor de texto esté realmente utilizando esta codificación. Sugerencia: indague las facilidades que disponga su editor de texto para ayudar en la edición de código XML, como autocerrar etiquetas.

Guarde su documento en una carpeta xml_inventory. Para los ejercicios posteriores que utilizan este archivo, no cree uno nuevo, sino que por cada ejercicio realice al menos un commit con los cambios que haya hecho a este archivo.

La declaración del tipo de documento

Es sabido que las cartas, tesis, guiones y las guías telefónicas son documentos que tienen una estructura muy diferente. Es decir, poseen elementos distintos, cada uno con su propia distribución y orden. Se dice que son tipos de documentos distintos. En XML cada tipo de documento se define en una notación formal que plasma su estructura llamada definición de tipo de documento (DTD, Document Type Definition) y se estudiará luego. Un documento puede declarar que es de un tipo de documento particular utilizando la declaración de tipo de documento, como se hizo en la segunda línea del xml_eg_book, indicando que ese documento es de tipo "book":

]]>

Se puede pensar en un DTD como una clase en programación orientada a objetos, mientras que un documento XML que sea de ese tipo de DTD es como un objeto que instancia esa clase. El "objeto" documento XML debe cumplir a cabalidad con la estructura descrita en su DTD, cuando esto ocurre, se dice que el documento es de tipo válido o simplemente válido, de lo contrario, se dice que el documento es de tipo no válido o simplemente no válido (o incluso, inválido) [Gold99].

Un documento XML puede no tener un tipo de documento definido, es decir, carece o no cumple con un DTD, por lo que es un documento no válido pero puede respetar la sintaxis XML, en tal caso se dice que sólo es un documento bien formado (well formed). Los documentos bien formados pero no válidos (no cumplen un DTD) suelen utilizarse para documentos pequeños que deben escribirse de forma rápida. Los documentos válidos siempre están bien formados y son necesarios cuando son muy extensos o deben procesarse por algún sistema computacional [Gold99].

La declaración DOCTYPE indica el tipo de documento y además instruye al procesador de XML dónde encontrar la definición del tipo de documento (DTD), el cual puede estar escrito en el mismo documento XML o puede encontrarse en una entidad externa (un archivo en disco o red) o una combinación de ambas. Lo más común es que se encuentre en un recurso externo, como se hizo en la segunda línea del xml_eg_book, la cual instruye al procesador XML que el tipo de documento está en el archivo "book.dtd" en la misma ubicación que el documento XML. La palabra SYSTEM indica al sistema que busque el recurso especificado en el URI (Universal Resource Identifier) que le continúa. Más adelante se estudiará la nomenclatura de un DTD.

El identificador del elemento que continúa inmediatamente después de <!DOCTYPE, por ejemplo, book en el xml_eg_book, indica al procesador XML a partir de qué elemento del DTD se debe incluir, es decir, sólo se incluye el subárbol cuya raíz es precisamente ese elemento.

En XML los identificadores se usan para dar nombre a los elementos, entidades u otros. Por ejemplo, la línea 3 del xml_eg_book incluye tres identificadores: book, name y version. Los identificadores deben iniciar con una letra y pueden estar seguidos de cero o más letras o los caracteres punto, guión o dígitos. Los identificadores en XML son sensitivos a mayúsculas y minúsculas (case sensitive), esto implica, por ejemplo que book, Book y boOK se tomen como identificadores distintos. El autor puede emplear cualquier identificador válido, excepto aquellos que inician con la cadena "xml" en cualquiera de sus combinaciones de mayúsculas y minúsculas, ya que están reservados para propósitos de estandarización [Gold99].

5 pts.

Declare el tipo de documento en el archivo XML que creó en el ejercicio anterior. El nombre XXX que escoja para su DTD debe completar la frase "Este documento es un XXX", o "Este documento contiene un XXX". Luego cree un archivo de texto vacío en codificación utf-8 con nombre XXX.dtd y en la misma carpeta donde está su archivo .xml creado en el ejercicio anterior.

Elementos y atributos

Elementos

Los elementos son las partes que componen un documento. El autor debe indicar entre todo el texto que compone el documento, qué trozo es cada parte. Sintácticamente un elemento se forma marcando la parte del documento entre dos etiquetas. Es decir, el texto (datos de carácter) que conforma un elemento se encierra entre un par de etiquetas. Una etiqueta es el texto entre un par de signos "menor que" y "mayor que". Sintácticamente, un elemento es la combinación de una etiqueta de inicio (que puede tener atributos), un contenido opcional, y una etiqueta de cierre, de la siguiente forma:


contenido

]]>

Un elemento tiene dos etiquetas, una de inicio y otra de cierre (o etiqueta de fin). La etiqueta de inicio se compone de un carácter menor que (<), un identificador_etiqueta_inicio que es un simple identificador y debe respetar las restricciones de los identificadores; seguido por cero o más parejas atributo="valor"; y un carácter de mayor que (>).

La etiqueta de cierre o etiqueta de fin consta de los caracteres menor que (<) y un slash (/), luego un identificador_etiqueta_cierre que obligatoriamente debe ser el mismo identificador que el de la etiqueta de inicio del elemento y un carácter de mayor que (>). La etiqueta de cierre nunca tiene atributos.

El contenido del elemento puede ser nulo o texto XML, es decir, datos de carácter, otros elementos (y por ende etiquetas) o ambos. Si un elemento no tiene contenido se dice que es un elemento vacío, y se puede escribir en cualquiera de las dos siguientes formas:



]]>

La segunda de las formas anteriores consta de una sola etiqueta llamada etiqueta vacía, la cual finaliza en un slash (/) indicando que el elemento ha terminado. Es poco común encontrar etiquetas vacías sin atributos.

Un elemento vacío no puede tener ninguna forma de contenido, ni siquiera espacios en blanco o cambios de línea. Es decir, que si en la primera forma de las listadas anteriormente se incluyera un cambio de línea, se consideraría como un dato de carácter y ese sería el contenido del elemento. Por el contrario, si un elemento tiene contenido (no es vacío) y se omite alguna de las etiquetas (la de inicio o la de fin) el procesador XML deberá alertar de que el documento no está bien formado.

Debe quedar claro que las etiquetas no son elementos. Las etiquetas inician con un '<' y terminan con un '>', lo demás no son etiquetas [Gold99]. Los elementos tienen etiquetas y contenido. Los elementos se escriben en el documento XML y son instancias de los tipos de elementos, los cuales se declaran en la definición del tipo de documento (DTD).

Atributos

Los elementos pueden tener atributos que son "una forma de incorporar características o propiedades a los elementos de un documento" [Gold99, 353]. Los atributos se escriben en la etiqueta de inicio. Un atributo se compone de un identificador, un signo de igual (=) y un valor entre comillas dobles, simples o una combinación de ambas; siempre que la comilla que cierra sea del mismo tipo de la que abre.

content
]]>

Cuando se crea un nuevo tipo de documento, es difícil decidir qué representar con elementos y qué con atributos. Las siguientes diferencias pueden ayudar en la decisión. Más adelante se retomaráne estas diferencias a un nivel más formal.

  1. Un elemento puede tener varios elementos hijos del mismo tipo, por lo que pueden representar partes del documento que se repiten. Un atributo no puede repetirse un elemento.
  2. Se puede controlar el orden de aparición de los elementos, mientras que los atributos pueden aparecer en cualquier orden.
  3. Los elementos pueden tener estructura, como elementos hijos de distinta naturaleza. Los atributos son pequeños textos o números.
  4. Los elementos tienden a ser visibles a los lectores o consumidores del documento, los atributos tienden a estar ocultos.
20 pts.

Asuma que los activos de su sistema de inventario se relacionan jerárquicamente. Por ejemplo, un inventario para la Escuela de Computación estaría compuesto de un edificio, el cual tiene tiene salas, las salas contienen escritorios, pizarras, teléfonos, computadoras, etc; una computadora tiene procesadores, módulos de memoria RAM, discos duros, y así por el estilo. El cliente necesita además distinguir cuáles activos son fijos y cuáles no; la condición de cada activo (en funcionamiento u ocioso); el estado del activo (buen estado, defectuoso, dañado); y la posibilidad de escribir detalles, que es un texto de cualquier longitud.

La figura fig_xml_inventory muestra un ejemplo de un inventario hipotético. Los rectángulos a la izquierda representan los activos y las flechas hacia la derecha indican los responsables de cada activo. Represente en su documento XML la jerarquía de activos mostrada en esta figura. Sus elementos deben ser genéricos, de tal forma que puedan reutilizarse para inventarios de cualquier otra empresa. Sus elementos deben además contener atributos y deben asociarse reflejando la jerarquía natural del inventario. De ser posible, use identificadores en inglés para sus elementos y atributos.

Inventario de la Escuela de Computación
Inventario ficticio y reducido de nuestra escuela de computación (administración 2010-2013)
10 pts.

Su cliente necesita saber cuál o cuáles empleados están a cargo de un activo (identificados por cédula), qué rol cumplen en la empresa y tener una forma de comunicación con ellos (correo o teléfono). Represente en su documento XML los empleados de la fig_xml_inventory.

Si un activo no tiene encargados, se asume que son los mismos del activo que lo contiene; por ejemplo, los encargados del video beam VB54403 son los mismos que del laboratorio IF104. Esta característica debe reflejarse en su diseño, de tal forma que un activo podría no tener encargados declarados explícitamente. Note que existe una relación N:M entre los activos y los empleados. Para este ejercicio, usted no debe redundar los detalles de los empleados en cada activo a cargo.

Semántica de los elementos XML

Cuando se escribe un documento XML, el autor escoge los identificadores de los elementos, los atributos y la estructura a su gusto y la plasma en un DTD. Cuando una persona observa el marcado de un documento XML y se pregunta "¿qué significa esto?" o bien "¿qué aspecto tendrá después?", estará haciendo preguntas sobre su semántica. Por ejemplo, si se encuentra una etiqueta <T> esta podría indicar que se trata de un título, una tabla o alguna otra cosa [Gold99].

La computadora no puede inferir la semántica de un documento XML dado, sino que es responsabilidad del autor de la gramática describir esta semántica para que otros autores puedan comprenderlo. Esta descripción se puede realizar en un documento PDF (Portable Document Format), un libro, o cualquier otro medio de comunicación [Gold99]. Más adelante se hará en comentarios en el DTD.

Como señala Goldfarb, "lo que le interesa a la computadora es el aspecto que se supone debe tener un elemento cuando está formateado, la forma en que debe actuar si es interactivo o qué hacer después de extraer los datos. Estas cuestiones se encargan de especificarlas las hojas de estilo y los programas informáticos" [Gold99, 350].

Otras formas de marcado

Los elementos y atributos son las formas más comunes de marcado en el cuerpo del documento. Sin embargo, hay otras formas de marcado importantes: las entidades, las secciones CDATA, y los comentarios. También se considerarán en esta sección los espacios de nombres.

Entidades predefinidas

Una entidad XML es similar a una constante de un lenguaje de programación. Una constante tiene un nombre y un valor. Cada vez que se escribe el nombre de la constante, el compilador lo reemplaza por su valor. Una entidad XML es como una constante cuyo valor es cualquier trozo de texto: un carácter, un párrafo, un archivo (incluso binario), o todo un libro. A las entidades se les da nombre, y su valor se puede obtener mediante una referencia de entidad, con la notación &entidad;. Por ejemplo, &lt; en un documento XML es reemplazado por el símbolo "<". Aunque XML define muchos tipos de entidades, en este documento sólo se estudiarán las entidades predefinidas.

Las entidades predefinidas "son marcas que representan caracteres que de otro modo se interpretarían con un significado especial" [Gold99, 358], como los caracteres menor que (<) y ampersand (&). Existen cinco entidades predefinidas mostradas en la xml_predefined_entities. "Cuando el procesador XML analiza el documento, reemplaza las referencias de entidad por los caracteres reales", en lugar de interpretarlos como caracteres de marcado [Gold99, 359].

Referencia de entidad Valor
&amp; &
&lt; <
&gt; >
&apos; '
&quot; "
Entidades predefinidas en XML.

Nótese que las etiquetas se delimitan con paréntesis angulares ("<" y ">"), y las referencias a entidades entre el signo "&" y el punto y coma (";"). Se dice que el texto encerrado dentro de estos cuatro caracteres se conoce como marcado, lo restante como datos de carácter. La combinación del marcado más los datos de carácter forman el texto XML [Gold99].

10 pts.

Seleccione el texto del xml_eg_book e imprima la selección en papel. Utilizando dos resaltadores, distinga el marcado de los datos de carácter en el listado impreso. Agregue una leyenda indicando qué representa cada color. Escanee o tome una fotografía del resultado. Edite su imagen, especialmente sus dimensiones, para que ocupe poco espacio (menos de 200kB) en un formato de compresión de imágenes (por ejemplo, JPEG). Agregue su imagen a su repositorio de control de versiones.

Secciones CDATA

Aunque el uso de entidades predefinidas parece sencillo, hace que el documento XML se vuelva difícil de leer para el autor, en especial cuando se usan repetidamente, como ocurre al escribir segmentos de código fuente; por eso se crearon las secciones CDATA. Estas secciones indican al procesador XML que no interprete una parte del texto aunque contenga marcado, es decir, que lo trate como datos de carácter (character data, de ahí la contracción CDATA). La sintaxis de una sección de datos de carácter es

<![CDATA[ contenido ]]>

En el contenido puede aparecer cualquier cadena de texto, excepto la que cierra la sección CDATA (]]>) llamada CDEnd. La línea 29 del xml_eg_book usa dos entidades preestablecidas. Este mismo elemento pudo haberse escrito con una sección CDATA como

<p><![CDATA[
   Su popularidad puede deberse a su "facilidad de uso" y...
]]></p>

Comentarios

Los comentarios son cadenas de caracteres que no son parte de los datos de carácter, es decir, es parte del marcado pero que debe ser ignorado por el procesador XML. Permiten al autor hacer anotaciones que le ayuden a comprender o recordar partes del documento. El texto del comentario se introduce entre los caracteres inicio de comentario (<!--) y final de comentario (-->). Por ejemplo

]]>

Todo el texto dentro del inicio y fin de comentario será ignorado, incluyendo los caracteres de marcado (menor que, mayor que, ampersand-punto y coma), excepto la secuencia de cierre del comentario (-->). Para algunos procesadores XML, la secuencia de dos giones (--) es prohibida dentro de un comentario. Aunque no es obligatorio, se recomienda separar los dos guiones (--) del texto de los comentarios por un espacio en blanco, como se hizo anteriormente y no de la siguiente forma:

]]>
5 pts.

¿Está el siguiente documento XML bien formado? Si su respuesta es negativa, señale los errores y las líneas en que aparecen:




	
		¿A qué se refiere bootstrap del sistema operativo?
		
			
			
			
		
	
	<-- -------------------------------------------- -->
	
		¿Qué fenómeno del OS representan los filósofos comensales?
	

]]>
¿Está este documento XML bien formado? Obtener archivo.

Espacios de nombres (namespaces) [tema opcional]

Es natural querer combinar diferentes tipos de documentos. Por ejemplo, en una presentación incluir una fórmula o un gráfico, o en un documento incluir una hoja de cálculo. Si un documento XML se incrusta dentro de otro, y ambos utilizan un mismo identificador con propósitos distintos, habrá una colisión de nombres. Por ejemplo, el documento web del xml_eg_name_collision tiene una figura SVG incrustada entre las líneas 8 a 15. Ocurre una colisión con los elementos <a>: el de la línea 9 pertenece a la imagen SVG y el de la línea 17 pertenece a XHTML.






	

Dado un triángulo cualquiera:

a b c

Se puede calcular su área con la fórmula de Herón:

s = sqrt(s(s-a)(s-b)(s-c)), s = (a+b+c)/2

]]>
Ejemplo de una colisión de nombres (el elemento <a>) Obtener archivo.

Para evitar colisiones se utilizan espacios de nombres (namespaces). Los espacios de nombres permiten distinguir los elementos que pertenecen a un tipo de documento de los que pertenecen a otro tipo de documento (llamados vocabularios). Los espacios de nombres distinguen los elementos de diferentes vocabularios agregando un prefijo a los identificadores de los elementos, de la forma Prefijo:NombreElemento. El xml_eg_namespace_2 distingue el vocabulario al que pertenecen todos los elementos del documento.






	Dado un triángulo cualquiera:
	
		
			
				
			
			a
			b
			c
		
	
	Se puede calcular su área con la fórmula de Herón:
	s = sqrt(s(s-a)(s-b)(s-c)), s = (a+b+c)/2


]]>
Todos los elementos de un documento y el espacio de nombres al que pertenecen Obtener archivo.

En el xml_eg_namespace_2 se dice explícitamente a qué vocabulario o espacio de nombres pertenece cada elemento del documento. Se usó el prefijo h para identificar a los elementos que pertenencen a XHTML y el prefijo s para aquellos que pertenecen a SVG. Estos prefijos se definen con el atributo xmlns, que es una contracción de xml namespace. Recuerde que los atributos que inician con xml están reservados por el estándar.

Todos los elementos XML tienen un atributo xmlns implícito. Cuando el autor lo hace explícito, define un espacio de nombres de la forma: xmlns:Prefijo="URL". El Prefijo es sólo un identificador de uso interno en el documento. El elemento donde aparece el atributo xmlns y todos sus hijos pueden utilizar el Prefijo para hacer explícito el espacio de nombres al que pertenencen. Es decir, el elemento y sus hijos pueden utilizar la notación Prefijo:Elemento en sus etiquetas de inicio y de cierre. Se usa un URL para identificar al espacio de nombres de forma única. El URL no es necesario que exista, pues el procesador XML no lo consulta. Sólo se debe usar consistentemente para identificar al espacio de nombres y evitar que colisione con espacios de nombres definidos por otros usuarios.

Se pueden definir tantos prefijos como vocabularios se usen en el documento. En el xml_eg_namespace_2 se definieron dos prefijos: h y s, ambos en el elemento raíz html de la línea 4. Por tanto el atributo xmlns puede repetirse porque el prefijo pasa a ser parte del nombre del atributo, y también del nombre de los elementos que lo utilicen. Con el uso de ambos espacios de nombres en el xml_eg_namespace_2, es claro para un software XML distinguir que el elemento a de la línea 9 es un enlace SVG, y que el elemento a de la línea 17 es un enlace HTML.

Si al definir un espacio de nombres con el atributo xmlns se omite el prefijo, se estará indicando el espacio de nombres global. Todos los elementos hijos que no expliciten un prefijo, pertenecen al espacio global. En la línea 4 del xml_eg_namespace_3 se indica que el espacio de nombres global es XHTML, a excepción de los elementos que inician con el prefijo s, pues son elementos SVG. El espacio de nombres s se definió en el elemento svg de la línea 8, pero es más usual hacerlo en el elemento raíz (en este caso, html, de la línea 4). Este ejemplo muestra otro detalle. Los enlaces a de SVG usan el estándar XLink, el cual requiere su propio espacio de nombres (línea 9).






	

Dado un triángulo cualquiera:

a b c

Se puede calcular su área con la fórmula de Herón:

s = sqrt(s(s-a)(s-b)(s-c)), s = (a+b+c)/2

]]>
Define el espacio de nombres global como XHTML, y el espacio de nombres s como SVG. Obtener archivo.

La definición del tipo de documento (DTD)

La definición de tipo de documento (DTD, Document Type Definition) es "el conjunto de normas XML para la representación de documentos de un determinado tipo" [Gold99, 49]. En pocas palabras, el DTD describe la gramática del documento [W3C00], es decir, los tipos de elementos, sus atributos, entidades, algunas restricciones y cómo se relacionan entre ellos. Esta sección explica la sintaxis que XML utiliza para representar estos conceptos y sus relaciones en un DTD.

Un documento XML que respete cabalmente las reglas establecidas en su DTD se dice que es válido. A modo de ejemplo, el xml_dtd_book muestra el DTD referido en el libro del xml_eg_book llamado book.dtd.


































]]>
Ejemplo de una definición de tipo de documento (DTD) para representar libros.

Declaraciones de tipo de elemento

Entre otras cosas, en el DTD se escriben las declaraciones de tipo de elemento que son restricciones que deben respetar todos los elementos en un documento XML válido. Estas declaraciones tienen la siguiente sintaxis

]]>

El <!ELEMENT inicia la declaración de un tipo de elemento. El IdElemento es el identificador que aparece en sus etiquetas. Debe ser único en el DTD y respetar las restricciones de los identificadores XML. La EspecContenido se refiere a la especificación de contenido, que indica qué objetos pueden figurar en el contenido del elemento, hay cuatro posibilidades [Gold99]:

Especificación de contenido de elementos XML.
Tipo Descripción
EMPTY Impide que el elemento tenga contenido y por tanto sus etiquetas son vacías. Ejemplo: front-cover en la línea 22 en el DTD del xml_dtd_book.
ANY Puede contener cualquier elemento o carácter, lo cual no se recomienda ya que no es estructurado. Pueden ser útiles cuando se está escribiendo el DTD para lograr que los documentos sean válidos mientras se está refinando dicho DTD.
element-content Sólo puede contener los subelementos listados dentro de paréntesis en la especificación de contenido. Por ejemplo, la línea 26 del xml_dtd_book indica que los elementos chapter sólo pueden tener un título opcional y varios párrafos o secciones.
mixed-content Permite al elemento contener subelementos, datos de carácter (#PCDATA) o ambos, como ocurre con el elemento de párrafo p en la línea 31 del xml_dtd_book.

Cuando un elemento tiene subelementos (o elementos hijos) en el contenido (últimos dos casos de la lista anterior), es necesario especificar un modelo de contenido (content model), que establece el orden y número de apariciones de los subelementos.

El orden de los elementos hijos se establece con los caracteres coma, barra vertical (|) y paréntesis. Una secuencia de subelementos separados por coma indica que tales subelementos deben aparecer y en el mismo orden. La barra vertical indica que debe aparecer sólo uno de los dos subelementos que están en sus extremos. Los paréntesis agrupan partículas de contenido que son tratadas como unidades por los operadores anteriores, lo que permite combinarlos.

El número de apariciones de los subelementos se especifica con los indicadores de frecuencia que se escriben al final del subelemento, sin espacios en blanco y son tres. El signo de interrogación (?) indica que el elemento hijo es opcional, es decir, puede o no puede aparecer. El asterisco (*) indica que el subelemento puede aparecer 0 ó más veces (opcional y repetible). El signo de más (+) indica que el subelemento debe aparecer 1 o más veces (necesario y repetible) [Gold99].

15 pts.

Escriba la definición de tipo de documento para su inventario, es decir un archivo DTD en la misma carpeta donde se encuentra su inventario xml. Escriba en su DTD una declaración de tipo de elemento por cada uno de los que componen su inventario XML. Su especificación de contenido debe permitir jerarquías de activos de cualquier nivel de profundidad. Es decir, los activos deben poderse anidar.

10 pts.

Utilice comentarios en su DTD para explicar a un lector que esté empleando su especificación, qué significa cada elemento y sus atributos.

Declaraciones de la lista de atributos

Los atributos "son una forma de incorporar características o propiedades a los elementos de un documento" [Gold99, 353]. Un elemento puede tener una lista de atributos, la cual se declara en el DTD en la sección conocida como declaración de lista de atributos, usualmente después de la declaración del tipo de elemento. Tiene la siguiente sintaxis

]]>

El <!ATTLIST indica que se va a declarar la lista de atributos del elemento identificado por IdElemento. Los atributos continúan uno tras otro separados por espacios en blanco, sin impotar si son cambios de línea o no. Cada declaración de atributo se compone de un identificador (IdAttN), el tipo de datos (TipoAttN), y el valor por defecto (DefaultValueN). IdAttN indica el nombre del atributo; debe ser un identificador válido y no es obligatorio que sea único en el documento. El tipo del atributo TipoAttN puede ser alguno de los siguientes

Tipos de atributos en un DTD.
Tipo Descripción
CDATA Datos de carácter. Permite casi cualquier cadena de caracteres.
NMTOKEN Name token. Sólo permite letras, números y algunos caracteres especiales, como los que se utilizan para declarar identificadores, pero no obliga a que sea único en el documento.
NMTOKENS Una lista de name tokens.
(a|b|c|d) Enumerados. El atributo sólo puede tomar uno de los valores indicados en la lista dentro de paréntesis, los cuales se separan por barras verticales (|); por ejemplo el atributo type en la línea 29 del xml_dtd_book.
ID Identificador. Declara que el atributo es un identificador único, es decir, su valor debe cumplir con las restricciones de los identificadores y en el documento XML no puede haber dos o más atributos con el mismo valor.
IDREF Referencia a un identificador. Declara que el atributo tiene como valor una referencia a un identificador existente. Su valor puede repetirse muchas veces en el documento XML pero debe respetar las restricciones de los identificadores.
ENTITY Referencia a una entidad (o atributos de entidad). El valor del atributo debe ser el nombre de una entidad existente en el documento XML.

El DefaultValueN en la declaración de la lista de atributos indica si el atributo se puede omitir o no, y el valor por defecto en caso de que se omita. Puede tomar tres variantes:

Valores por defecto de atributos en un DTD.
Tipo Descripción
#REQUIRED Indica que el atributo es requerido y no se puede omitir, por tanto no tiene un valor por defecto. Son ejemplos name y version de book en el xml_dtd_book.
value Un valor que está en el dominio de valores permitido por el tipo de atributo. Indica que ese será el valor que el procesador XML tome si el autor no especifica uno en el documento. Por ejemplo, según la línea 29 del xml_dtd_book, si el autor no especifica el tipo del capítulo, el procesador XML asumirá que se trata de un capítulo de contenido y no uno preliminar.
#IMPLIED Permite al autor omitir el valor del atributo pero sin forzar a escribir un valor por defecto determinado. El procesador XML asignará algún valor que considere adecuado o lo ignora.
10 pts.

Para cada elemento que recibe atributos, escriba en su archivo DTD una declaración de lista de atributos. Trate de usar atributos identificadores (ID) y valores enumerados (a|b|c|d) siempre que sea posible. Al menos debe hacerlo en los dos siguientes casos:

  • Utilice valores por defecto, de tal forma que el sistema pueda asumir los valores más comunes para algunos atributos de los activos, lo cual ahorra memoria en el documento XML y hace más rápido el procesamiento (parsing) del mismo.
  • Obligue al analizador XML (XML parser) a considerar como no válido, un inventario que contenga activos a cargo de empleados que no existen en la compañía.
10 pts.

Asegúrese de que su documento XML es válido ante el DTD que escribió. Utilice un analizador XML genérico (XML parser). A modo de sugerencia puede emplear el Gnome XML C parser. Si utiliza alguna distribución de Linux instale el paquete libxml2-utils, y emita el comando

xmllint --valid --noout /path/to/file.xml

Si su documento XML es válido, el comando anterior no generará salida en pantalla. Si utiliza Windows, puede descargar los binarios provistos por Igor Zlatkovic, descomprimirlos y mover los archivos de las subcarpetas bin\ a una carpeta incluida en su variable ambiente %PATH%. Luego puede utilizar una línea de comandos para emitir el comando previo, o si trabaja con Notepad++ instalar el XML Tools Plugin, el cual agregará opciones de menú para validar desde el editor.

Elementos versus atributos

No es trivial decidir qué aspectos del mundo real deben modelarse como elementos y cuáles como atributos. Tampoco existe un diseño mejor que otro. El autor debe escoger alguna convención que sea coherente y escribir un DTD para obligar a todos los documentos del mismo tipo a cumplir con el diseño escogido. Aunque no hay ninguna regla para decidir qué debe modelarse como un elemento o un atributo, Goldfarb sugiere las siguientes ideas.

Los atributos no pueden contener "subatributos" ni elementos, sino que son pequeños trozos de texto sin estructura o listas de condiciones. Por tanto, si algo del mundo real contiene otras partes que también deben modelarse, debe hacerse con elementos y no con atributos. Los atributos se usan para añadir poca información, sencilla y sin estructura [Gold99].

Los elementos deben respetar el orden y el número de ocurrencias descritos en el DTD, mientras que los atributos pueden aparecer en cualquier orden y no pueden repetirse. Por esto, las "cosas" que deben repetirse o que respetan cierto orden deben modelarse como elementos y no como atributos [Gold99].

Si las ideas anteriores no son criterio suficiente, puede usarse la siguiente heurística. Los elementos se utilizan para representar partes de los objetos, o datos que son parte del contenido principal, y deben aparecer en todas las impresiones o interpretaciones del documento. Los atributos se utilizan para representar propiedades de los objetos, es decir, información sobre los datos reales (metadatos) y que no necesariamente debe imprimirse [Gold99].

25 pts.

Su especificación para representar inventarios debe ser genérica. Es decir, muchas empresas de distinta naturaleza podrían utilizar su notación para representar sus respectivos inventarios, y su DTD debe ser capaz de representarlos sin tener que incluirle modificaciones. De esta forma, usted puede publicar su DTD en algún servidor web y quienes empleen su especificación, incluirían el DTD oficial en sus documentos XML (tal como ocurre con el DTD de XHTML, por ejemplo).

Para probar la generalidad de su DTD, cree otro documento XML y represente el inventario de la fig_xml_inventory_transp. Verifique que su documento es válido ante su DTD.

Inventario de una compañía de transportes
Inventario reducido de una compañía hipotética de transportes

Entidades XML [tema opcional]

Las entidades "permiten al documento dividirse en varios objetos de almacenamiento y son herramientas importantes para volver a utilizar y mantener el texto... Una entidad es como una abreviatura y se utiliza como una forma corta de algunos textos. La abreviatura se llama nombre de la entidad y la forma larga contenido de la entidad. El contenido puede ser tan corto como un carácter o tan largo como un capítulo" [Gold99, 389].

Las entidades se utilizan con referencias de entidades, cuya sintaxis consiste en escribir el nombre de la entidad entre los caracteres ampersand (&) y punto y coma (;). Cuando el procesador XML encuentra una referencia de entidad, la reemplaza por el contenido de la misma, proceso conocido como inclusión. Las entidades se crean con declaraciones de entidad, con una de las dos siguientes notaciones, donde los corchetes indican opcional:


]]>

Hay tres criterios para clasificar entidades y por tanto, 8 combinaciones de las cuales 5 son válidas. Los criterios son

  • Analizables o no analizables
  • Internas o externas
  • Generales o parámetro

Las entidades cuyo contenido es texto XML que debe ser analizado por el procesador XML reciben el nombre de entidades analizables (parsed entities). Si el contenido de la entidad es código ajeno a XML (como imágenes o texto puro) que no debe analizarse, se denomina entidades no analizables. Las entidades no analizables terminan en NDATA seguido por un indicador del formato, como ocurre con cedula en el xml_entity_examples. Las entidades que no se declaran con NDATA son analizables.

Las entidades externas son aquellas cuyo contenido está en un recurso fuera de la declaración de la entidad, y por tanto debe proveerse un URL hacia ese recurso precedido por la palabra SYSTEM o PUBLIC, como ocurre con cap01 y cedula en el xml_entity_examples. Mientras que el contenido de las entidades internas está escrito en la misma declaración de la entidad entre comillas, como ocurre con adn y frase en el xml_entity_examples.

Reciben el nombre de entidades generales aquellas que se pueden referir en cualquier lugar del documento XML, como ocurre con &adn; del xml_entity_examples y las entidades predefinidas, como &amp; que son declaradas por el procesador XML. Las entidades que sólo se pueden referir dentro del DTD se conocen como entidades parámetro. Es decir, son de uso exclusivo del DTD y no se pueden referir desde el documento XML. Se declaran anteponiendo un % y se referir usando la notación %IdEntidad; en lugar de &IdEntidad; como ocurre con %SectionType; en las líneas 1 y 40 del xml_dtd_book.


no tienes una solución sos parte de lo que criticas">


]]>
Contenido de una página web hipotética

Los identificadores externos "hacen referencia a información que se encuentra fuera de la entidad en la que tienen lugar" [Gold99, p404]. Existen dos tipos, los identificadores de sistemas (SYSTEM) y los identificadores públicos (PUBLIC).

Los identificadores de sistemas utilizan la palabra clave SYSTEM y se refieren a un objeto por su localización utilizando un URI (Universal Resource Identifier). Pueden ser direcciones absolutas o relativas a la ubicación de la entidad documento que contiene el identificador. La siguiente declaración referencia el recurso "http://www.serv.com/dir/cap02.xml":

]]>

Los identificadores públicos utilizan nombres declarados públicamente para referirse a la información. Estos nombres deben ser únicos en el mundo. Tienen cuatro partes separadas por dos slash (//). La primera parte es un carácter de suma (+) si la organización que publica el recurso está registrada en el ISO, sino es un carácter de menos (-), lo cual ocurre con mayor frecuencia. La segunda parte es el dueño del recurso. La tercera parte es la descripción del recurso, que permite espacios en blanco. La última parte es el lenguaje en que está escrito el recurso [Marc00]. Los dos siguientes ejemplos de declaraciones de tipo de documento emplean identificadores públicos. El primero de ellos es ficticio.



]]>

Ejercicios finales

5 pts.

Investigue la diferencia entre un conjunto de caracteres (character set) y la codificación del texto (text enconding). ¿Cómo esto afecta a los documentos XML?

30 pts. Represente en un documento XML la base de datos Universidad cuyo estado se encuentra en las siguientes tablas y su estructura en el modelo entidad-relación de la fig_xml_udatabase.

Una base de datos Universidad
Una base de datos Universidad
Estudiante
Carné Nombre Promedio
a45891 Eliécer Montero 7.14
a98765 Yanet Arias 8.96
b10976 Anais Solano 8.30
Profesor
Cédula Nombre
109830876 Edgar Casasola
208431187 Maureen Murillo
135900821 Francisco Arroyo
110101101 Jeisson Hidalgo
Curso
Sigla Nombre Créditos
CI-1101 Programación I 4
CI-1201 Programación II 4
CI-1320 Redes de Computadoras I 5
CI-2413 Desarrollo de aplicaciones web 4
Requisito
Curso Requisito
CI-1201 CI-1101
CI-2413 CI-1201
CI-2413 CI-1320
Grupo
Curso Numero Anno Semestre Horario Aula Profesor
CI-1101 04 2011 1 KV13-15 301IF 109830876
CI-1101 08 2011 1 KV07-09 304IF 208431187
CI-1320 01 2011 1 KV17-19 303IF 135900821
CI-2413 01 2011 1 KV15-17 305IF 110101101
Matricula
Estudiante Curso Grupo
a45891 CI-1101 04
a45891 CI-1320 01
a98765 CI-1320 01
b10976 CI-2413 01
15 pts.

Escriba una definición de tipo de documento para representar la base de datos Universidad. Asegúrese de que el documento que escribió en el ejercio anterior sea válido ante este DTD.

10 pts.

Si no lo hizo, trate de desnormalizar las relaciones Requisito y Matricula en su documento XML de la base de datos Universidad. Es decir, estas relaciones no deben aparecer como una lista de elementos, sino como hijos de otros elementos. Actualice el DTD y asegúrese de que el nuevo documento XML sea también válido. ¿Se puede también desnormalizar la entidad débil Grupo?