Formato XML: Guía Técnica Completa
XML (Extensible Markup Language) es un lenguaje de marcado y formato de datos basado en texto estandarizado por el W3C en 1998 (XML 1.0) y actualizado en 2006 (XML 1.1). XML es un meta-lenguaje — en lugar de especificar un vocabulario, proporciona la sintaxis para crear lenguajes de marcado personalizados (SVG, XHTML, SOAP, RSS, Atom, GPX, KML, XML interno de DOCX).
Estructura del Documento XML
Un documento XML bien formado consta de:
<?xml version="1.0" encoding="UTF-8"?>
<libreria xmlns:dc="http://purl.org/dc/elements/1.1/">
<!-- Este es un comentario -->
<libro id="1" idioma="es" en-stock="true">
<dc:title>Cien años de soledad</dc:title>
<dc:creator>Gabriel García Márquez</dc:creator>
<precio moneda="EUR">14.99</precio>
<descripcion>
<![CDATA[Una novela que contiene <caracteres> especiales & símbolos.]]>
</descripcion>
<etiquetas>
<etiqueta>clásico</etiqueta>
<etiqueta>ficción</etiqueta>
</etiquetas>
</libro>
</libreria>
Reglas de Sintaxis XML (Bien Formado)
Un documento XML está bien formado si sigue estas reglas:
- Un elemento raíz que contiene todos los demás elementos
- Todos los elementos correctamente anidados (sin etiquetas solapadas)
- Todos los elementos cerrados (ya sea
<etiqueta></etiqueta>o autocerrantes<etiqueta/>) - Valores de atributo siempre entre comillas
- Nombres de elementos y atributos sensibles a mayúsculas/minúsculas
- No
<,&en el contenido (deben usarse entidades)
Los caracteres especiales deben escaparse como entidades predefinidas:
| Carácter | Entidad | Notas |
|---|---|---|
< |
< |
Requerido en contenido |
> |
> |
Requerido en valores de atributo |
& |
& |
Requerido en todas partes |
" |
" |
Requerido en atributos entre comillas dobles |
Lenguajes de Esquema
La validez XML (conformidad con un esquema) puede aplicarse mediante:
DTD (Document Type Definition)
<!DOCTYPE catalogo [
<!ELEMENT catalogo (producto+)>
<!ELEMENT producto (nombre, precio, descripcion?)>
<!ATTLIST producto
id ID #REQUIRED
categoria (libros|electronica|ropa) #IMPLIED
en-stock (true|false) "true">
]>
DTD está incorporado en XML, pero tiene limitaciones: sin aplicación de tipos de datos (todo es texto), sin soporte de espacios de nombre.
XML Schema (XSD)
W3C XML Schema (XSD) es el lenguaje de esquema estándar con un rico sistema de tipos:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="producto">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="precio" type="xs:decimal"/>
<xs:element name="stock" type="xs:nonNegativeInteger"/>
<xs:element name="fechaLanzamiento" type="xs:date" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
XSLT: Transformar XML
XSLT es un lenguaje declarativo para transformar XML en otro XML, HTML o texto:
# Aplicar transformación XSLT con xsltproc
xsltproc transformacion.xsl entrada.xml > salida.html
# Con Saxon (Java, soporta XSLT 2.0/3.0)
saxon entrada.xml transformacion.xsl > salida.html
XPath: Consultar XML
XPath es un lenguaje de consulta para seleccionar nodos en documentos XML:
/libreria/libro — todos los elementos libro bajo libreria
//libro — todos los elementos libro en cualquier parte del documento
//libro[@idioma='es'] — libros con idioma="es"
//libro[precio > 10] — libros con precio > 10
count(//libro) — recuento de elementos libro
Análisis de XML: Referencia de Lenguajes
# Python: ElementTree (biblioteca estándar)
import xml.etree.ElementTree as ET
arbol = ET.parse("libros.xml")
raiz = arbol.getroot()
for libro in raiz.findall("libro"):
titulo = libro.find("{http://purl.org/dc/elements/1.1/}title").text
precio = float(libro.find("precio").text)
print(f"{titulo}: {precio}€")
# xmllint: validar y formatear XML
xmllint --noout --schema esquema.xsd documento.xml # validar contra XSD
xmllint --format documento.xml # embellecer
xmllint --xpath "//libro/titulo" documento.xml # consulta XPath
# Convertir XML a JSON con python
python3 -c "import xmltodict, json, sys; print(json.dumps(xmltodict.parse(sys.stdin.read()), indent=2))" < entrada.xml
Formatos XML Comunes
- XHTML: HTML escrito como XML
- SVG: Scalable Vector Graphics (imágenes vectoriales)
- SOAP: Protocolo de Acceso a Objetos Simple (servicios web)
- RSS / Atom: Formatos de sindicación de feeds
- KML: Keyhole Markup Language (datos geográficos, Google Earth)
- GPX: GPS Exchange Format (pistas GPS)
- DOCX/XLSX/PPTX: Office Open XML (ZIP + XML)
- ODF: OpenDocument Format (LibreOffice)
- Apple plist: Lista de propiedades (configuración macOS/iOS)
Conversiones relacionadas
XML rara vez se queda en XML — casi siempre se transforma a otro formato para consumo final:
- XML a JSON — para APIs REST modernas
- XML a CSV — exportar datos tabulares a Excel
- XML a PDF — generar documentos finales con XSL-FO
- JSON a XML — interoperar con sistemas SOAP/legacy
- CSV a XML — importar datos a sistemas que esperan XML
- HTML a XML — pasar de HTML a XHTML estricto