Problemas y soluciones para la construcción de bases de datos de políticos
bases de datos xml
-
Upload
independent -
Category
Documents
-
view
1 -
download
0
Transcript of bases de datos xml
Lenguaje de marcas y sistemas de gestión de información
Página 1 de 11
Tratamiento y recuperación de datos.
XPATH
Índice Introducción .................................................................................................................................. 2
Bases de datos XML nativas .......................................................................................................... 2
BaseX ......................................................................................................................................... 2
XPath ............................................................................................................................................. 4
Direccionamiento .......................................................................................................................... 5
Acceso a elementos/atributos vs acceso a su contenido textual ................................................. 6
Acceso a elementos con rutas simples ......................................................................................... 7
Elementos del lenguaje ................................................................................................................. 7
Operadores ................................................................................................................................ 7
Operadores booleanos .......................................................................................................... 7
Operadores aritméticos ........................................................................................................ 7
Otros operadores .................................................................................................................. 8
Funciones .................................................................................................................................. 8
Funciones numéricas ............................................................................................................. 8
Funciones de cadena ............................................................................................................. 8
Funciones que devuelven elementos por su posición .......................................................... 8
Funciones que devuelven nodos ........................................................................................... 9
Funciones de agregado ......................................................................................................... 9
Acceso a elementos con filtros de valores literales .................................................................. 9
Acceso a elementos con filtros de valores recuperados ............................................................. 10
Acceso a elementos mediante ejes ............................................................................................. 10
XPath 2.0 ..................................................................................................................................... 11
Lenguaje de marcas y sistemas de gestión de información
Página 2 de 11
Introducción En este tema vamos a ver las bases de datos XML nativas que son una alternativa a las
relacionales, donde se sustituyen las tablas con sus campos por documentos XML con sus
elementos y atributos.
Vamos a utilizar BaseX (http://basex.org/) como herramienta para aprender dos lenguajes de
consulta:
XPath, lenguaje sencillo de expresiones que permite acceder a partes de un documento
XML
XQuery, lenguaje que hace uso de XPath y que facilita la manipulación de documentos
XML. Se podrá extraer partes de un documento, generar documentos nuevos a partir de
los datos originales, etc.
Bases de datos XML nativas En oposición a los sistemas gestores de bases de datos tradicionales como MySQL u Oracle
basados en tablas, compuestas de registros, que se relacionan entre sí, existen sistemas de datos
nativos XML, lo que significa que lo que se almacenan son documentos XML.
Algunos ejemplos son:
BaseX (http://basex.org)
eXist (http://exist-db.org)
BaseX
BaseX es un motor de bases de datos nativo XML, ligero, de alto rendimiento en las operaciones
y fácilmente escalable. Incluye procesadores XPath y XQuery
Con BaseX se puede crear una base de datos constituida por uno o más documentos XML. La
base de datos no está formada por tablas como en los sistemas gestores de bases de datos
relacionales, sino por documentos XML.
Para acceder al contenido de estos documentos utilizaremos los lenguajes de consulta XPath y
XQuery.
El documento XML con el que se está trabajando podrá visualizarse de diferentes formas,
llamadas vistas, que se encuentran sincronizadas entre sí. Estas son:
En texto plano
Como un mapa
Como un árbol
Como una serie de carpetas (tipo sistema de ficheros)
Como una tabla
Como un diagrama de dispersión
Lenguaje de marcas y sistemas de gestión de información
Página 3 de 11
En la figura anterior, se pueden observar las secciones más importantes de la interfaz gráfica
de BaseX
Barra de herramientas en la parte superior
Barra de herramientas (botones), inmediatamente debajo
Línea de comandos
Editor de consulas
Diversas visualizaciones
Información de las consultas ejecutadas (Query Info)
El interfaz gráfico de BaseX permite ejecutar tres tipos de sentencias
Opción Command: Órdendes propias de cualquier sistema gestor como CREATE DB,
OPEN, CREATE, INDEX, CREATE USER, ADD, DELETE, REPLACE
Opción Find: Expresiones XPath
Opción XQuery: Lenguaje de consulta XQuery
Para crear una base de datos nueva, sólo hace falta ir al menú Database y seleccionar la opción
New
Lenguaje de marcas y sistemas de gestión de información
Página 4 de 11
Una vez seleccionado el directorio y asignado un nombre a la base de datos se accederá a la
Interfaz.
XPath
XPath (XML Path Language) es un lenguaje que permite construir expresiones que recorren y
procesan un documento XML.
XPath forma junto con XSLT y XSL-FO (vistos en temas anteriores), una familia de lenguajes
llamadas XSL, diseñados para acceder, transformar y dar formato de salida a los documentos
XML.
La versión más reciente de XPath es la 2.0, aunque la mayoría de ejemplos que se verán en este
capítulo son compatibles con la versión 1.0.
Como ya sabemos, un documento XML tiene estructura de árbol, un elemento raíz que tiene
hijos, que a su vez tienen otros hijos, etc. A su vez cada elemento puede tener atributos y/o
contenido textual.
Aunque también podemos pensar que un documento XML tiene una estructura parecida a un
sistema de ficheros: elementos que contienen otros elementos o datos frente a directorios que
contienen otros directorios o archivos. Para recorrer y listar la estructura de directorios,
usaríamos los comandos adecuados del sistema operativo: cd, dir, o ls… Para recorrer un
documento XML y extraer la información contenida en sus elementos se usará XPath.
Las especificaciones de XPath, desarrolladas por el W3C, se pueden consultar en:
Lenguaje: http://www.w3.org/TR/xpath20
Modelo de datos: http://www.w3.org/TR/xpath-datamodel
Lenguaje de marcas y sistemas de gestión de información
Página 5 de 11
Direccionamiento Las direcciones XPath al igual que los direccionamientos en un sistema de ficheros pueden ser
absolutas (empiezan por /) o relativas (con respecto a nodo determinado, llamado nodo de
contexto).
XPath trata un documento XML cono un árbol de nodos
Los tipos de nodos en XPath son:
Raíz del documento (uno por documento): contiene todo el documento y se representa
por el símbolo /. No tiene nodo padre, y tiene un nodo hijo, el nodo documento.
Contiene también los comentarios e instrucciones de procesamiento, que no forman
parte del documento en sí.
Elemento: todo elemento de un documento XML es un nodo de XPath
Atributo: todo atributo de un documento XML es un nodo de XPath
Texto: todo contenido textual de un elemento es un nodo de XPath
Comentario
Instrucciones de procesamiento
Espacios de nombres
Los tipos de datos básicos son: string, number, boolean y node-set (conjunto de nodos)
Las expresiones XPath más comunes son:
Expresión XPath Coincidencia elemento Elemento de nombre elemento /elemento Elemento de nombre elemento ubicado en la raíz del documento e1/e2 Elemento e2 hijo directo del elemento e1 e1//e2 Elemento e2 descendiente (hijo, nieto, bisnieto…) del elemento e1
//elemento Elemento de nombre elemento ubicado cualquier nivel por debajo de la raíz del documento
@atributo Atributo de nombre atributo * Cualquier elemento @* Cualquier atributo . Nodo actual .. Nodo padre espNom:* Todos los elementos del espacio de nombres de prefijo espNom @espNom:* Todos los atributos del espacio de nombres de prefijo espNom
Ejemplo: formacionprofesional.xml
<?xml version="1.0" encoding="UTF-8"?> <fp> <ciclos> <ciclo siglas="SMR"> <nombre>Sistemas microinformáticos y redes</nombre> <familiaProfesional>Informática y comunicaciones</familiaProfesional> <duracion unidad="horas">2000</duracion> <grado>Medio</grado> </ciclo> <ciclo siglas="DAM">
Lenguaje de marcas y sistemas de gestión de información
Página 6 de 11
<nombre>Desarrollo de aplicaciones multiplataforma</nombre> <familiaProfesional>Informática y comunicaciones</familiaProfesional> <duracion unidad="horas">2000</duracion> <grado>Superior</grado> </ciclo> <ciclo siglas="DAW"> <nombre>Desarrollo de aplicaciones web</nombre> <familiaProfesional>Informática y comunicaciones</familiaProfesional> <duracion unidad="horas">2000</duracion> <grado>Superior</grado> </ciclo> <ciclo siglas="ASIR"> <nombre>Administrador de sistemas informaticos en red</nombre> <familiaProfesional>Informática y comunicaciones</familiaProfesional> <duracion unidad="horas">2000</duracion> <grado>Superior</grado> </ciclo> … </ciclos> <modulos> <modulo codigo="0373"> <nombre>Lenguajes de marcas y sistemas de gestión de información</nombre> <duracion unidad="horas">133</duracion> <curso>1</curso> <ciclos> <ciclo siglas="ASIR"/> <ciclo siglas="DAM"/> <ciclo siglas="DAW"/> </ciclos> </modulo> <modulo codigo="0222"> <nombre>Sistemas operativos monopuesto</nombre> <duracion unidad="horas">140</duracion> <curso>1</curso> <ciclos> <ciclo siglas="SMR"/> </ciclos> </modulo> … </modulos> </fp>
Acceso a elementos/atributos vs acceso a su contenido textual Cuando se escribe una ruta en XPath, por ejemplo a un cierto elemento /persona/nombre, lo
que devuelve es el conjunto de nodos llamados nombre, descendientes de persona,
descendientes del nodo raíz. Si no existiera la ubicación, se devolvería el conjunto vacío.
Para indicar al analizador que lo que se desea es el contenido textual, se utilizará la función
text().
Ejemplo: /persona/nombre/text()
Lenguaje de marcas y sistemas de gestión de información
Página 7 de 11
Para acceder a un atributo dni de persona, se escribirá /persona/@dni. Si se quiere acceder a su
valor, se usará la función data() *Esta función no funciona en todos los gestores.
Ejemplo: /persona/@dni/data()
En XPath 2.0 se usa la misma función string() para ambos casos, según sigue:
/persona/nombre/string()
/persona/dni/string()
Acceso a elementos con rutas simples Son rutas equivalentes a las que indicaríamos en un direccionamiento absoluto en un sistema
Linux, es decir, desde la raíz hasta el elemento del cual queremos extraer la información. La
particularidad respecto a los sistemas de ficheros es que un nodo puede tener varios hijos que
se llamen igual mientras que en un sistema de ficheros no puede haber dos directorios en el
mismo directorio padre que se llamen igual.
Ejemplos:
Todos los elementos hijos del nodo raíz /*
Nombre de ciclos formativos /fp/ciclos/ciclo/nombre
Duración de los módulos profesionales /fp/modulos/modulo/duracion
Elementos que se llamen nombre ubicados en cualquier lugar del documento
//nombre
Siglas de los ciclos formativos /fp/ciclos/ciclo[@siglas]
Todos los elementos de los módulos /fp/modulos/modulo/*
Elementos del lenguaje
Operadores
Operadores booleanos
Operador Codificación alternativa
and
or
not
=
!=
> >
< <
>= >=
<= <=
Operadores aritméticos
Operador Significado
+ Suma
- Resta
* Multiplicación
div División
mod Resto (módulo)
Lenguaje de marcas y sistemas de gestión de información
Página 8 de 11
Otros operadores
Operador Significado
| Unión de resultados
Ejemplo:
Descendientes de /fp de nombre ciclo o modulo que contengan un descendiente directo
nombre cuyo valor se muestra
/fp//(ciclo | modulo)/nombre
Funciones
Funciones numéricas
Función Devuelve Ejemplo
round() Redondeo round(3.14) = 3
abs() Valor absoluto abs(-7) = 7
floor() Suelo floor(7.3) = 7
ceiling() Techo ceiling(7.3)=8
Funciones de cadena
Función Devuelve Ejemplo
substring() Subcadena substring(‘Vivas’, 1,4)=”Viva”
starts-with() Cadena comienza por starts-with(‘XML’, ‘X’)=true
contains() Cadena contiene contains(‘XML’, ‘XM’)=true
normalize-space() Espacios normalizados normalize-space (‘ The end ‘) = ‘The end’
translate() Cambia caracteres en una cadena Translate (‘The end’,’The’, ‘An’ =’An end’
string-length() Longitud de una cadena String-lenght(‘Vivas’) = 5
Ejemplo:
Nombre de los ciclos cuyas siglas empiecen por D:
/fp/ciclos/ciclo[starts-with (@siglas, 'D')]/nombre
Funciones que devuelven elementos por su posición
Función Devuelve
position () = n Elemento que se encuentra en la n-ésima posición
elemento [n] Elemento que se encuentra en la n-ésima posición
last() Elemento último de un conjunto
last()-i El último elemento –i (ej. Si i=1 el penúltimo)
Ejemplo:
Todos los datos del segundo ciclo:
Lenguaje de marcas y sistemas de gestión de información
Página 9 de 11
/fp/ciclos/ciclo[position()=2] ó también /fp/ciclos/ciclo[2]
Todos los datos del último módulo
/fp/modulos/modulo[last()]
Funciones que devuelven nodos
Función Devuelve
name() Nombre del nodo actual
root() El elemento raíz
node() Nodos descendientes del actual
comment() Comentarios
processing-instruction() Instrucciones de procesamiento
Ejemplo
Devuelve el nombre del nodo actual (en este caso ciclo)
/fp/ciclos/ciclo/name()
Todos los comentarios existentes en el documento
//comment()
Todas las instrucciones de procesamiento existentes en el documento
//processing-instruction()
Todos los nodos del árbol cuyo nombre tenga una longitud de cuatro caracteres
//*[string-length (name())=18]
Funciones de agregado
Función Devuelve
count() Conteo de elementos
avg() Media de valores
max() Valor máximo
min() Valor mínimo
sum() Suma de valores
Ejemplo
Nombre de los módulos que se cursan en dos ciclos
/fp/modulos/modulo/ciclos[count(ciclo)>=2]/../nombre
Acceso a elementos con filtros de valores literales Se trata de una extensión de las expresiones anteriores mediante la cual se pueden seleccionar
elementos en función del valor de sus atributos o del propio elemento. En este caso los valores
serán literales.
Ejemplos
Datos de módulo de código 0373
Lenguaje de marcas y sistemas de gestión de información
Página 10 de 11
/fp/modulos/modulo[@codigo='0373']
Ó si se quiere tratar el literal como un número
/fp/modulos/modulo[@codigo=number('0373')]
Duración del ciclo de siglas DAM
/fp/ciclos/ciclo[@siglas='DAM']/duracion
Duración de los módulos impartidos en el ciclo de siglas DAM
/fp/modulos/modulo/ciclos/ciclo[@siglas='DAM']/../../duración
Se pueden combinar múltiples condiciones:
Nombre de los ciclos cuyas siglas se encuentren, en orden alfabético entre ASIR y SMR
/fp/ciclos/ciclo[@siglas>'ASIR' and @siglas<'SMR']/nombre
Acceso a elementos con filtros de valores recuperados Es el mismo caso que el anterior pero con valores recuperados mediante otras expresiones.
Ejemplos
Nombre de los ciclos en los que se cursen módulos de 135 horas o más de duración.
1. En los elementos módulo se seleccionan aquellos que tengan una duración de 135
horas o más y se obtienen las siglas de los ciclos en los que se cursan:
/fp/modulos/modulo[duracion>=135]/ciclos/ciclo[@siglas]
Se muestran los nombres de los elementos ciclo cuyas siglas sean iguales a las extraídas en
el paso primero
/fp/ciclos/ciclo[@siglas]=/fp/modulos/modulo[duración>=135]/ciclos/ciclo[@siglas]
Acceso a elementos mediante ejes En XPath los ejes son expresiones que permiten acceder a trozos del árbol XML, apoyándose en
las relaciones de parentesco entre nodos.
Función Uso
self::* Devuelve el propio nodo de contexto. Equivalente a .
child:: Devuelve los nodos “hijo” del nodo de contexto.
parent::* Devuelve el nodo padre del nodo contexto. Equivale a ..
ancestor::* Devuelve los “antepasados” (padre, abuelo, hasta el nodo raíz) del nodo contexto
ancestor-or-self::* Devuelve los nodos “antepasados” del nodo de contexto además del propio nodo de contexto
descendant::* Devuelve los nodos “descendientes” (hijo, nieto…) del nodo contexto
descendant-or-self::* Devuelve los nodos “descendientes” (hijo, nieto…) del nodo contexto además del propio nodo de contexto. Equivalente a //
Lenguaje de marcas y sistemas de gestión de información
Página 11 de 11
following::* Devuelve los nodos que aparezcan después del nodo de contexto en el documento, excluyendo a los nodos descendientes, los atributos y los nodos de espacio de nombres
preceding::* Devuelve los nodos que aparezcan antes del nodo de contexto en el documento, excluyendo a los nodos ascendientes, los atributos y los nodos del espacio de nombres
preceding-sibling::* Devuelve los “hermanos mayores” del nodo contexto
following-sibling::* Devuelve los “hermanos menores” del nodo de contexto
attribute::* Atributos del nodo contexto. Equivale a @
namespace::* Espacio de nombres del nodo de contexto
Ejemplos
Elementos hermanos menores del segundo módulo:
/fp/modulos/modulo[2]/following-sibling::*
Descendientes del elemento raíz que se llamen nombre
/fp/descendant::nombre ó /fp//nombre
XPath 2.0 La novedad más importante es que dispone de los mismos tipos de datos predefinidos que los
esquemas XML: xs:string, xs:boolean, xs:date…
Aparecen también algunas funciones nuevas como lower-case() o upper-case()para
pasar cadenas de texto a minúsculas y mayúsculas respectivamente.