# Base de datos XML

Una base de datos XML constituye un sistema software que da persistencia a datos almacenados en formato XML. Estos datos pueden ser interrogados, exportados y serializados. Las bases de datos XML están generalmente asociadas con las bases de datos documentales.
Existen dos grandes clases de bases de datos XML:
* XML habilitado: éstas bien pueden mapear XML en estructuras tradicionales de bases de datos (como las relacionales), aceptando XML como entrada y formateando en XML la salida, o más recientemente soportando tipos XML nativos en la propia base de datos. Esto implica que la base de datos procesa el XML internamente (lo opuesto a soportarlo mediante middleware).
* XML nativo (NXD): el modelo interno de estas bases de datos usa documentos XML como la unidad elemental de almacenamiento, los cuales no han de almacenarse necesariamente en formato de texto.

## Bases de datos habilitadas XML

Típicamente ofrecen alguna de las siguientes aproximaciones para almacenar XML en la estructura relacional clásica:
* El XML se almacena en un campo CLOB (Character large object)
* El XML se desgaja en una serie de tablas según un esquema
* El XML se almacena de forma nativa como tipo XML según define ISO
Entre los SGBD que soportan ISO XML están:
* IBM DB2 (XML puro)
* Microsoft SQL Server
* Oracle Database
* PostgreSQL
Típicamente una base de datos habilitada XML se adapta mejor allí donde la mayoría de los datos no están en XML, para aquellos datos en los que la mayoría están en XML, una base de datos nativa XML se adaptará mejor.

### Ejemplo de consulta XML en IBM DB2 SQL
## Bases de datos nativas XML

El término "base de datos nativa XML" (NXD) puede llevar a confusión. Muchas NXDs no funcionan como bases de datos independientes, y no almacenan el texto nativo en XML.
La definición formal de la iniciativa XML:DB (que parece inactiva desde 2003) afirma que:
* Define un modelo (lógico) para un documento XML —contrapuesto a los datos en ese documento— y almacena y recupera documentos según ese modelo. Como mínimo el modelo debe incluir elementos, atributos, CDATA y orden de los documentos. Ejemplos de estos modelos incluyen el modelo de datos XPath, XML Infoset y los que implica el DOM y los eventos en SAX 1.0.
* Tiene un documento XML como su unidad (lógica) fundamental de almacenamiento, del mismo modo que una base de datos relacional lo tiene con la fila.
* No necesita basarse en ningún modelo de almacenamiento físico particular. Por ejemplo las NXD puede usar estructuras relacionales, jerárquicas u orientadas a objetos, o usar un formato de almacenamiento propietario (como índices o ficheros comprimidos).
Además, muchas bases de datos XML databases proporcionan un modelo lógico de agrupar documentos, llamada "colecciones". Las bases de datos pueden establecer y gestionar muchas colecciones al mismo tiempo. En algunas implementaciones puede existir una jerarquía de colecciones, de modo análogo a la estructura de directorios de un sistema operativo.
Todas las bases de datos XML soportan al menos una sintaxis de interrogación. Al menos casi todas soportan XPath para realizar preguntas a documentos o colección de ellos. XPath provides a simple pathing system that allows users to identify nodes that match a particular set of criteria.
Además de XPath, muchas bases de datos XML soportan XSLT como método para transformar documentos o resultados obtenidos de la base de datos. XSLT proporciona un lenguaje declarativo escrito con gramática XML. Con él define una serie de filtros XPath que pueden transformar documentos XML en otros con otro formato, como texto plano, XML o HTML.
Las bases de datos XML suelen interrogar mediante XQuery. XQuery incluye XPath como método de selección de nodos, pero de modo extendido que da capacidad de transformación. A veces los usuarios se refieren a su sintacis como FLWOR al poderse incluir en la pregunta las siguientes claúsulas: 'for', 'let', 'where', 'order by' y 'return'. Los fabricantes de SGBD relacionales -que tradicionalmente sólo proporcionan mecanismos SQL- ahora incluyen mecanismos híbridos SQL-XQuery. Esto permite interrogar los datos XML de manera análoga a los relacionales, en la misma sentencia. Esto permite combinar datos XML y relacionales.
La mayoría de bases de datos XML soportan un API neutral común llamado XQJ API. Este fue desarrollado por JCP como interfaz estándar de una fuente de datos XML/XQuery, permitiendo a los desarrolladores java realizar preguntas de acuerdo a la especificación W3C XQuery 1.0. En definitiva el XQJ API representa a las bases de datos XML lo mismo que representa el API JDBC a las bases de datos relacionales y SQL.

### Listado de motores y lenguajes soportados

| Denominación | Licencia | Lenguaje | XQuery 3.0 | XQuery Update | XQuery Full Text | Extensiones EXPath | Extensions EXQuery | XSLT 2.0 |
| BaseX | Licencia BSD | Java | Sí | Sí | Sí | Sí | Sí | Sí |
| eXist | Licencia LGPL | Java | Parcial | Propietario | Propietario | Sí | Sí | Sí |
| MarkLogic Server | Comercial | C++ | Parcial | Propietario | Propietario | No | No | Sí |
| Sedna | Licencia Apache | C++ | No | Sí | Sí | No | No | No |
| plataforma 28msec | Motor: Licencia Apache, Almacenamiento: Comercial | C++ | Parcial | Sí | Sí | Sí | Sí | No |
| MonetDB/XQuery | Licencia MonetDB (tipo Mozilla) | C | ? | ? | ? | ? | ? | ? |