Mundo
del Programador

Expresiones Xquery


Para indicar el documento que se utilizara para la consulta se tiene que escribir la función doc().

Para seleccionar el nombre de los libros escribiremos

                  
                  doc(“BDbiblio.xml”)/Bdlibros/libro/titulo
                

Para poner una condición seriá de este modo

                  
                  doc(“BDbiblio.xml”)/Bdlibros/libro[numPaginas > 300]/titulo
                

Esto serián una manera sencilla de hacer búsquedas y consultas. Una manera mejor seriá utilizar las expresiones FLWOR (For, Let, Where, Order by, Return). Son las mismas expresiones con las mismas caracteristicas de SQL.

El ejemplo de ante se podriá escribir de este módo


                  for $libro in  doc(“BDbiblio.xml”)/Bdlibros/libro
                  where $libro/numPaginas < 300
                  return $libro/autores
                

Significado de estas expresiones:

  • for: asocia una o más variables con cada nodo que encuentre en la colección de datos.
  • let: esta clausula es opcional, permite asociar una varible Xquery al resultado de una consulta Xpath, vincula las variables al resultado de una expresión
  • where: permite establecer una condición, filtrando las tuplas producidas por las clausulas FOR y LET
  • order by: define el orden de presentación de los resultado: puede ser ascendig y descending
  • return: devuelve un valor concreto de los resultados obtenidos de la anteriores clausulas

La diferencia entre for y let consta en:



                  for $d in doc("BDbiblio.xml")/BDlibros/libro/titulo 
                  return <titulos>{ $d }</titulos>
                

                  let $d in doc("BDbiblio.xml")/BDlibros/libro/titulo 
                  return <titulos>{ $d }</titulos>
                

Si una clausula let aparece en una consulta que ya posee una o más cláusulas for, los valores de la variable vinculada por la cláusula let se añaden a cada una de las tuplas generadas por la cláusula for. Vemos un ejemplo:



                  for $b in doc("BDbiblio.xml")//BDlibros/libro 
                  let $c := $b/autores/autor 
                  return <libro>{ $b/titulo, <autores>{ count($c) }</autores>}</libro> 
                

El resultado seriá :

Para insertar nodos se utiliza “as first into doc” para insertarlo al inicio y para isertarlo al final se utiliza “as last into doc”.

Siguiente
Atras