Logo Studenta

Bases-de-datos-nativas-en-XML-sus-usos-y-aplicaciones-en-el-Web

¡Este material tiene más páginas!

Vista previa del material en texto

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Facultad de Ciencias
“Bases de Datos Nativas en XML sus usos y
aplicaciones en el Web”
Tesis profesional presentada por
Carlos Ricardo Cruz Mendoza
para obtener el t́ıtulo de Licenciado
en Ciencias de la Computación
Dra. Amparo López Gaona
Directora de Tesis
México, D.F. Enero de 2007
 
UNAM – Dirección General de Bibliotecas 
Tesis Digitales 
Restricciones de uso 
 
DERECHOS RESERVADOS © 
PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL 
 
Todo el material contenido en esta tesis esta protegido por la Ley Federal 
del Derecho de Autor (LFDA) de los Estados Unidos Mexicanos (México). 
El uso de imágenes, fragmentos de videos, y demás material que sea 
objeto de protección de los derechos de autor, será exclusivamente para 
fines educativos e informativos y deberá citar la fuente donde la obtuvo 
mencionando el autor o autores. Cualquier uso distinto como el lucro, 
reproducción, edición o modificación, será perseguido y sancionado por el 
respectivo titular de los Derechos de Autor. 
 
 
 
Gracias a todos los que hicieron esto
posible.
Índice general
1. XML 3
1.1. Conceptos generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Documentos XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3. DTD y Esquema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4. Documentos Válidos y Bien Formados . . . . . . . . . . . . . . . . . . 10
1.5. Entidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6. XSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7. Datos estructurados, no estructurados y semiestructurados . . . . . . . 13
1.8. Bases de Datos con XML . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2. Bases de Datos Nativas en XML 17
2.1. XPATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2. XQUERY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3. XPOINTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4. DOM (Document Object Model) . . . . . . . . . . . . . . . . . . . . . 25
2.5. Xindice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.5.1. Almacenamiento de Datos . . . . . . . . . . . . . . . . . . . . . 30
2.5.2. Paginación en Xindice . . . . . . . . . . . . . . . . . . . . . . . 30
2.5.3. Árboles B y B+ . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
i
ÍNDICE GENERAL ii
2.5.4. Árboles en Xindice . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.6. eXist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.7. Indexación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.7.1. Organización de los Datos e Indexamiento . . . . . . . . . . . . 44
2.8. Comparativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3. Diseño e Implementación 48
3.1. Requerimientos y Análisis . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.2. Modelado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.3. Arquitectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.4. Casos de Uso y Diagramas de Actividad . . . . . . . . . . . . . . . . . 53
3.5. Diagramas de Secuencia . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.6. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.7. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
A. Bases de Datos en XML (Habilitadas y Nativas) 70
B. Diagrama de Clases 72
Bibliograf́ıa 74
Introduccion
Antecedentes
Siempre ha habido la necesidad de comunicación entre las personas pero en el ámbi-
to de la computación ha existido un grave problema al tratar de homogenizar la manera
de intercambiar información entre sistemas. Este problema se complicó con la aparición
de Internet, donde era casi imposible intercambiar información ya que no exist́ıa un
estándar para el uso de ésta. Uno de los primeros acercamientos para solucionar esto
fue GML1 el cual trataba de solucionar el problema de transporte, modelaje y almace-
namiento de información geográfica, a través de estructuras de datos descriptivas. GML
no tuvo mucha aceptación ya que solamente resolv́ıa un problema en particular pero
sentó las bases para SGML2 , el cual como su nombre lo indica es una generalización
del GML que amplia las capacidades de este. Aunque SGML es actualmente utilizado
por ser un lenguaje de marcación muy poderoso (basta abrir una navegador para darse
cuenta de esto, ya que HTML es una derivación de SGML), no tuvo tanto auge debido
a que su forma es compleja y dif́ıcil de desarrollar.
Es por todo esto que surge XML 3 el cual es una derivación del SGML, conviertiéndolo
en una versión más ligera pero igualmente poderosa, permitiendo el almacenamiento e
1 Acrónimo de Geography Markup Language
2 Acrónimo de Standard Generalized Markup Language
3 Acrónimo de eXtensible Markup Language
1
ÍNDICE GENERAL 2
intercambio de una manera mas rápida y eficiente pero sobre todo estandarizada. Con
el auge de XML, rápidamente las bases de datos relacionales adoptaron modificaciones
para poder utilizar y almacenar este tipo de datos, obteniendo aśı las primeras exten-
siones para bases de datos relacionales, pero al no ser totalmente orientadas a XML
exist́ıan problemas para representar estructuras de tipo jerárquico.
Es por esto que surgen las bases de datos nativas en XML las cuales pueden manejar
eficientemente todas las tareas de una base de datos relacional, mas el almacenamiento
de datos en forma jerárquica de una manera más rápida y eficiente [34, 16].
Objetivos
Conocer a fondo las facilidades y ventajas que ofrecen las bases de datos nativas
en XML y aplicarlas en el desarrollo de un sistema para generar y mantener prácticas,
tareas y exámenes para el curso de bases de datos impartido en la Facultad de Ciencias,
el cual sentará las bases para futuras aplicaciones que utilicen esta tecnoloǵıa. Este
sistema será desarrollado como una aplicación web debido a las ventajas que conlleva
una aplicación de este tipo, tales como: conectividad, acceso, costo, etc.
Organización
En el Primer caṕıtulo se explicará, que es XML, sus tecnoloǵıas, usos y aplicaciones.
En el Caṕıtulo 2 se hará una revisión acerca de las tecnoloǵıas usadas, datos existentes,
algoritmos e información referente a las bases de datos nativas en XML. En el Caṕıtulo
3 se explicará el análisis, diseño, implementación y pruebas del sistema. Por último en
el Caṕıtulo 4 se resumen los conceptos de esta investigación aśı como posibles usos y
aplicaciones a un nivel superior.
Caṕıtulo 1
XML
1.1. Conceptos generales
El World Wide Consortium (W3C) define XML [1] como un lenguaje sencillo pero
muy flexible basado en “marcas o etiquetas” el cual fue definido a partir del anterior
estándar SGML, el cual al igual que XML estaba basado en marcas, pero era demasiado
extenso y poco utilizado debido a su complejidad [20].
En un principio XML surgió en base a la necesidad de solucionar los siguientes proble-
mas:
Crear un lenguaje para ser usado en Internet.
Crear un metalenguaje el cual pueda ser usado para describir otros lenguajes los
cuales resuelven otros problemas particulares (SOAP, XSL, SAX, DOM).
Ser más flexible y fácil que SGML pero a la vez ser compatible con él.
Además de que debe de cumplir con las siguientes caracteŕısticas:
Facilidad en la creación de programas que procesen documentos.
Facilidad en su lectura además de ser claros.
3
CAPÍTULO 1. XML 4
Diseño razonablemente rápido.
Diseño formal y conciso[15, 20].
1.2. Documentos XML
Los documentos XML deben tener estructura f́ısica y lógica [22, 14]. Es decir, los
documentos deben ser válidos o al menos estar bien formados (más adelante se explicaránestos conceptos).
Para que un documento XML pueda tener una estructura correcta, a su vez debe tener
una lógica en la declaración, esto es con el fin de tener coherencia al momento de
interpretar. Pero, ¿Qué significa que un documento XML esté bien formado?. Según la
especificación del W3C [2], un documento XML está bien formado si cumple con:
La regla Document, la cual consiste en que:
• Debe contener uno o más elementos. Un elemento es la unidad de creación
básica de un documento XML, la cual contiene al menos una etiqueta que
define un dato. Ejemplo de un elemento es el siguiente:
<raiz>Texto de la raiz del Documento</raiz>
• Hay exactamente un elemento, llamado ráız, el cual en ninguna otra parte
aparece en el contenido de algún otro elemento. Un ejemplo puede ser el
siguiente:
<raiz>
<etiqueta>Primer Texto de la Etiqueta</etiqueta>
<etiqueta>Segundo Texto de la Etiqueta</etiqueta>
</raiz>
Se puede notar que la etiqueta <raiz> no aparece en el contenido de las
demás sino una única vez englobandolas.
CAPÍTULO 1. XML 5
• Para el resto de elementos, si la etiqueta de comienzo está en el contenido
de algún otro elemento, la etiqueta de fin está en el contenido del mismo
elemento. Es decir, los elementos delimitados por etiquetas de principio y
final se anidan adecuadamente. Ejemplo:
<raiz>
<etiqueta>
<otraetiqueta>Texto anidado</otraetiqueta>
</etiqueta>
</raiz>
Un ejemplo sencillo de un documento XML que cumpla con la regla Document puede
ser el siguiente:
<?xml version="1.0"?>
<libro>
<autor>Rusty, E., Scout</autor>
<nombre>XML in a nutshell</nombre>
<precio tipo="pesos">200 pesos</precio>
<editorial>O’Reilly</editorial>
</libro>
Explicando el ejemplo tenemos que la etiqueta <?xml version="1.0"?> indica
que el texto es un documento XML. En la siguiente ĺınea se puede observar la etiqueta
<libro>, hay que resaltar algunos detalles importantes respecto a esta etiqueta:
Los nombres son sensibles a mayúsculas y minúsculas. Aśı un elemento denominado
“Libro” es diferente de un elemento denominado “libro”.
No se pueden utilizar caracteres como “$”, “<”, si se desea usarlos se deben escribir
como $amp, $lt, respectivamente ya que estos causaŕıan conflictos en la sintaxis
del documento; este tipo de caracteres se conocen como entidades, las cuales se
explicarán posteriormente.
Un atributo es una caracteŕıstica especial de un elemento XML. El valor del atri-
buto debe estar entrecomillado y no puede ser repetido por un elemento. Ejemplo:
CAPÍTULO 1. XML 6
<precio tipo="pesos">200</precio>
En el ejemplo tipo es un atributo del elemento precio con un valor pesos. El uso
del atributo tipo tienen sentido en el elemento precio ya que un precio puede ser
en pesos o dólares. Los atributos son opcionales.
Los nombres de elementos no pueden empezar por un número o un signo de sub-
rayado, ni por la cadena “XML”.
Los nombres de elementos no pueden contener espacios.
Respecto a la correctez del documento se debe tener en cuenta varias cosas:
• Toda etiqueta no vaćıa debe tener una etiqueta de cerrado.
• Los elementos vaćıos son aquellos que no tienen contenido dentro del docu-
mento. Ejemplo:
<imagen archivo="logo.jpg"/>
Un documento XML tiene las siguientes ventajas y desventajas:
Ventajas
Es fácil de entender y editar.
Es flexible, pues cada persona puede utilizar y crear etiquetas que necesite.
Es independiente de aplicaciones, software o formatos propietarios.
Desventajas
Falta más difusión, de hecho algunos navegadores aún no tienen soporte para
documentos XML.
CAPÍTULO 1. XML 7
1.3. DTD y Esquema
Una definición de documentos tipo, DTD1 es como su nombre lo indica una es-
pecificación de restricciones para la estructura del documento XML [3]. Es decir es la
definición para futuros documentos XML.
Una DTD describirá cada elemento dentro del documento XML, aśı como sus posibles
atributos y opcionalmente los valores de los atributos permitidos. Veamos el siguiente
ejemplo:
<?xml version="1.0"?>
<!DOCTYPE libro [
<!ELEMENT libro (autor+, nombre+ ,precio+, editorial+)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT precio (#PCDATA)>
<!ATTLIST precio tipo NMTOKEN #REQUIRED>
<!ELEMENT editorial (#PCDATA)>
]>
La etiqueta <!DOCTYPE> especifica que debe haber al menos un elemento llamado
libro, la siguiente etiqueta <!ELEMENT> indica que libro contiene cuatro elementos:
autor+, nombre+, precio+ y editorial+, los cuales son obligatorios. El nombre del
elemento seguido de un śımbolo “+” indica que puede haber más de una ocurrencia
del elemento en cuestión; existen otros signos tales como el śımbolo “?”, significa que
puede haber al menos una ocurrencia; el śımbolo “*” indica que puede haber una,
muchas ó ninguna ocurrencia.
Las etiquetas <!ELEMENT> indican que cada uno de estos elementos son de tipo PCDATA,
por último la etiqueta <ATTLIST> indica que el elemento precio contiene un atributo
llamado tipo.
A continuación se listan algunas ventajas y desventajas de la DTD:
1 Acrónimo de Document Type Definition.
CAPÍTULO 1. XML 8
Ventajas
Facilita la validación de documentos XML.
Muestra la estructura de un documento XML.
Desventajas
No siempre es necesario validar un documento XML.
No maneja tipos de datos.
No utiliza el lenguaje propio de XML.
Para resolver estos problemas la organización W3C creó otro tipo de validación mediante
Esquemas [4]. Los cuales son definiciones para validar documentos XML, mediante la
sintaxis de XML. Ejemplo de Esquema.
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3org/2001/XMLSchema">
<xs:element name="libro">
<xs:sequence>
<xs:element ref="autor" />
<xs:element ref="nombre" />
<xs:element ref="precio" />
<xs:element ref="editorial" />
</xs:sequence>
</xs:element>
<xs:element name="autor" type="xs:string">
</xs:element>
<xs:element name="nombre" type="xs:string">
</xs:element>
<xs:element name="precio" type="xs:integer">
<xs:attribute name="tipo" type="xs:NMTOKEN" use="required" />
</xs:element>
<xs:element name="editorial" type="xs:string">
</xs:element>
</xs:schema>
Este Esquema define el siguiente documento XML, aunque también podŕıa definir
otros documentos XML.
CAPÍTULO 1. XML 9
<?xml version="1.0"?>
<libro>
<autor>A.S. Tanenbaum</autor>
<nombre>Operating Systems: Design And Implementation</nombre>
<precio tipo="pesos">400</precio>
<editorial>Pretince Hall</editorial>
</libro>
En el ejemplo la etiqueta <xs:schema ...> indica que se creó un Esquema siguiendo
las especificaciones de la organización W3C para el documento XML, la siguiente ĺınea
muestra la etiqueta <xs:element ..> la cual indica que va a existir un elemento
llamado libro el cual mediante la etiqueta <xs:sequence> indicará que dentro de
libro van a existir otros elementos (autor, nombre, precio y editorial), y estas
a su vez hacen referencia a sus definiciones que, al contrario de una DTD, muestran el
tipo de datos que van a contener, ya sea una cadena, un entero u otro tipo de dato.
Los Esquemas son superiores a los DTD por las siguientes razones:
Permiten la validación de documentos XML.
Tienen la sintaxis de un documento XML.
Son más intuitivos que una DTD.
Manejan tipos de datos.
Pero el problema actual con los Esquemas, es que aunque sean superiores a las DTD,
su uso no es popular.
CAPÍTULO 1. XML 10
1.4. Documentos Válidos y Bien Formados
Un documento Válido y Bien Formado debe cumplir la regla Document, pero ¿Qué sig-
nifica que un documento sea Válido?.
Para que un documento sea Válido necesita tener una DTD o Esquema asociado al
documento para que éste valide el documento XML.
Se pueden diferenciar dos tipos de documentos XML.
Bien Formados, son aquellos que no tiene una DTD o esquema asociado, pero que
siguen la regla Document.
Válidos, aquellos documentos que siguen las reglas de una DTD ó Esquema.
Se puede afirmar que todos los documentosVálidos están Bien Formados debido a que
una DTD o Esquema sigue la regla Document.
1.5. Entidades
Las entidades sirven para incluir cualquier documento u objeto externo en un do-
cumento XML. Ejemplo:
<!ENTITY CAD "Cadena a usar en repetidas ocasiones">
Con esto se tiene una referencia a una cadena la cual cada vez que es necesitada, bas-
taŕıa con escribir &CAD para obtenerla. Otro ejemplo de entidades son los caracteres
como “&” y “<”, ya que para escribirlos en un documento XML se necesita asignarles
un “alias” como es &amp y &lt, respectivamente.
CAPÍTULO 1. XML 11
1.6. XSL
Un documento XML puede ser comprensible para gente acostumbrada a su uso,
pero para una persona sin conocimientos de XML resultaŕıa poco o nada comprensible,
además de que el usuario final de una aplicación realizada con XML no tiene porque
saber nada de XML, es por esto que se creó XSL 2 .
El World Web Consortiom (W3C) define a XSL [5] como un lenguaje para expresar
hojas de estilo, las cuales transforman un documento XML en algún formato como
HTML, PDF, etc. Debido a que XSL es un lenguaje construido especialmente para dar
formato a documentos XML con la sintaxis de los documentos XML, si bien es cierto
que existen otros lenguajes para dar formato, como por ejemplo CSS 3 [6, 21]. El cual es
un simple mecanismo para añadir estilos a documentos web, tales como fuentes, colores,
espacios. no tienen el poder de XSL, ya que XSL no solamente puede dar formato sino
realizar instrucciones para realizar operaciones mas complejas.
Documento XML al cual se le aplicará la transformación XSL.
<?xml version="1.0"?>
<libro>
<autor>Rusty, E., Scout</autor>
<nombre>XML in a nutshell</nombre>
<precio tipo="pesos">200</precio>
<editorial>O’Reilly</editorial>
</libro>
<libro>
<autor>A.S. Tanenbaum</autor>
<nombre>Operating Systems</nombre>
<precio tipo="pesos">400</precio>
<editorial>Pretince Hall</editorial>
</libro>
Documento XSL asociado al documento XML anterior:
2 Acrónimo de eXtensible Stylesheet Language.
3 Acrónimo de Cascading Style Sheets.
CAPÍTULO 1. XML 12
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org"/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<title>Ejemplo de una transformacion XML a HTML</title>
</head>
<body>
<table border="1" width="600" align"center">
<td><b>Autor</b></td>
<td><b>Nombre</b></td>
<td><b>Precio</b></td>
<td><b>Editorial</b></td>
<xsl:for-each select="//libro">
<tr>
<td><xsl:value-of select="autor"/></td>
<td><xsl:value-of select="nombre"/></td>
<td><xsl:value-of select="precio"/></td>
<td><xsl:value-of select="editorial"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
A continuación se desglosará el ejemplo. La primera ĺınea declara que el texto será un
documento XML. En la siguiente ĺınea se especifica que se trata de un documento XSL
que sigue los estándares del W3C, además de que producirá un documento HTML como
salida después de la transformación XSL.
En la ĺınea <xsl:template match="/"> se especifica a partir de donde vamos a apli-
car la transformación al documento XML, en este caso se empezó a partir del primer
elemento del documento XML.
En las siguientes ĺıneas se especifican algunos elementos necesarios para la construcción
CAPÍTULO 1. XML 13
de un documento HTML tal es el caso de la etiqueta <head> y la etiqueta <body>
las cuales crearán el encabezado y cuerpo de nuestro documento HTML final, además
de crear una tabla con 4 columnas las cuales serán llenadas con los elementos autor,
nombre, precio y editorial del documento XML.
La etiqueta <xsl:for-each select="//libro"> indica que por cada etiqueta libro
que veamos en el documento XML se realizarán las instrucciones dentro del alcan-
ce de este elemento. En este caso dentro del alcance de la etiqueta <xsl:for-each
select="//libro"> se encuentran las etiquetas <xsl:value-of select="autor"/>,
<xsl:value-of select="nombre"/>, <xsl:value-of select="precio"/> y <xsl:
value-of select="editorial"/>, las cuales colocarán el valor de estas etiquetas den-
tro del documento HTML final.
Al aplicar el documento XSL al documento XML se obtiene la siguiente tabla vista con
un interprete de HTML (por ejemplo un navegador Web).
Autor Nombre Precio Editorial
Rusty, E., Scout XML in a nutshell 200 O’Reilly
A.S. Tanenbaum Operating Systems 400 Pretince Hall
Existen más cosas relacionadas a un documento XML pero estos temas están fuera
del alcance de este trabajo [19].
1.7. Datos estructurados, no estructurados y semi-
estructurados
Una de las principales razones para utilizar una base de datos que pueda manejar
documentos XML es el poder utilizar datos semiestructurados, a diferencia de las bases
de datos relacionales que sólo usan datos estructurados.
CAPÍTULO 1. XML 14
Datos Estructurados
Son aquellos datos que tienen una estructura definida, los cuales pueden estar fuer-
temente tipificados (un dato es fuertemente tipificado si mantiene un tipo de dato,
por ejemplo al definir un número entero no se puede guardar una cadena u otro tipo
de dato en vez del número entero). Una razón por la que este tipo de datos son uti-
lizados en bases de datos relacionales es porque, pueden ser representados en forma
de registros que posteriormente formarán tablas. Ejemplo:
Nombre char(20) Precio int Editorial char(20)
Operating Systems 400 Pretince Hall
Datos no-estructurados
Son aquellos datos los cuales carecen de alguna organización, además de no estar
tipificados. Ejemplos: Texto plano, e-mails.
Datos semiestructurados
Son aquellos datos que tienen una estructura intermedia, es decir respetan una es-
tructura pero no necesariamente tienen porque estar tipificados, ejemplo: x=“1” y
x=“cadena” son válidos, sus elementos no necesariamente tiene que estar bien defi-
nidos, además de que son mas descriptivos y generales.
Los datos semiestructurados pueden ser representados como:
• Árboles
• Texto Identado
• XML
CAPÍTULO 1. XML 15
Otra observación muy importante es que cuando se tiene datos estructurados se
tienen sólo datos, cuando se tienen datos no estructurados se tiene información pero
cuando se tienen datos-semiestructurados se obtiene los mejor de ambas categorias es
decir información y datos, es por esto que al utilizar bases de datos que manejen este
tipo de datos se tiene otra ventaja sobre las bases de datos relacionales.
1.8. Bases de Datos con XML
Debido a la llegada del World Wide Web (www) a mediados de los 90′s comenzó a
existir una gran demanda para el mantenimiento de datos, información y conocimiento.
Esto ocasionó que los datos manejados en la Web con herramientas convencionales cada
vez se hiciera más dif́ıcil. Es aśı que han surgido nuevas herramientas y técnicas para el
manejo de datos [34, 23]. Unas de estas herramientas fueron los sistemas manejadores
de bases de datos con XML. De forma muy general las bases de datos con XML se
podŕıan agrupar en dos tipos.
XML Enabled Databases (Bases de Datos habilitadas para XML)
Las bases de datos habilitadas para XML desglosan la información de un documento
XML en su correspondiente esquema relacional o de objetos. Contienen extensiones
para transferir datos entre documentos XML y sus propias estructuras. Ejemplos de
este tipo de manejadores de bases de datos son: Access, FoxPro, SQL Server, Sybase
ASE.
En el Apéndice A.1. se encuentra un listado de bases de datos habilitadas para XML
[7].
XML Native Databases (Bases de Datos nativas en XML)
La Organización XML:DB Initiative for XML Databases [8] define a las bases de
CAPÍTULO 1. XML 16
datos nativas en XML como modelos lógicos para documentos XML los cuales alma-
cenan y recuperan documentos de acuerdo a dicho modelo. Como mı́nimo los modelos
deben incluir elementos, atributos y un orden en los datos. Ejemplosde estos modelos
lógicos son XQUERY, XPATH, XML de Infoset.
Deben de tener un documento XML como su unidad fundamental de almacenamiento
lógico, justo como una base de datos relacional tiene un registro en una tabla como
principal unidad de almacenamiento lógico.
En otras palabras son aquellas bases de datos que pueden hacer consultas sobre do-
cumentos XML usando modelos como XQUERY, XPATH, XQL, XML-QL, QUILT;
realizar actualizaciones con XUPDATE; además de proveer interfaces de programa-
ción tal es el caso de SAX, DOM, JDOM todo esto respetando la integridad del
documento XML. Ejemplos de este tipo de manejadores de bases de datos son: eXist,
Xindice, Berkeley DB XML, dbXML.
En el Apéndice A.2.se encuentra un listado de bases de datos nativas en XML [9].
En el siguiente caṕıtulo se explica con detalle qué es una base de datos nativa en XML,
las ventajas y desventajas de su uso, cuales son las opciones al escoger alguna, aśı como
la manera en la cual funcionan y administran.
Caṕıtulo 2
Bases de Datos Nativas en XML
Cuando se desarrolla una aplicación con una base de datos nativa en XML se ob-
tienen grandes beneficios, sobre todo en rendimiento y escalabilidad, esto se puede
justificar debido a que las operaciones básicas realizadas sobre una base de datos (rea-
lizar búsquedas, guardar datos y mantener resultados) pueden ser realizadas de una
manera eficiente debido a la forma en que las bases de datos nativas en XML están
implementadas, con respecto a las bases de datos relacionales.
Las bases de datos en XML organizan sus datos en estructuras de árboles. Mientras
que las bases de datos relacionales organizan sus datos en forma tabular; lo cual presenta
el inconveniente de no ser claras al momento de visualizar las relaciones que existen entre
los datos, además de perder rendimiento en las consultas a la base de datos.
Cuando se desarrolla un sistema utilizando bases de datos relacionales se puede
encontrar su equivalente en una base de datos nativa en XML. En una base de datos
relacional se usa SQL 1 para realizar consultas y guardar datos, su equivalente en una
base de datos nativa en XML es XPATH o XQUERY y XUPDATE para agregar datos
a los documentos, por lo tanto hay equivalencia entre ambas formas de desarrollar un
1 Acrónimo de Structured Query Language.
17
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 18
sistema, ya que es posible al menos realizar las operaciones básicas y más comunmente
usadas en un sistema manejador de bases de datos, pero aún carecen de muchas opcio-
nes que un sistema manejador de bases de datos relacionales brinda, como por ejemplo
transacciones, triggers, busquedas sobre multiples documentos, aunque en un futuro se
podrán utilizar estas caracteŕısticas en las bases de datos nativas en XML.
Tanto las bases de datos relacionales como las nativas en XML permiten almacenar
datos, mantener datos, realizar búsquedas, pero la diferencia está en la forma de alma-
cenamiento e indexación de los datos.
Como se mencionó anteriormente, una base de datos nativa en XML almacena datos
en estructuras llamadas árboles y su indexación es el factor clave para su rendimiento,
por lo cual el sistema manejador de datos que se escoja determinará los beneficios y
desventajas del sistema. En este caṕıtulo se explicarán dos de los principales sistemas
manejadores de bases nativas en XML, Xindice y eXist, el motivo de la utilización
de eXist para la implementación de la aplicación manejadora de prácticas, tareas y
exámenes, pero antes de esto se explicarán algunos conceptos necesarios para entender
el funcionamiento de las bases nativas en XML, tal es el caso de XPATH, XQUERY,
XPOINTER y DOM.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 19
2.1. XPATH
XPATH 2 [10, 24] es definido como un lenguaje para obtener partes del documento
XML, esta diseñado para ser usado por XSL y XPOINTER (el cual se explicará mas
adelante). De manera rápida se puede decir que XPATH y XQUERY es a las bases de
datos nativas en XML lo que SQL es a las bases relacionales.
Para estos propósitos XPATH provee manejo de cadenas, números y valores lógicos, su
sintaxis es diferente de la usada en XML, esto debido a que es más fácil la manipulación
de elementos, texto y atributos de documentos XML.
La forma en que XPath manipula los datos es a través de un parser el cual construye
un árbol de nodos. Este árbol presenta las caracteŕısticas de cualquier árbol de datos
es decir tiene, ráız, hijos, ancestros, descendientes, etc.
Existen distintos tipos de nodos en un árbol generado a partir de un documento XML:
nodo ráız, nodos elemento, nodos atributo, nodos texto, nodos comentario y nodos de
instrucciones de procesamiento (root, node elements, node attributes, node texts, node
comments y processing node instructions). El caracter “/” hace referencia al nodo ráız
del árbol generado, pero no al elemento ráız del documento XML. Cualquier elemento
de un documento XML se convierte en un nodo elemento dentro del árbol.
Cada elemento tiene su nodo padre. El nodo padre de cualquier elemento es, a su vez,
un elemento, excepto el elemento ráız, cuyo padre es el nodo ráız. Los nodos elemento
tienen a su vez hijos, que son: nodos elemento, nodos texto, nodos comentario y nodos
de intrucciones de proceso. Los nodos elemento también tienen propiedades tales como
su nombre y atributos.
Los nodos atributo no son hijos de los nodos elemento sino que los contiene como
etiquetas añadidas a dicho nodo elemento. Cada nodo atributo consta de un nombre y
2 Acrónimo de XML Path Language.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 20
un valor.
En el árbol también se generan nodos para cada nodo comentario y nodo de instruccion
de proceso.
Ejemplo de transformación de un documento XML en su representación de árbol.
<libro>
<titulo>MOMO</titulo>
<autor id="1">Michael Ende</autor>
</libro>
---/
|
+---libro
|
+---titulo
| |
| +---(texto)MOMO
|
+---autor[id="1"]
| |
| +---(texto)Michael Ende
Una consulta es definida como una expresión (path expression) que lee una secuencia
de datos en XML y devuelve otra secuencia como resultado.
Ejemplo de una consulta en XPATH
/Libro//Capitulo/Seccion
Indica que se desea seleccionar todos los elementos Sección que sean hijos de Capı́tulo
los cuales tengan un antecesor llamado Libro. La doble diagonal en la subexpresión
Libro//Capı́tulo nos indica que debe de haber un camino de un elemento Libro a
un elemento Capı́tulo. Esto corresponde a una relación antecesor-descendiente, es de-
cir, sólo los elementos que son descendientes de Libro serán seleccionados. La diagonal
en Capı́tulo/Sección indica una relación padre-hijo. En ésta se seleccionarán aque-
llas secciones cuyo padre es un elemento Capı́tulo. Resumiendo, cuando se tiene una
relación antecesor-descendiente se seleccionarán TODOS los nodos que descendiendan
del conjunto de nodos contexto. Es decir, no sólo los hijos de los nodos contexto, sino
también los hijos de los hijos y los hijos de éstos y aśı hasta llegar al final. Mientras que
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 21
en una relación padre-hijo sólo se seleccionan los nodos hijo o nodos padre.
Los Axes son abreviaturas de las expresiones completas de XPATH, el ejemplo anterior
se podŕıa reescribir como: descendant::Libro::child::*, pero se perdeŕıa facilidad en
el uso de XPATH. Ejemplos de Axes son descendant (//), child (/), attribute (@), self
(.) , parent (..).
Se pueden realizar consultas mucho mas complejas usando predicados. Un predicado
básicamente restringe el conjunto de nodos seleccionados por un Axe el cual cumple
cierta condición. Por ejemplo la consulta:
/Libro/Capitulo/Seccion[@id = "10"]
Devuelve todos los elementos hijos de Sección cuyo atributo id sea igual a 10.
2.2. XQUERY
XQUERY 3 [11, 27] es un lenguaje de consulta que contiene a la especificación de
XPATH 2.0, por lo queambos lenguajes son compatibles a cierto nivel entre ellos, pero
a diferencia de XPATH, XQUERY regresa un consulta como nodos ordenados y sin
repetir datos.
Otra diferencia entre XPATH y XQUERY es la forma en que pueden utilizar las hojas
de estilo ya que con XPATH es muy fácil el uso de éstas 4 mientras que con XQUERY se
pueden utilizar hojas de estilos más complicadas utilizando menos código y haciéndolo
mas legible.
XQUERY abarca desde archivos XML hasta bases de datos relacionales con funciones
de conversión de registros.
3 Acrónimo de XML Query Languaje.
4 Siempre y cuando estas resuelvan tareas pequeñas.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 22
En XQUERY las expresiones pueden estar compuestas por cláusulas de hasta cinco
tipos distintos. Estas cláusulas siguen la norma FLWOR ( For, Let, Where, Order by
y Return).
Tabla que explica cada cláusula.
For Vincula una o mas variables o expresiones escritas en XPATH.
Let Vincula una variable al resultado completo de una expresión, añadiendo
esos v́ınculos a los elementos generados por una cláusula For ó, si no
existe una cláusula For, creando un único elemento que contenga esos
v́ınculos.
Where Filtra los elementos eliminando todos los valores que no cumplan las
condiciones.
Order by Ordena los elmentos según el criterio dado.
Return Construye el resultado de la consulta para un elemento dado, después de
haber sido procesado.
En el siguiente ejemplo se ilustra el uso de XQUERY.
-------- libros.xml ------------
<libros>
<libro>
<titulo>MOMO</titulo>
<autor id="1">Michael Ende</autor>
</libro>
<libro>
<titulo>Ensayo sobre la Ceguera</titulo>
<autor id="2">Jose Saramago</autor>
</libro>
<libro>
<titulo>El Evangelio segun Jesucristo</titulo>
<autor id="2">Jose Saramago</autor>
</libro>
</libros>
-------- CONSULTA --------------
for $b in doc("libros.xml")//libro
let $c := $b//autor
where $c/@id = "2"
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 23
order by $b/titulo
return $b/ titulo
El resultado de la consulta se muestra a continuación.
<titulo>Ensayo sobre la Ceguera</titulo>
<titulo>El Evangelio segun Jesucristo</titulo>
En la primera ĺınea de la consulta se asignan todos los libros existentes en el documento
libros.xml a la variable $b, en la siguiente ĺınea se asocian a la variable $c todos los
autores de los libros que seleccionamos en la variable $b, en la siguiente ĺınea se pone la
condicion en la cual solamente se seleccionará como válidos los elementos en los cuales
el atributo id de algún autor sea 2, en la siguiente ĺınea se ordena por titulo y para
finalizar se regresan únicamente las tuplas titulo.
En la siguiente tabla se especifica las etapas en las cuales se ejecutaŕıa la consulta.
#Libros que se asignaron a la variable b.
For <libro><titulo>MOMO</titulo><autor id=’1’>Michael
Ende</autor></libro> <libro><titulo>Ensayo
sobre la Ceguera</titulo><autor id=’2’>Lewis
Carroll</autor></libro> <libro><titulo>El
Evangelio segun Jesucristo</titulo><autor id=’2’>Jose
Saramago</autor></libro>
#Autores que se seleccionaron en la variable c.
Let <libro><autor id=’1’>Michael Ende</autor></libro>
<libro><autor id=’2’>Jose Saramago</autor></libro>
#Condicion en la cual solo se seleccionaron los autores
#que tenian un atributo = 2
Where <libro> <autor id=’2’>Jose Saramago</autor></libro>
#Ordenados por titulo.
Order by <titulo>El Evangelio segun Jesucristo</titulo><autor
id=’2’>Jose Saramago</autor> <titulo>Ensayo sobre la
Ceguera</titulo><autor id=’2’>Jose Saramago</autor>
#Regresa solamente los titulos.
Return <titulo>El Evangelio segun Jesucristo</titulo>
<titulo>Ensayo sobre la Ceguera</titulo>
Un detalle muy importante respecto a XQUERY es que ninguna de las cláusu-
las FLWOR es obligatoria en una consulta XQUERY. Por ejemplo una expresión en
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 24
XPATH es totalmente válida y puede no tener ninguna de las cláusulas FLWOR.
Escoǵı utilizar XPATH para realizar el sistema manejador de prácticas debido a que su
especificación, al ser menos amplia que la especificación de XQUERY, es mas fácil de
ser implementada por distintos sistemas manejadores de bases de datos, con lo cual es
mas fácil migrar el sistema de un sistema manejador a otro. De hecho Xindice solamente
implementa XPATH, a diferencia de eXist que implementa casi en su totalidad tanto
XPATH 2.0 como XQUERY.
2.3. XPOINTER
XPOINTER 5 es una extensión de XPATH que permite obtener partes del docu-
mento XML.
El equivalente en HTML es lo que se consigue con la etiqueta <A NAME="seccion">,
la cual permite obtener una parte del documento html. Para utilizar esta instrucción se
agrega al final de un URI6 un signo de # seguido de la sección que deseamos obtener,
ejemplo:
http://www.w3.org/TR/xpath#seccion
La idea que sigue XPOINTER es parecida. XPOINTER permite añadir a un URI una
#expresión donde expresión es una sentencia XPATH, con algunas propiedades ex-
tra. Ejemplo:
http://wwww.w3.org/xpath.xml#xpointer(/xpath/axes)
Explicando el ejemplo se observa que la sentencia XPOINTER buscaŕıan el conjunto
de nodos delimitado por /xpath/axes, dentro de xpath.xml tal y como se buscaŕıa con
una sentencia XPATH.
5 Acrónimo de XML Pointer Language.
6 Acrónimo de Uniform Resource Identifier el cual puede ser un URL (Acrónimo de Uniform Re-
source Locator) o un URN (Acrónimo de Uniform Resource Name).
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 25
Actualmente no hay muchas herramientas que soporten XPOINTER 7 , pero una vez
que se difunda su uso se podrán utilizar todas las mejoras y extensiones que hace a
XPATH sobre todo en el web.
2.4. DOM (Document Object Model)
DOM 8 [12] acorde a la especificación del W3 se define como una plataforma e
interfaz para algún lenguaje neutral con el cual se puede acceder al contenido, cambiar
estructura y estilo de algún documento (HTML ó XML). En otras palabras es un API 9
para acceder y manipular datos estructurados dinámicamente no importando el lenguaje
en que se implemente.
Guarda una gran similitud con la estructura del documento al que modela. Por ejemplo:
<!-- PARTE DE UN DOCUMENTO HTML -->
<TABLE>
<BODY>
<TR>
<TD>Libro 1</TD>
<TD>--</TD>
</TR>
<TR>
<TD>Libro 3</TD>
<TD>Libro 4</TD>
</TR>
<TBODY>
</TABLE>
El DOM que representa este documento es el siguiente:
7 De hecho tanto IExplorer como Firefox aun no tienen soporte.
8 Acrónimo de Document Object Model.
9 Conjunto de especificaciones de comunicación entre componentes de software.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 26
Algo muy importante por enfatizar es que los nodos del diagrama anterior no repre-
sentan una estructura de datos, sino que representan objetos, los cuales pueden tener
funciones e identidad. Como modelo de objetos, el DOM identifica:
Las interfaces y objetos usados para representar y manipular un documento
La semántica de estas interfaces y objetos, incluyendo comportamiento y atributos
Las relaciones y colaboraciones entre estas interfaces y objetos
Sin embargo, el DOM no especifica que los documentos deban ser implementados
como una estructura de árboles, ni tampoco especifica cómo deben implementarse las
relaciones entre objetos. El DOM es un modelo lógico que puede implementarse de la
manera que sea conveniente.
Una propiedad importante de los modelos de estructura del DOM es su isomorfismo
estructural, es decir, si dos implementaciones cualesquiera del DOM se usan para crear
una representación del mismo documento, ambas crearán el mismo modelo de estruc-
tura, con exactamente los mismos objetos y relaciones.
El Modelo de Objetos del Documento consiste actualmente de dos partes, el Núcleo del
DOM y el DOM HTML.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 27
El Núcleo del DOM representa la funcionalidad usada para los documentos XML y
también sirve de base para el DOM HTML. El DOM HTML es un conjuto de recursos
que facilita las tareas más comunes que se puedenrealizar en un documento HTML.
Ejemplos del Núcleo de DOM y DOM HTML:
getElementById(Identificador) (Núcleo de DOM: Método de Document)
Devuelve el nodo Elemento cuyo Id es Identificador.
images (DOM HTML: Atributo de HTMLDocument)
Devuelve el conjunto ordenado de elementos HTMLImageElement del documento.
2.5. Xindice
Xindice [25] es un sistema manejador de bases de datos escrito enteramente en Java,
por lo tanto se tiene portabilidad y seguridad, pero depende de la Máquina Virtual de
Java (JVM).
Xindice guarda datos en objetos de Java dentro de la JVM tales como :
Objetos que representan la jerarqúıa de las colecciones. Una colección como su nombre
lo indica contiene varios documentos XML y a su vez puede contener subcolecciones,
obteniendo aśı una jerarqúıa de datos.
Información del estado de la conexión con el cliente.
Varios datos guardados en memoria.
Es por esto que Xindice necesita acceso a los archivos en el disco duro u otro dispositivo
de almacenamiento que contenga los documentos XML. Estos archivos son guardados
dentro de una jeraqúıa de directorios, que comienza en la raı́z10 .
10 También es llamada database root ó dbroot.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 28
Xindice puede ser utilizado de dos diferentes maneras, dependiendo de como se quiera
usar. La primera forma es como una aplicación Stand Alone en donde el cliente y la
base de datos funcionan bajo la misma máquina virtual11 . La segunda es dentro de
un contenedor de aplicaciones web, como Apache Tomcat. El cual permite a Xindice
recibir peticiones de diferentes clientes sin perder integridad y asegurando concurrencia.
La comunicación entre los clientes y el manejador de bases de datos se realiza mediante
XML-RPC12 , o através del api XML:DB, el cual al ser implementado en Java es la op-
ción ideal para el desarrollo y comunicación con el sistema manejador de bases de datos.
Cada colección en Xindice es representada por una instancia de la clase:
org.apache.xindice.core.Collection, la cual toma valores iniciales usando un ar-
chivo XML que describe el comportamiento de la colección.
La colección principal de esta jerarqúıa de colecciones es llamada raı́z la cual no tiene
padre13 ádemas de que no contiene documentos XML sino solamente subcolecciones.
Esta raı́z provee enlaces a cualquier objeto utilizado en una instancia de Xindice. La
colección principal es inicializada como se mencionó anteriormente por un archivo XML,
el cual luce de la siguiente forma:
<xindice>
<root-collection dbroot="./db/" name="db">
<queryengine>
<resolver autoindex="false"
class="org.apache.xindice.core.query.XPathQueryResolver" />
<resolver class="org.apache.xindice.core.xupdate.XUpdateQueryResolver" />
</queryengine>
</root-collection>
</xindice>
Los elementos importantes en este documento son:
11 Embedded mode.
12 Acrónimo de XML-Remote Procedure Call.
13 Es decir, una colección con una jeraqúıa mayor a la suya.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 29
El atributo dbroot, es una dirección que puede ser absoluta o relativa para encon-
trar la colección principal, si la ruta es absoluta usa esa ruta y si es relativa Xindice
tratará de encontrar una variable global llamada XINDICE HOME y la concate-
nará con el valor del atributo dbrooot (esto sólo si la aplicación no se encuentra
dentro de un contenedor de aplicaciones Web). Si la variable global no es encontrada
Xindice tratará de usar el directorio webapps/xindice/WEB-INF como la dirección
principal.
El atributo name, es el nombre de la colección principal.
Los elementos resolver, son apuntadores a los motores de busqueda que Xindice
soporta. Por default se utilizan tanto XPATH como XUPDATE.
El atributo autoindex, nos indica que la colección principal puede o no tener un
ı́ndice, por default la colección principal no se encuentra indexada.
Otro punto muy importante respecto a las colecciones es que cada colección contiene al
menos un archivo con terminación tbl, que contiene todos los documentos XML guar-
dados en ella, este archivo se explicará con más detalle más adelante.
Una colección especial es system, la cual siempre es creada cuando se instancia la base
de datos, esta colección no contiene documentos pero si dos colecciones: SysConfig y
SysSymbols.
La Colección SysConfig contiene un archivo llamado database.xml. Mientras que
SysSymbols contiene varios documentos que en conjunto son la llamada tabla de śımbo-
los 14 usada para guardar los nombres de elementos y atributos de todos los documentos
XML guardados en la base. El archivo database.xml es un archivo en XML que es usa-
do para crear cualquier colección en la base de datos.
14 Tambien llamada symbol tables.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 30
2.5.1. Almacenamiento de Datos
Como se mencionó anteriormente los datos de un documento XML son almacenados
en un solo archivo con extensión tbl el cual es localizado en el directorio de las coleccio-
nes en algun lugar en el database root directory. Una clase de Java llamada filer
es la responsable de leer y escribir XML a ese archivo. El más común filer en Xindice
es implementado por org.apache.xindice.core.file.BtreeFiler.
La clase org.apache.xindice.core.file.BtreeFiler divide el almacenamiento
de datos en dos capas. La capa inferior provee un archivo de paginación 15 . El código
para esta capa es implementado por la clase: org.apache.xindice.core.file.Paged.
La capa superior contiene una implementación de un Árbol B 16 (el cual es una estruc-
tura de datos que permite el almacenamiento de duplas de llaves y valores).
2.5.2. Paginación en Xindice
La paginación es usada en las bases de datos nativas en XML debido a que es un
algoritmo de almacenamiento muy utilizado y eficiente, pero sobre todo facilita el ac-
ceso aleatorio a los datos. A continuación se explicará de qué se trata la paginación y
cómo es usada en las bases de datos en XML.
La paginación provee un acceso eficiente a un archivo permitiendo que varias partes
del archivo (páginas) sean mapeadas a la memoria principal para fácil acceso. Estas
páginas tienen un tamaño predefinido, si el dato que requiere ser guardado es mayor que
el de una página, las siguientes páginas creadas deben ser enlazadas a la pagina anterior.
15 Paged file.
16 B-tree filer
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 31
Encabezado de Archivo
Encabezado de Página
Página 1
Página 2
Página 3
Encabezado de Página
Encabezado de Página
Figura 2.4.2. Estructura de un archivo paginado
Como se muestra en la Figura 2.4.2 un archivo paginado contiene un encabezado
de archivo17 seguido de páginas con un tamaño predefinido. En el caso de Xindice
las páginas y el encabezado de archivo tienen un tamaño de 4kb, pero el tamaño puede
ser cambiado.
Cada página contiene un encabezado de página18 de 64 bytes seguidos de datos.
Estas páginas son numeradas. Ahora si se necesita cierta página y ésta no se encuentra
en la memoria principal la manera de obtener la página seŕıa la siguiente:
direcciónpágina = tama~no encabezado archivo + (n página * tama~no página)
Ejemplo: Obtener la direccion de la página 5
direcciónpágina = 4 kb + ( 5 * 4kb)
Con esta fórmula se puede encontrar la direccion de la página que se busca y 64 bytes
después (los 64 bytes del encabezado de página) se obtendŕıa el comienzo de los datos.
17 File header.
18 Page header.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 32
El encabezado de archivo contiene una serie de campos arreglados para cierto
propósito. Estos campos si son mas grandes de un byte son guardados en Big En-
dian Format, lo cual significa que el byte mas significativo siempre es guardadado en la
dirección de memoria mas pequeña. Con esto se asegura que los datos sean correctos
no importando la arquitectura.
El encabezado de archivo contiene los siguiente campos:
header_size
0 2
page_size
page_count
total_countfirts_free_page
last_free_page
6
14
22
30
38 39
pag_hd_size max_key_size
40
record_count
header size (2 bytes) - Contiene el tamaño del encabezado de archivo.
page size (4 bytes) - Contiene el tamaño de las páginas.
page count (8 bytes) - En versiones recientes de Xindice este campo es remplazado
por el campo de total count.
total count (8 bytes) - Número total de páginas presentes en ese archivo.
first free page (8 bytes) - Número de página de la primera página sin usar.
last free page (8 bytes) - Número de página de la última página sin usar.
pag hd size (1 byte)- Tamaño del encabezado de página. En este caso son 512 bits
(64 bytes).
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 33
max key size (2 bytes) - Tamaño máximo de cada llave.
record count (8 bytes) - Número de expedientes19 guardados en el archivo.
Además de todos estos campos otros pueden ser creados posteriormente.
Clases como org.apache.xindice.core.file.Btree, la cual extiende a la clase
org.apache.xindice.core.file.Paged pueden añadir campos a este archivo.
Un expediente es un dato guardado en una página. Si este dato cabe en una sola pági-
na nada especial pasa, es decir se guarda en la página, pero si el dato no cabe en ésta,
es guardado en la primera página y subsecuentes páginas guardan el resto del dato. Es
por esto que cada página tiene su propio encabezado de página el cual contiene ciertos
campos necesarios para enlazar los datos entre páginas.
Las páginas sin usar que existan en el archivo de datos 20 y que puedan ser usadas
para guardar datos son almacenadas en la lista de páginas sin usar usando el campo
first free page y last free page del encabezado de archivo.
El encabezado de página contiene los siguiente campos:
status
0 3
key_hash
record_len
total_count
7
15
key_len
data_len
1
11
status (1 byte) - Este estatus es un valor en hexadecimal que representa los valores
de: Usado, Sin Usar o Sobrecarga.
Si la página está usada el estatus cambia a Usado.
Si una página esta sin usar su estado es Sin Usar.
Si esta página contiene la primera parte de un expediente su estado cambia a un valor
19 Records.
20 Archivo con extención tbl.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 34
en hexadecimal que es usado por el algoritmo de Árboles B. El cual será descrito
detalladamente mas adelante.
Si la página contiene el sobrante de algún expediente su estado cambia a Sobrecarga.
página 0x42
estatus ?
datos, parte 1
página 0x62
estatus Sobrecarga 
datos, parte 2
página 0x3C
estatus Sobrecarga
datos, parte 3
página 0x5E
estatus Sobrecarga
datos, parte 4
apuntador vacio
Ejemplo de un expediente guardado en 4 páginas
key len (2 bytes) - Las páginas tienen la posiblidad de guardar una llave21 justo
antes de los datos que contiene la pagina. El tamaño máximo de ésta llave es puesto
en el campo de max key size del encabezado de archivo a 256 (0X0100) pero, puede
ser redefinido en ésta página si se cambia el tamaño en este campo. Posteriorme este
campo sirve para crear la llave hash utilizada en busquedas de datos. Si no hay llave
en esta página el valor es 0 y no se creará ninguna llave hash.
key hash (4 bytes) - Se guarda una llave hash22 calculada utilizando el campo
key len.
data len (4 bytes) - El tamaño del expediente guardado en ésta página. Si el expe-
21 Key.
22 Key Hash.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 35
diente continua en otra página en éste campo solo se guarda el tamaño del pedazo
de expediente guardado en ésta página.
record len (4 bytes) - El tamaño total del expediente.
next page (8 bytes) - El número de la página que contiene la siguiente parte del
expediente, si esta página es la última que contiene el expediente su valor pasa a -1.
2.5.3. Árboles B y B+
Un árbol es una estructura de datos que permite ordenar listas de valores, minimi-
zando el número de lecturas.
Esta estructura contiene nodos, en los cuales se almacenan llaves, éstos tienen apun-
tadores a otros nodos (llamados nodos hijo). Los nodos hoja son nodos que no tienen
nodos hijo. Solo puede haber un único nodo sin padre llamado ráız.
Un árbol B tiene las siguientes caracteŕısticas:
Cada nodo, excepto la ráız tiene un número acotado de llaves; tal cota está dada
por superior, que es una función que toma el órden del árbol, m, lo divide entre 2 y
regresa el valor entero de tal operación.
Un árbol B de orden m contiene a lo mas m llaves y m+1 apuntadores.
Mientras que otros tipos de árboles pueden perder su balance, los árboles B garantizan
balanceo de datos y un número de niveles menor. Esto permite que las operaciones
mas comunes en árboles B se realicen de una manera mas eficiente, por ejemplo las
busquedas en los árboles B en el peor de los casos se realizan en tiempo logaŕıtmico
mientras que en los árboles no balanceados en el peor de los casos el tiempo es lineal.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 36
6
1 4
10 15
 
 
 
Nodo
Nodo hojaLlave
Ejemplo de un árbol B de orden 4
Cuando un nodo es insertado o removido, el número de nodos vaŕıa y en algunos casos
se requieren realizar operaciones especiales para mantener la estructura.
Un árbol B+ es una variación de un árbol B. En un árbol B+, en contraste respecto
a un árbol B, toda la información se guarda en las hojas. Los nodos internos sólo con-
tienen claves y punteros. Los nodos hoja se encuentran unidos entre śı como una lista
enlazada para permitir búsqueda secuencial.
No es el objetivo de ésta tesis explicar toda la teoria detras de los árboles B y B+ pero
un buen libro de algoritmos [13, 18] puede dar una explicación mas amplia.
2.5.4. Árboles en Xindice
En el caso de Xindice existe una variación en el árbol B ya que todas las llaves que
Xindice necesita termina en los nodos hojas del árbol B, pero a diferencia de los árboles
B+ no se tienen apuntadores entre hojas.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 37
Fig 2.5.4 - Ejemplo de un árbol B en Xindice
Xindice implementa estos árboles usando el archivo paginado. Cada nodo en el árbol
es guardado en un expediente el cual puede estar en una o mas páginas.
Además de los nodos del árbol B. El B-tree filer23 almacena los datos que estan
asociados a alguna llave. Estos datos son guardados en expedientes separados (también
separados en una o más páginas). Los nodos hoja en el árbol B24 contienen apuntadores
a los expedientes que contienen los datos asociados a las llaves.
El archivo B-Tree Filer mantiene tres tipos de expedientes dentro del archivo pagi-
nado.
nodos hoja25 - Estos nodos contienen una lista de llaves y apuntadores a expedientes
de datos, los cuales contienen el dato asociado a cada llave.
23 Implementado por las clases org.apache.xindice.core.filer.BTree y
org.apache.xindice.core.filer.BTreeFiler.
24 Recordar que el conjunto de todos los nodos hoja en el árbol contienen todas las llaves usadas.
25 Leaf Nodes.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 38
nodos de las ramas26 - Estos nodos contienen parejas de llaves y apuntadores a
otros nodos.
expedientes de datos27 - No son parte del árbol B pero los nodos hoja apuntan
a estos datos.
La implementación del árbol B necesita de ciertos campos extra que son agregados al
encabezado de archivo y a los encabezados de página para su organización interna.
Los campos agregados al encabezado de archivo son:
root_node_page_number total_bytes
Encabezado de Archivo Original
root node page number (8 bytes) - El número de página de la página que mantiene
el nodo ráız del árbol B.
total bytes (8 bytes) - El tamaño en bytes del archivo que matiene los nodos de los
árboles y los expedientes de datos.
Los campos agregados en la cabecera de la página del archivo son:
val_count modified
Encabezado de Página Original
created
status
26 Branch Nodes.
27 Data Records
CAPÍTULO 2. BASES DE DATOS NATIVAS ENXML 39
status (1 byte) - Este campo es usado para indicar que clase de expediente es:
• Un expediente que es usado como un nodo rama del árbol B tendrá un estatus
0X01.
• Un expediente que es usado como un nodo hoja del árbol B tendrá un estatus
0X02.
• Un expediente que es usado como un expediente de datos tendrá un estatus 0X14.
val count (2 bytes) -Si el expediente es usado para guardar un nodo del árbol B,
entonces éste campo indica cuantas llaves hay en el nodo.
created (8 bytes) - Si el expediente es usado para guardar datos, en este campo se
guarda la hora en que fue guardado.
modified (8 bytes) - Si el expediente es usado para guardar datos y fue modificado,
en éste campo se guarda la hora en que fue modificado.
Pero, ¿Cómo es codificado un nodo del árbol B en un expediente dentro del archivo
paginado?.
En el caso de los nodos rama, hay un apuntador más que el número de llaves; estos
apuntadores apuntan a otros nodos en el árbol B. En el caso de los nodos hoja hay
exactamente tantos apuntadores como llaves y cada apuntador apunta al expediente
de datos asociado a alguno de los valores de las llaves. En caualquier caso el nodo es
codificado de la siguiente manera.
Para cada llave, dos campos son escritos28 :
28 Las llaves en Xindice no son números como se muestra en la Figura 2.5.4, sino cadenas de caracteres
codificados en UTF-8, dentro de un arreglo de bytes.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 40
• El tamaño del arreglo de bytes.
• Los bytes que representan el valor de la llave29 .
El número de llaves se obtiene del encabezado de página.
Inmediatamente de la llave siguen los apuntadores, uno tras otro cada uno ocupando
8 bytes.
El número de apuntadores se obtiene del número de llaves y del campo status el
cual indica si es un nodo hoja o nodo rama.
2.6. eXist
eXist es sistema manejador de bases nativas en XML bajo código abierto escrito to-
talmente en Java, su creador es Wolfgang M. Meier[30] de la Universidad de Tecnoloǵıa
de Darmstadt. Al igual que Xindice, eXist cubre las expresiones que define el lenguaje
XPATH 1.0 y a diferencia de Xindice, implementa casi en su totalidad XPATH 2.0 y
XQuery 1.0, además de búsquedas por medio de expresiones regulares, búsquedas por
palabras clave en textos, etc.
Este manejador de bases nativas en XML puede ser utilizado de dos maneras distintas.
La primera de estas es como una aplicación 30 y la segunda es dentro de un servidor
de aplicaciones web como Apache Tomcat. Cualquiera de estas dos formas de utilizar
eXist soportan operaciones concurrentes realizadas por diferentes usuarios.
Una mejora respecto a Xindice es el aumento de operadores y funciones. Un ejemplo
de esto es la siguiente sentencia de XPATH:
/libro[ near (., ’Datos XML’, 50)]
29 una cadena, en UTF-8
30 Stand Alone.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 41
En el ejemplo anterior, la sentencia XPATH buscaŕıa todas las incidencias de la cadena
Datos XML que estén a una distancia una de otra de cincuenta o menos letras dentro
del documento XML.
La forma en la cual eXist realiza el almacenamiento es muy similar a Xindice ya que
utiliza paginación y árboles B. El manejador eXist tiene sus busquedas propias y opti-
mizadas basadas en ı́ndices. Soporta concurrencia pero no transacciones. La diferencia
principal entre una base de datos y otra se centra principalmente en la forma de realizar
busquedas; ya que eXist utiliza una forma de indexamiento por cada elemento, texto y
atributos, además de que genera automáticamente este indexamiento.
2.7. Indexación
El esquema de indexación representa una mejora en la forma en la cual se procesan
búsquedas dentro de la base de datos. El objetivo principal del esquema de indexación
en eXist es encontrar relaciones estructurales entre nodos.
Por ejemplo la expresión /libro//figura/titulo denota una selección estructural. Es
decir tienen relaciones entre nodos, como son antecesor-descendiente ó padre-hijo. En
una consulta normalmente se utilizaŕıa un enfoque top-down para evaluar las expresio-
nes; es decir buscaŕıamos en todos los nodos que comiencen con libro para encontrar
posibles elementos figura. Esto implica que un gran número de nodos que no conten-
gan figura serán accesados para probar si el nodo es un descendiente de libro y si
el nombre concuerda con figura. Es por esto que para acelerar las consultas se imple-
mentó un esquema de indexación que identificara relaciones entre nodos.
Varios esquemas de indexación han sido propuestos [17, 29, 33]. En particular el sistema
de indexamiento de eXist usa un esquema numérico para identificar nodos en un docu-
mento XML y determinar relaciones entre nodos en el árbol del documento. Lee Yong
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 42
Kyu[28] propone una forma de númeración en la cual se modela el árbol del documento
como un árbol k-enario, en donde k es igual al máximo número de nodos hijos en el
árbol. A cada nodo de este árbol se le agrega un único identificador por medio de un
recorrido en level-order es decir, un recorrido por niveles. Ejemplo de un árbol con a lo
más dos nodos hijo:
<libro>
 <nombre>XML Data Management</nombre>
 <datos>
 <editorial>Addison</editorial>
 <autor>Akmal Chaudhri</autor>
 </datos>
</libro>
1 libro
2 nombre 3 datos
4 XML Data Management 5
6 editorial
7 autor
8 9 10 11 12 Addison
13 14 Akmal Chaudhri
15
Este árbol posee ciertas peculiaridades, por ejemplo se puede obtener el identificador
del nodo padre de un nodo i mediante la siguiente función.
parenti =
[
(i − 2)
k
+ 1
]
Este algoritmo tiene ciertas fallas ya que podemos tener en un documento relativamente
pequeño algún nodo que tenga un gran número de nodos hijos, con lo cual para poder
mantener balanceado nuestro árbol k-enario tendŕıamos que insertar muchos mas nodos
en todos los niveles del árbol para mantenerlo balanceado.
Por esto es que eXist implementó una extensión a este algoritmo, en el cual para superar
los problemas de ĺımite de tamaño se decidió desechar la idea de tener forzosamente un
árbol k-enario. En vez de eso el número de hijos de un nodo es asignado para cada nivel
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 43
del árbol, se tiene que para dos nodos x o y de un árbol, el tamaño(x ) = tamaño(y)
y el nivel(x )=nivel(y), donde el tamaño(n) es el número de hijos de un nodo n y el
nivel(m) el tamaño del camino de la ráız al nodo m.
Ejemplo:
<libro>
 <nombre>XML Data Management</nombre>
 <datos>
 <editorial>Addison</editorial>
 <autor>Akmal Chaudhri</autor>
 </datos>
</libro>
1 libro
2 nombre 3 datos
4 XML Data Management 5 6 editorial
7 autor
8 9 10 Addison 11 Akmal Chaudhri
Con esto se pueden tener documentos con grandes cantidades de nodos en niveles bajos
y con pocos nodos en los primeros niveles de la jeraqúıa de elementos, aśı mismo se incre-
menta el nivel de indexamiento al poder tener documentos mas grandes. Comparándolo
con el esquema original de numeración, se tienen que insertar menos identificadores y al
insertar un nodo en los niveles mas bajos no se afecta a los nodos de niveles superiores.
Con esto se puede observar que eXist ha sido diseñado para proveer una implementa-
ción mas completa de XPATH y para los casos de uso mas requeridos.
Considere la siguiente expresión.
/libro[contains(.,"XPATH"]//titulo
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 44
En esta expresión se seleccionan todos los nodos relacionados que cumplan la condición
de tener la frase XPATH en algún t́ıtulo. Con la manera de indexamiento de eXist se
obtiene el identificador del nodo padre para cada nodo que se evalue en la expresión.
Otro beneficio adicional es la reducción en el tamaño de almacenaje de un nodo ya que
no se tiene que guardar referencias extra a padres, hermanos, hijos o atributos; además
de que cualquier nodo enel documento XML puede ser utilizado como el comienzo para
una expresión en XPATH.
Esta es la principal diferencia respecto a Xindice en cuanto a indexación; esto es,
como Xindice no mantiene un ı́ndice entre nodos solamente puede realizar una con-
sulta XPATH mediante un recorido top-down.
2.7.1. Organización de los Datos e Indexamiento
eXist utiliza cuatro archivos de indexación para mantener el funcionamiento del
sistema manejador de bases de datos.
Collections.dbx- este archivo mantiene la jerarqúıa de las colecciones.
dom.dbx- colecta nodos en una página y asocia los identificadores únicos a los nodos
actuales (necesarios para el indexamiento).
elements.dbx- indexa elementos y atributos.
words.dbx- mantiene referencias a ocurrencias de palabras en el texto y es usada
para búsquedas globales.
Todos los ı́ndices están basados en árboles B+. Los ı́ndices para los elementos, atri-
butos y palabras son guardados por colecciones y no por documentos. Esto es mejor
en rendimiento ya que usualmente buscamos a través de colecciones y no en un sim-
ple documento; por ejemplo buscamos todos los libros con la palabra “XPATH” en la
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 45
colección de libros de computación.
El archivo Collections.dbx mantiene la jerarqúıa de colecciones y algo muy importan-
te es que mapea los nombres de las colecciones con los objetos colección. Un identicador
único es asignado a cada colección y documento durante la indexación.
El archivo dom.dbx31 es el principal componente de la arquitectura nativa de eXist.
Consiste de un archivo paginado en el cual todos los nodos del documento son guar-
dados de acuerdo al Document Object Model32 y de un árbol B+ multi-ráız para ir
asociando los identificadores únicos de los nodos de un nivel superior con las direcciones
de los nodos en la sección de datos (similar a Xindice).
Solo los elementos de un nivel superior son indexados en el árbol B+. Atributos, texto,
y elementos de niveles inferiores son escritos a las páginas de datos sin añadir una llave
en el árbol B+.
Documento D1
Documento D2
ID del Nodo
ID del Nodo
Dirección
Dirección
Páginas de Datos
Nodos DOM
Nodo N1 Nodo N2 Nodo N3
Árbol B+ Multiraíz
Figura 2.7.1 Organización de documentos XML en eXist
En la Figura 2.7.1 se puede observar que eXist no guarda enlaces entre sus nodos. La
implementación de DOM conf́ıa en el esquema de numeración de nodos para determinar
las relaciones. Por ejemplo para obtener el padre de un nodo, el identificador único del
31 También llamado XML data store.
32 DOM
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 46
padre es calculado del identificador único del nodo actual.
Elementos y atributos son mapeados a identificadores únicos de los nodos en el archivo
elements.dbx. Cada entrada consiste de una llave que consiste de <collection-id,
name-id> y un arreglo de valores que contiene una lista ordenada de identificadores de
documentos e identificadores de nodos, los cuales corresponden a los elementos y atri-
butos que concuerdan con el name-id. Por ejemplo, para encontrar todos los caṕıtulos
en una colección de libros se requiere de un simple ciclo para encontrar todos los iden-
tificadores únicos de los nodos que apunten a caṕıtulos.
<collection-id,
 name-id>
Llaves del Árbol B+
doc-id node-id doc-id ...... doc-id ......
Valor del Árbol B+: Arreglo de identificadores de
nodos separadolos por identificadores de documentos.
Figura 2.7.2 Organización para elementos y atributos.
Finalmente, el archivo words.dbx es similar al archivo elements.dbx pero a diferencia
de éste las llaves son compuestas de la siguiente manera <collection-id, keyword>. En
el cual cada entrada tiene una lista de valores que apunta a un texto o atributo donde
la palabra apareció.
CAPÍTULO 2. BASES DE DATOS NATIVAS EN XML 47
2.8. Comparativas
En la siguiente tabla se hace una comparación entre eXist y Xindice:
La gran diferencia entre Xindice y eXist se centra principalmente en la forma de in-
dexamiento ya que de esto depende el rendimiento y velocidad cuando se ejecutan las
consultas.
Caṕıtulo 3
Diseño e Implementación
En los caṕıtulos anteriores se analizaron las distintas opciones para la implementa-
ción del sistema, se explicó el por qué de utilizar XML, herramientas necesarias para
su manipulación, aśı como la forma en la cual funcionan los dos principales sistemas
manejadores de bases nativas en XML aśı como sus ventajas y desventajas. Es por eso
que éste caṕıtulo se enfoca en la forma en la cual se diseñó e implementó la aplicación.
3.1. Requerimientos y Análisis
El sistema manejador de prácticas y ejercicios permite consultar prácticas y ejer-
cicios relacionados con bases de datos aśı como almacenar este tipo de información
mediante XML. Tiene los siguientes requerimientos.
1. Modelar las prácticas y ejercicios de la material “Bases de Datos”[26].
2. Estructurar de una manera clara y eficiente la forma de consultar las diferentes prácti-
cas y ejercicios.
3. Facilitar la tarea de crear prácticas y ejercicios para los diferentes temas relacionados
con Bases de Datos.
48
CAPÍTULO 3. DISEÑO E IMPLEMENTACIÓN 49
Con respecto al primer y segundo punto, los ejercicios se modelarán para que pue-
dan ser utilizados por las bases nativas en XML, un punto cŕıtico a analizar, es tener
en cuenta la estructura óptima para el uso de éstas.
La forma en la cual se consultarán las prácticas y ejercicios será por medio de temas y
dificultad. Teniendo los siguientes temas: Modelo Entidad-Relación, Modelo Relacional,
Álgebra Relacional y Normalización; aśı como las siguientes dificultades: fácil, media y
dif́ıcil.
Con respecto al tercer punto el sistema contará con un módulo para agregar nuevas
preguntas y ejercicios a través de una sencilla interfaz de captura.
3.2. Modelado
Tomando en cuenta que las prácticas y ejercicios de la materia de Sistemas de Bases
de Datos se encontraban como datos no-estructurados se procedió a convertir a éstos
datos en datos semi-estructurados para después modelarlos en XML y utilizarlos en una
base de datos nativa en XML.
Se siguieron los siguientes pasos:
Diseñar la estuctura de los documentos XML.
Crear la DTD aśı como el Esquema asociado al archivo XML, con el fin de validar
nuestros documentos y ejemplicar el uso de ambos.
Una vez creado el modelo, el esquema y DTD asociado a éste, se convirtieron los
ejercicios y prácticas de la materia Sistemas de Bases de Datos.
En el siguiente ejemplo de un ejercicio de Bases de Datos en XML se muestra la for-
ma en la cual se manejaron las preguntas, respuestas y tips del sistema. Como punto
CAPÍTULO 3. DISEÑO E IMPLEMENTACIÓN 50
importante se observa que con ésta forma de modelado se puede saber si la pregunta
pertence a un tema en espećıfico; aśı como saber que requisitos son necesarios antes de
contestar el ejercicio. Ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<tema titulo="normalizacion">
<requisitos>Algebra Relacional</requisitos>
<pregunta dificultad="baja" id="0">
a) Muestra que la siguiente regla es una regla
valida de dependencias funcionales, sino da
un ejemplo donde no se satisfaga.
Si A->B entonces B->A
</pregunta>
<respuesta dificultad="baja" id="0">normalizacion_baja_0.txt</respuesta>
<tips dificultad="baja" id="0">
Puedes utilizar un tabla para ejemplificar.
</tips>
<pregunta dificultad="media" id="0">
a) Sea: R(A,B,C,D) con F={AB->C, C->D, D->A}
a.1)Encontrar la cerradura de todos los posibles
conjuntos de atributos de R y las dependencias
funcionales que se obtienen usando las reglas
de inferencia.
a.2)Decir cual o cuales son el conjunto de
atributos clave.
a.3)Decir cual o cuales son el conjunto de
atributos superclaves.
a.4)Encontrar las dependencias funcionales que
violan BCNF.
a.5)Normalizar usando BCNF
</pregunta>
<respuesta dificultad="media" id="0">normalizacion_media_0.txt</respuesta><tips dificultad="media" id="0">
No hay tips que mostrar
</tips>
<pregunta dificultad="alta" id="0">
a) Sea: R(A,B,C,D,E) con F={AB->C, DE->C, B->D}
a.1)Encontrar la cerradura de todos los posibles
conjuntos de atributos de R y las dependencias
funcionales que se obtienen usando las reglas
de inferencia.
a.2)Encontrar las dependencias funcionales que
violan BCNF.
a.3)Normalizar usando BCNF
a.4)Encuentra las violaciones a la 3NF
a.5)Normaliza usando la 3NF
</pregunta>
<respuesta dificultad="alta" id="0">normalizacion_alta_0.txt</respuesta>
<tips dificultad="alta" id="0">
No hay tips que mostrar
</tips>
</tema>
CAPÍTULO 3. DISEÑO E IMPLEMENTACIÓN 51
La DTD para el documento XML quedó de la siguiente manera:
<?xml version=’1.0’ encoding=’UTF-8’?>
<!--- Elementos necesarios para nuestro documento XML -->
<!ELEMENT tema (requisitos|pregunta|respuesta|tips)*>
<!ATTLIST tema
titulo CDATA #REQUIRED
>
<!--- Elemento Requisitos -->
<!ELEMENT requisitos (#PCDATA)>
<!--- Elemento Pregunta -->
<!ELEMENT pregunta (#PCDATA)>
<!ATTLIST pregunta
id CDATA #REQUIRED
dificultad CDATA #REQUIRED
>
<!--- Elemento Respuesta -->
<!ELEMENT respuesta (#PCDATA)>
<!ATTLIST respuesta
id CDATA #REQUIRED
dificultad CDATA #REQUIRED
>
<!--- Elemento Tips -->
<!ELEMENT tips (#PCDATA)>
<!ATTLIST tips
id CDATA #REQUIRED
dificultad CDATA #REQUIRED
>
El esquema para el documento XML quedó de la siguiente manera:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3org/2001/XMLSchema">
<xs:element name="tema" type="xs:mixed">
<xs:attribute name="titulo" type="xs:string" required="yes" />
</xs:element>
<xs:element name="requisitos" type="xs:string">
</xs:element>
<xs:element name="pregunta" type="xs:text">
<xs:attribute name="dificultad" type="xs:string" required="yes" />
<xs:attribute name="id" type="xs:string" required="yes" />
</xs:element>
<xs:element name="respuesta" type="xs:text">
<xs:attribute name="dificultad" type="xs:string" required="yes" />
<xs:attribute name="id" type="xs:string" required="yes" />
</xs:element>
<xs:element name="tips" type="xs:text">
<xs:attribute name="dificultad" type="xs:string" required="yes" />
<xs:attribute name="id" type="xs:string" required="yes" />
</xs:element>
</xs:schema>
CAPÍTULO 3. DISEÑO E IMPLEMENTACIÓN 52
3.3. Arquitectura
El sistema tiene una arquitectura Cliente-Servidor[31] tal y como se muestra en el
siguiente esquema.
SMBD
eXist
Servidor de Aplicaciones
Interfaz del Usuario
Esta aquitectura consta de tres capas o niveles.
Nivel de Almacenamiento. Utiliza un Sistema Manejador de Bases de Datos, el cual
almacena los archivos XML.
Nivel Lógico. El cual consta de las reglas del negocio es decir, la lógica del programa
en la cual se utiliza un servidor de aplicaciones.
Nivel de Presentación. Interfaz del usuario.
CAPÍTULO 3. DISEÑO E IMPLEMENTACIÓN 53
Cada capa o nivel tiene un cometido espećıfico, esto con el fin de que cada tarea se
realice con mayor eficiencia, además de simplicar la lógica de la aplicación.
Caracteŕısticas del modelo cliente-servidor.
Ventajas
El servidor atiende a múltiples clientes en forma concurrente.
El cliente y el servidor pueden estar en diferentes plataformas.
El cliente y el servidor pueden actuar como una sola entidad o como entidades sepa-
radas.
En general no se necesitan muchos recursos (hardware) para ejecutar la aplicación.
Desventajas
Puede ser que el servidor tenga una excesiva carga de trabajo.
Se puede tener la carga de trabajo en una sola capa del sistema.
3.4. Casos de Uso y Diagramas de Actividad
En el siguiente caso de uso se muestra la funcionalidad del sistema, el cual es capaz
de consultar ejercicios aśı como agregar preguntas a nuestra base de datos en XML.
Cualquier usuario puede consultar y aportar nuevos ejercicios al sistema con el fin de
tener un acervo de preguntas y ejercicios mas completo[32].
CAPÍTULO 3. DISEÑO E IMPLEMENTACIÓN 54
Usuario
Consultar Ejercicios y Prácticas
Agregar Ejercicios y Prácticas
Sistema
Figura 3.4.1 Casos de uso del sistema.
En la siguiente tabla se muestran el flujo del sistema para realizar las consultas al sis-
tema.
Tabla 3.4.2 Caso de uso para consultar ejercicios y prácticas.
CAPÍTULO 3. DISEÑO E IMPLEMENTACIÓN 55
En la siguiente tabla se muestran el flujo del sistema para agregar ejercicios al sistema.
Tabla 3.4.3 Caso de uso para agregar ejercicios y prácticas.
CAPÍTULO 3. DISEÑO E IMPLEMENTACIÓN 56
Consultar ejercicios y prácticas
El usuario selecciona el tema 
El usuario selecciona dificultad El usuario selecciona 
el número de
 preguntas
[No se pudo conectar a la base de datos]
Mensaje de Error
[Todo es correcto]
Seleccionar números 
aleatorios dependiendo
del número de preguntas. 
Obtener las preguntas
respuestas y tips seleccionados
Figura 3.4.4 Diagrama de actividad correspondiente al caso de uso para consultar
ejercicios y prácticas.
Agregar ejercicios y prácticas
El usuario selecciona 
el tema 
El usuario contesta la
pregunta
El usuario contesta la 
respuesta 
[Campo Inválido]
Mensaje de error
"Campo Inválido"
Mensaje de error 
Monstrar los datos
de la pregunta agregada
El usuario contesta
 los tips
[No se pudo conectar a la base de datos]
El usuario selecciona 
la dificultad
Agregar la pregunta
a la base de datos
Figura 3.4.5 Diagrama de actividad correspondiente al caso de uso para agregar
ejercicios y prácticas.
CAPÍTULO 3. DISEÑO E IMPLEMENTACIÓN 57
3.5. Diagramas de Secuencia
Usuario
setTema(String temas)
Consultas JavaBeanConsultas
setDificultad(String dificultad)
setNumPreguntas(int cantidad)
doPost()
hasConsulta()
escogeNumeros()
getColeccion()
getNumPreguntasBasedeDatos()
setRespuesta()
devolverPagina(XML Respuesta)
Figura 3.5.1 Diagrama de secuencia para el caso de uso para consultar el sistema.
En la Figura 3.5.1 se muestra la secuencia del programa para consultar el sistema,
esta secuencia comienza con una petición del usuario, la cual es recibida por la clase
Consultas, la cual se encarga de mandar el tema, dificultad y cantidad de preguntas a
la clase JavaBeanConsultas aśı como llamar al método hasConsulta()1 .
El sistema al ser también un generador de prácticas siempre trae preguntas, respuestas
y tips distintos en cada consulta, esto se hace mediante generar número aleatorios2 los
cuales concuerdan con los identificadores de las preguntas, respuestas y tips en la base
1 El cual es el encargado de realizar la consulta a la base de datos.
2 Mediante el método escogeNumeros().
CAPÍTULO 3. DISEÑO E IMPLEMENTACIÓN 58
de datos. El método setRespuesta() es el método encargado de darle formato a las pre-
guntas, respuestas y tips para que finalmente mediante el método devolverPagina(XML
Respuesta) se presenten los resultados de la consulta al usuario.
Usuario
setTema(String temas)
Actualizar JavaBeanActualizar
setPregunta(String pregunta)
setRespuesta(String respuesta)
doPost()
actualizarColeccion()
devolverPagina()
setTips(String Tips)
setDificultad(String dificultad)
getTema()
getPregunta()
getRespuesta()
formatea()
getTips()
getDificultad()
getColeccion()
Figura 3.5.2 Diagrama de secuencia para el caso de uso para agregar datos al sistema.
En la Figura 3.5.2 se muestra la secuencia del programa para agregar ejercicios, es-
ta secuencia comienza con una petición del usuario, la cual es recibida por la cla-
se Actualizar, la cual se encarga de mandar el tema, pregunta, respuesta, tip y
dificultad del ejercicio a la clase JavaBeanActualizar, aśı como llamar al método
CAPÍTULO 3. DISEÑO E IMPLEMENTACIÓN 59
actualizarColección()3 .
La clase JavaBeanActualizar manda llamar al método formatea() el cual es el en-
cargado de darle formato a nuestro ejercicio para que pueda ser actualizado en la base
de datos, finalmente el método devolverPágina() devuelve un mensaje de error si
surgió algún problema al momento de actualizar la colección o un mensaje

Continuar navegando