1. Universidad Nacional de Misiones
Facultad de Ciencias Exactas, Químicas y Naturales
Tesis de grado Licenciatura en Sistemas de Información
Diseño de una interfaz de consulta a db4o basada en
XQuery
Autor:
Sergio Fabián Vier
Tutores:
Mg. Javier Bazzocco
Ing. Ruben M. Castaño
Año 2009
2. Temario de la presentación
1. Alcance del trabajo
2. Revisión de la Literatura
3. Instrucciones de XQuery
4. API de Consultas SODA
5. Convirtiendo desde Java a XML
6. Diseño de la nueva API de consulta
7. Funcionalidades de la nueva API de consulta
8. Elementos Finales
Sergio Fabián Vier 2 de 26
3. Alcance del trabajo
Descripción del problema
➔ ¿Por qué XML?
● Demanda creciente de tecnologías estandarizadas que
permitan el intercambio de información entre Sistemas
heterogéneos.
● Es capaz de contener información que provenga de diversas
fuentes de datos: documentos estructurados, bases de
datos relacionales y bases de objetos.
● Posee el XQuery, un lenguaje de consulta estándar,
inteligente y robusto, optimizado para consultar todos los
tipos de datos XML.
Sergio Fabián Vier 3 de 26
4. Alcance del trabajo continuación
Descripción del problema
➔ La Base de Objetos db4o
● Las Bases de Objetos han logrado establecerse como un
complemento (no como un reemplazo) a las Bases de Datos
Relacionales para la resolución eficiente del desfasaje
Objeto-Relacional.
● Solución de persistencia embebida enfocada en dispositivos
móviles, paquetes de software, sistemas de control de tiempo
real, y sistemas con un elevado tráfico de información.
No se ha integrado dentro de db4o una interfaz de consulta
estandarizada como XQuery.
Sergio Fabián Vier 4 de 26
5. Alcance del trabajo continuación
Objetivo General
Diseñar una interfaz o API (Application Programming Interface)
de consulta nativa a la base de objetos db4o, capaz de
procesar el lenguaje XQuery. Debe permitir recuperar objetos
persistentes en formato de documento XML y adaptarse a los
requerimientos impuestos por esta Base de Objetos y la
plataforma Java.
Sergio Fabián Vier 5 de 26
6. Alcance del trabajo continuación
Objetivos Específicos
1.Establecer el “estado del arte” mediante una extensa revisión y evaluación
bibliográfica.
2.Determinar el subconjunto de instrucciones y funciones del lenguaje XQuery
que serán utilizadas para poder realizar consultas sobre Documentos XML.
3.Analizar la arquitectura del motor db4o, en especial determinar el
comportamiento del contenedor de consultas (ObjectContainer).
4.Definir reglas de correspondencia que permita determinar el mapeo de tipos
de datos, así como las estructuras existentes, entre objetos de Java y XML.
5.Plantear una estrategia clara para la conversión de las instrucciones XQuery a
las construcciones existentes que brinda la API de consulta S.O.D.A.
6.Mediante el análisis de características y restricciones de la API de consulta
S.O.D.A, modelar la API que implemente el subconjunto de instrucciones
XQuery.
Sergio Fabián Vier 6 de 26
7. Revisión de la Literatura
XML
Es un lenguaje de marcas o etiquetas flexible el cual
permite crear formatos de intercambio de información
y compartir tanto el formato como los datos.
➔ Es posible almacenar y organizar una gran
cantidad de información en forma personalizada.
➔ Ofrece muchas maneras de chequear la calidad del
contenido de un documento.
➔ Es un estándar de la W3C, abierto y evolutivo.
Sergio Fabián Vier 7 de 26
8. Revisión de la Literatura continuación
XQuery
El XML Query es un lenguaje funcional estandarizado
por el W3C, que permite realizar consultas sobre
colecciones de datos expresadas en XML.
➔ Permite seleccionar elementos XML, transformarlos,
realizar cálculos, y retornar los resultados en una
estructura a elección.
➔ Es flexible ya que está basado en expresiones
combinables entre si.
➔ La expresiones FLWOR, nucleo de XQuery, son
similares a lo que ofrece el SQL.
Sergio Fabián Vier 8 de 26
9. Revisión de la Literatura continuación
db4o
La librería db4o que significa databases for objects, es una Base de
Objetos basada completamente en el modelo orientado a objetos
de la programación.
➔ Diseñada para ser simple, posibilita la persistencia transparente.
➔ Provee un entorno de cero-administración.
➔ Posee tamaño reducido, bajo consumo de memoria y un alto
desempeño.
➔ Facilita la tarea de refactorización aplicaciones orientadas a
objetos.
➔ Posee varios lenguajes de consultas: SODA, QBE, Native Query.
Sergio Fabián Vier 9 de 26
10. Instrucciones de XQuery
Entre las instrucciones disponibles encontramos
➔ Expresiones XPath
doc(“un.xml”) – “//” y “/” [@attr = “dat”]
➔ Agregando atributos y elementos a resultados
element – attribute – “{}”
➔ Expresiones FLWOR
for – let – where – order by – return
➔ Funciones build-in
sum – min – max – avg
Sergio Fabián Vier 10 de 26
11. Instrucciones de XQuery
Expresiones FLWOR
➔ Tienen una funcionalidad similar a las distintas cláusulas de
una sentencia SQL (select, from, where, order by).
➔ Es la estructura central (pero no la única) que dispone XQuery
para realizar consultas.
➔ Permite manipular colecciones de datos XML en forma iterativa.
En este trabajo, el procesamiento de instrucciones XQuery
toma estas expresiones como base de la técnica de
conversión.
Sergio Fabián Vier 11 de 26
12. API de Consultas S.O.D.A.
Provee clases para ejecutar consultas complejas en una
base de objetos. La idea básica de SODA es construir un
grafo, el cual es usado para expresar una consulta
dinámica y crearla en tiempo de ejecución.
➔ Mínimo número de llamadas a la API necesarias para
crear una consulta.
➔ No requiere un analizador de consultas.
➔ Basada en Nodos, de fácil recorrido y manipulación.
Sergio Fabián Vier 12 de 26
13. API de Consultas S.O.D.A. continuación
Algunas equivalencias entre instrucciones XQuery – SODA
Sergio Fabián Vier 13 de 26
14. Convirtiendo desde
Java a XML
El data binding o mapeo de componentes XML
desde y hacia el modelo de objetos de Java.
Esta trabajo está centrado en la técnica de marshalling.
Sergio Fabián Vier 14 de 26
15. Convirtiendo desde
Java a XML continuación
➔ Esta técnica tiene que ser no intrusiva respecto
al modelo de objetos.
➔ Se consideran solo tipos de datos primitivos en
Java que tienen equivalentes en XML.
La técnica de marshalling propuesta hace uso
de la característica de reflexión del lenguaje
Java.
Sergio Fabián Vier 15 de 26
16. Diseño de la nueva
API de consulta
Restricciones de Diseño
➔ Impuestas por el entorno de ejecución
1.Tamaño reducido y de bajo consumo de recursos.
2.Autonomía y cero administración.
➔ Impuestas por la base de objetos
1.Alto desempeño y confiabilidad.
2.Portabilidad entre plataformas.
3.Facilidad de uso e implementación.
4.No se realizan modificaciones a los objetos.
Sergio Fabián Vier 16 de 26
17. Diseño de la nueva
API de consulta continuación
Integración dentro de db4o
Sergio Fabián Vier 17 de 26
18. Diseño de la nueva
API de consulta continuación
Modelo propuesto
Sergio Fabián Vier 18 de 26
19. Diseño de la nueva
API de consulta continuación
Flujo del proceso de ejecución de consultas
1. Iniciación de la API.
2. Generar el plan de ejecución.
3. Ejecución del plan.
4. Enlazar los resultados ´
y generar XML.
´
Sergio Fabián Vier 19 de 26
20. Funcionalidades de la nueva
API de consulta
De cara al usuario
➔ El uso de una fachada simplifica el uso de la API.
➔ Las referencias múltiples encontradas en el modelo de
objetos son mantenidas.
➔ Los objetos son serializados a XML sin la necesidad
de especificar cómo.
Internamente
➔ Flujo de ejecución guiado por un planificador,
encargado de generar el plan de ejecución.
Sergio Fabián Vier 20 de 26
21. Funcionalidades de la nueva
API de consulta continuación
Plan de ejecución, el proceso de transformación de XQuery
Sergio Fabián Vier 21 de 26
22. Funcionalidades de la nueva
API de consulta continuación
Utilización de la API de consulta
➔ Tres interfases: XQuery, XSet y ExtObjectContainer.
Ejemplo de uso con una consulta XQuery
String xquery = “for $prod in doc('catalogo.xml')//producto“ +
“let $prodDept := $prod/@departamento“ +
“where $prodDept='ACC' or $prodDept='FEM'“ +
“return $prod/nombre”;
...
ExtObjectContainer db = Db4o.openFile(ruta); // conectar la db
XQuery xq = db.xquery(); // crear una instancia
xq.setXQuery(xquery); // asignar la consulta
XSet result = xq.execute(); // ejecutar la consulta
System.out.println(result.getXml()); // procesar el resultado
Sergio Fabián Vier 22 de 26
23. Elementos Finales
Discusión de los Resultados
A favor:
➔ Diseño de API nativo y unificado a db4o.
➔ Bajo consumo de recursos.
➔ Proceso de conversión de instrucciones equivalente.
➔ No condiciona el entorno de ejecución de db4o.
En contra:
➔ El proceso de data binding diseñado, deja de lado el soporte de
ciertas instrucciones Java.
➔ Las consultas complejas pueden estar limitadas por el soporte
de la API.
Sergio Fabián Vier 23 de 26
24. Elementos Finales continuación
Conclusiones
➔ La API propuesta es viable de implementar en
entornos con estrictos requerimientos en consumo de
recursos computacionales, pero no así en los que se
dispone de mayores márgenes de los mismos.
➔ En entornos de altas prestaciones, igualmente puede
pesar más el buen comportamiento que tendría la API
sobre grandes colecciones de objetos bajo la base de
objetos db4o.
Sergio Fabián Vier 24 de 26
25. Elementos Finales continuación
Trabajo Futuro
➔ Implementación de la API diseñada.
➔ Soporte de XML Schema, generarlo en base al
modelo y operar con él.
➔ Soporte de nuevas instrucciones XQuery propuestas:
actualización de XML vía XQuery Update.
Sergio Fabián Vier 25 de 26