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: forin 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:
Consulta: for $nomb in doc("academia.xml")//academia/curs let $nombre:=$nomb/nom let $prof:=$nomb/professor let $plces:=$nomb/places return concat(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
{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
No hay comentarios:
Publicar un comentario