Selecciona el Idioma

domingo, 9 de junio de 2013

XPATH - XQUERY

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

No hay comentarios:

Publicar un comentario