Igual que en Lenguaje SQL, el XPATH i XQUERY es un lenguaje para realizar , consultas basadas en contenido web.
Para ello hemos de tener creado un XML con su XSL, y ayudándonos del programa QUIZX , podremos realizar consultas sobre estos documentos.
DESCRIPTORES DE CAMINOS:
Sirven para seleccionar elementos que se encuentran en cierto
camino en el ´arbol.
Los descriptores se forman simplemente nombrando tags
separados por /.
Si el descriptor comienza con / se supone que es un camino desde
la ra´ız.
Si el descriptor comienza con // se supone que el camino descrito
puede comenzar en cualquier parte en el ´arbol.
Impl´ıcitamente se supone que todos los descriptores se refieren a
caminos que avanzan en la profundidad del ´arbol.
EJEMPLO:
<#Empresa>
<#departamento telefono="8741460">
<#codigo>B02<#/codigo>
<#nombre>Marketing<#/nombre>
<#empleado salario="200000">
<#rut>10934412<#/rut>
<#nombre>Parra<#/nombre>
<#/empleado>
<#empleado salario="600000">
<#rut>12008991<#/rut>
<#nombre>Chavez<#/nombre>
<#/empleado>
...
<#/departamento>
<#/Empresa>
El desciptor //nombre selecciona la lista
de todos los tag nombre en cualquier
lugar del documento.
En este caso se obtienen los nombres de
los departamentos y de los empleados.
ATRIBUTOS:
Para referirse a los atributos de los elementos se usa @ antes del
nombre, por ejemplo @telefono.
En un descriptor de camino los atributos se nombran como si
fueran tag hijos pero anteponiendo @.
en el ejemplo DEPARTAMENTO TELEFONO="8741460" este último después del =, es su atributo.
CONDICIONES DE SELCCIÓN:
En un descriptor una condici´on entre par´entesis cuadrados [...]
puede seguir al nombre de un tag o atributo (sin usar /).
En este caso se seleccionan los elementos que siguen el camino del
descriptor pero que adem´as cumplen la condici´on especificada.
En las condiciones se pueden usar comparadores (<, >, <=, >=, =,
!=) y conectivos l´ogicos (or, and)
Si en una usamos:
/Empresa/departamento/empleado[@salario > 500000]
selecciona los elementos empleados tales
que su atributo salario es mayor a 500000.
PREDICADOS:
La expresión
\Empresa\departamento[1]\empleado\rut
entrega el rut de los empleados del primer
elemento departamento en el documento.
Por ejemplo la expresión
\Empresa\departamento\empleado[last()]\rut
entregaría el rut del ´ultimo elemento empleado de cada departamento en el árbol, y
\Empresa\departamento\empleado[last()-1]\rut
el rut del penúltimo elemento empleado en
el árbol.
Por ejemplo la expresión
\Empresa\departamento[count(empleado)>1]\codigo
entrega el elemento código de todos los
departamentos que tienen más de un
(elemento) empleado.
AXES:
El descriptor /Empresa/departamento es realmente una forma
abreviada del descriptor /Empresa/child::departamento.
En este ´ultimo se ha hecho explícito el deseo de seguir por los
hijos de Empresa
El @ es simplemente una abreviación de la dirección attribute::
El descriptor
/Empresa/departamento[@telefono = "2354928"] es
entonces una forma abreviada de
/Empresa/child::departamento[attribute::telefono = "2354928"].
La expresión
\\nombre[nombre = ’González’]\parent::empleado\rut
entrega el rut del empleado de nombre González.
La búsqueda se realiza primero encontrando
un nodo nombre con contenido González, se
sigue avanzando hacia el padre que debiera
ser un elemento empleado, y luego al subelemento (hijo) rut.
En general el estandard XPath cuenta con una extensa
funcionalidad.
Por ejemplo funciones para manejo de strings, conversi´on
num´erica, fecha y horas, funciones de agregaci´on t´ıpicas , etc. etc.
Una referencia completa se puede encontrar en este enlace:
XPATH
EJEMPLOS DE XQUERY:
Por ejemplo el siguiente es un camino en XPath (note el archivo
expl´ıcito):
doc("empresa.xml")\Empresa\departamento\empleado[@salario>500000]\nombre
es v´alido tambi´en en XQuery.
Pero usando for-where-return se puede obtener un resultado
equivalente:
for $x in doc("empresa.xml")\Empresa\departamento\empleado
where $x\@salario > 500000
return $x\nombre
En la consulta
for $x in doc("empresa.xml")\Empresa\departamento\empleado
where $x\@salario > 500000
return $x\nombre
• for se usa para seleccionar nodos y almacenarlos en una
variable $x
• where se usa para discriminar algunos de los nodos
seleccionados
• return se usa para especificar que se quiere retornar
Todas las variables en XQuery comienzan con $
En general la sintaxis de una expresi´on simple en XQuery es:
for in
where
return
El where puede ser omitido si se quieren seleccionar todos los
nodos sin restricci´on.
El return puede ser condicional (usando if)y as´ı tener m´as
versatilidad en la salida
Adem´as el return puede especificar m´as que simplemente
expresiones XPath, puede mezclar tags XML que tambi´en se
quieran a la salida
MÁS EJEMPLOS:
En la siguiente expresi´on
for $emp in doc("empresa.xml")\\empleado
return if ($emp\@salario > 1000000)
then {data($emp\nombre)}
else {data($emp\nombre)}
el resultado debiera ser algo como
...
Soto
Perez
Una expresi´on XQuery puede tambi´en llevar un preambulo lo que
nos permite por ejemplo generar p´aginas html:
{
for $emp in doc("empresa.xml")\\empleado
return if ($emp\@salario > 1000000)
then - {data($emp\nombre)}
else - {data($emp\nombre)}
}
Hay mucho que decir acerca de XQuery (tanto o m´as que acerca
de XPath).
Aun no es un estandard en la Web, pero ya est´a siendo muy usado.
Una referencia completa se puede encontrar en el enlace:
XQUERY
a partir del siguiente XML;Crea una consulta XQuery que dé, de resultado una tabla HTML que nos muestre el nombre del curso,
el profesor que lo imparte y el número de places disponibles.
XML:
Normativa ISO9001
80
15
15/03/2013
25/06/22013
Juan Antonio Mercado
3
Calculo diferencial 1
120
20
10/02/2013
20/06/2013
Montserrat Garcia
4
Ingles
29
30
20/01/2013
23/11/2013
Steven Collins
1
Calculo Diferencial 2
100
15
10/01/2013
20/05/2013
Montserrat Garcia
2
Comptabilitat
800
25
10/10/2012
20/05/2013
Elisenda Martinez
2
Informatica
32
10
10/01/2013
20/05/2013
Eduardo Ruiz
5
Consulta:
for $nomb in doc("academia.xml")//academia/curs
let $nombre:=$nomb/nom
let $prof:=$nomb/professor
let $plces:=$nomb/places
return concat(
{data($nombre)}
,"-",
{data($prof)}
,"-",
{data($plces)}
)
crea una nueva consulta pero estableciendo la condición de ser cursos
con una cuota trimestral. Ha de aparecer ordenado según el número de plazas.
Consulta:
for $nomb in doc("academia.xml")//academia/curs
let $nombre:=$nomb/nom
let $prof:=$nomb/professor
let $plces:=$nomb/places
where $nomb/preu/@periodicitat = "trimestral"
order by $plces
return concat({data($nombre)}
,"-",{data($prof)}
,"-",{data($plces)}
)
Crea una consulta XQuery que dé, de resultado una tabla HTML que nos muestre los cursos que
se realizan a la sala número 2 y que el precio sea menor de 35 euros.
Consulta:
for $nomb in doc("academia.xml")//academia/curs
let $nombre:=$nomb/nom
where $nomb/aula = 2 and $nomb/preu < 35
return {data($nombre)}
DESCARGAR QUIZX STUIDIO:
QUIZX STUDIO
Para más info suscribete a Desy Repara