XML: Extensible Markup Language (Lenguaje de Marcas Extensible)
XML
es un estándar para el intercambio de información, en
particular en la web. Este lenguajes usa rótulos como en HTML,
pero en este contexto se conocen como marcas. A diferencia con HTML,
las marcas en xml identifican los datos y no la forma como deben ser
desplegados.
Introducción a XML
Es común encontrar archivos
de configuración o inicialización con información del tipo (parte del
archivo en /etc/X11/xorg.conf):
Section "Files"
EndSection
Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us"
EndSection
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection
También del tipo:
fontname=Times Roman
fontsize=12
windowsize=400 300
color=0 50 100
Si
bien el formato de xorg.conf es más flexible, en general este tipo de
archivos no poseen mayor estructura para representar jerarquías de
datos (abstracciones de mayor nivel). También se crean problemas cuando
los nombres se repiten. Para resolver este problema podemos usar
nombres más largos como en:
title.fontname=Helvetica
title.fontsize=36
body.fontname=Times Roman
body.fontsize=12
XML resuelve este problema porque permite expresar jerarquias flexiblemente. Para el último caso se vería como:
<configuration>
<title>
<font>
<name>Helvetica</name>
<size>36</size>
</font>
</title>
<body>
<font>
<name>Times Roman</name>
<size>12</size>
</font>
</body>
<windows>
<width> 400 </width>
<height> 300 </height>
</windows>
<color>
<red> 0 </red>
<green> 50 </green>
<blue> 100 </blue>
</color>
<menu>
<item> One </item>
<item> Two </item>
<item> Three </item>
</menu>
</configuration>
Esta notación permite mayor flexibilidad y dar jerarquía a los datos.
Supongamos
que debemos generar un archivo de datos de salida. Si la salida es de
texto, lo más común es organizar el archivo en líneas con la
información en columnas usando algún tipo de separador.
En una aplicación donde necesitemos almacenar mensajes, en lugar de usar esquemas similares a los primeros, podemos usar:
<message>
<to>you@yourAddress.com</to>
<from>me@myAddress.com</from>
<subject>XML Is Really Cool</subject>
<text>
How many ways is XML cool? Let me count the ways...
</text>
</message>
Si
poseemos algún API para leer las marcas que usemos, será simple obtener
las partes de nuestro mensaje en forma estructurada y sin mayor trabajo
para el programador. Además conociendo las marcas usadas cualquier
aplicación puede leer este archivo.
En XML los rótulos también pueden tener atributos como en:
<message to="you@yourAddress.com" from="me@myAddress.com"
subject="XML Is Really Cool">
<text>
How many ways is XML cool? Let me count the ways...
</text>
</message>
Debido
a que podemos usar rótulos o atributos, hay varias formas para diseñar
la estructura del archivo. En la referencia se pueden ver
recomendaciones para tal diseño.
XML exige que los archivos estén
bien formados. Esto es si usamos el rótulo <message> debemos
incluir el rótulo </message>. Además no podemos mezclar rótulos
como en <message> .... <text> .... </message>
....</text>
Sí podemos usar un rótulo que esté solo. En ese
caso usamos <rótulo/>, alternativamente podríamos haber usado
<rótulo></rótulo>.
Los comentarios los ponemos con:
<!-- This is a comment -->
Archivos XML simpre parten con un prólogo que quivale a los encabezados de html. El pŕologo mínimo es:
<?xml version="1.0"?>
Esta declaración puede tener más información como en:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
Hojas de Estilo
XML
describe los datos; cuando necesitamos desplegarlos, podemos hacerlo en
conjunto con hojas de estilo (stylesheet). Para esto existe un
estándar, XSL Extensible Stylesheet Language, para indicar el estido de
despliegue de los datos.
Document Type Definition (DTD)
La
DTD define los tipos de rótulos, atributos y entidades permitidas, y
puede expresar algunas limitaciones para combinarlos. Los documentos
XML que se ajustan a su DTD son denominados válidos.
Ejemplo: Spongamos que tenemos un archivo xml para almacenar precios de tipos de café:
<priceList>
<coffee>
<name>Mocha Java</name>
<price>11.95</price>
</coffee>
<coffee>
<name>Sumatra</name>
<price>12.50</price>
</coffee>
</priceList>
La definición del tipo de documento podría ser:
<!ELEMENT priceList (coffee)+>
<!ELEMENT coffee (name, price) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT price (#PCDATA) >
Así queda claro que una lista de precios contiene uno o más (+) datos
que cumplen con la estructura para coffee. Cada coffee a su vez queda
descrito por la secuencia name y price. Finalmente tenemos que name y
price son de tipo caracter (#PCDATA).