XML: Extensible Markup Language (Lenguaje de Marcas Extensible)

Tomado del Core Java y del capítulo 2 del este tutorial sobre J2EE.
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 mexclar rótulos como en <message> .... <text> .... </message> ....</text>
Sí podemos usar un rótulo que está sólo. 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 lso 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.