Para almacenar documentos XML tenemos las siguientes opciones:
- Almacenamiento directo del fichero. Es una opción pobre ya que las operaciones que podemos hacer sobre ellos son limitadas, las que proporcione el sistema de archivos.
- Almacenar el documento en una base de datos existente (base de datos relacional, orientada a objetos u objeto-relacional). En este caso existen las siguientes posibilidades:
- Directamente como una columna tipo binario grande (BLOB) dentro de una tabla. En este caso se almacena el documento intacto. Es una buena estrategia si el documento XML contiene contenido estático, que solo será modificado cuando se reemplaza el documento completo. Almacenar el documento completo en formato de texto es fácil de implementar dado que no se necesita mapeo o traducción, pero limita las consultas y búsquedas de contenido.
- Mediante mapeo basado en tablas, o basado en objetos. En ambos casos hay que realizar una transformación para ajustarlo a la estructura de la BD antes de almacenarlo, y normalmente esto conlleva prescindir de cierta información, que supondrá que el documento y su formato no se almacena y recupera de manera intacta. Además, en el caso de documentos centrados en texto, no podemos controlar todas las posibles estructuras del documento, y por tanto realizar un mapeo sobre la base de datos será prácticamente imposible.
- Almacenar el documento en una base de datos nativa XML. El documento, tanto si es centrado en datos como en texto, se almacena y recupera de forma intacta. Como veremos, será la mejor opción, sobre todo si el documento está basado en texto.
La siguiente imagen ampliable ilustra las anteriores opciones de almacenamiento:
En la actualidad, cada vez más, las BD convencionales ofrecen posibilidades de almacenamiento XML, por lo que se habla de BD XML-compatible o BD XML-enabled. Por tanto, podemos hablar de dos tipos de Sistemas de Bases de Datos que soportan documentos XML:
- BD XML-compatibles: desglosan un documento XML en su correspondiente modelo relacional o de objetos.
- BD XML Nativas: respetan la estructura del documento, permiten hacer consultas sobre dicha estructura y recuperan el documento tal y como fue insertado originalmente
Las principales diferencias entre ambos tipos de BD XML son las siguientes:
- Una BD XML nativa proporciona un modelo de datos propio, mientras que un BD XML-compatible tiene ya un modelo de datos y añade una capa de software que permite de alguna manera almacenar documentos XML y recuperar los datos generando nuevos documentos XML.
- Una BD XML nativa debe manejar todos los tipos de documentos posibles, mientras que una BD XML-compatible solo puede manejar y almacenar los documentos que encajan dentro del modelo definido para ellos.
Binary Large Objects - objetos binarios grandes
El mapeo objeto-relacional es una técnica de programación que permite convertir datos del sistema de tipos utilizado por los lenguajes de programación orientado a objetos al utilizado por las bases de datos relacionales.