XML

xQuery

XQuery

  • Las instrucciones necesarias para iniciar el servidor eXists desde el terminal de Ubuntu.
cd /home/usuario/eXists/bin/
sudo ./startup.sh
En otro terminal y habiendo confirmado que el servidor se ha iniciado.
cd /home/usuario/eXists/bin/
sudo ./client.sh
  • Crea una colección y dentro de ella otra dos.
mkcol Activitat2
cd Activitat2
exist:/db/Activitat2/> mkcol shakespeare
exist:/db/Activitat2/> mkcol varis
  • Dentro de la colección shakespeare carga los archivos zip. Y dentro de la colección varios el archivo cotxes.xml
Cd shakespeare 
Putzip /home/usuario/shakespeare.zip
cd ..
cd varis
put /home/usuario/*.xml
para ver el documento
edit cotxes.xml
  • Haz una consulta para mostrar los diferentes modelos de coches, especificando el documento.
doc("cotxes.xml")/cotxes/cotxe/model/text()
  • Utilizando el documento restaurant.xml muestra la descripción del segundo plato
for $x in doc("restaurant.xml")/restaurant/plat[2]/descripcio/text()
return $x/descripcio
  • Haz una consulta sobre restaurant.xml sin especificar el documento y muestra el valor del atributo nombre del elemento opciones.
/restaurant/plat[@codi="12"]/opcions[@name]/text()
  • Haz una consulta XQuery para mostrar los títulos y los artistas del los cds de USA, muestralo de la siguiente manera
<cds>
 <cd>
 <title>.....</title>
 <artist>.....</artist>
 </cd>
 <cd>
 <title>....</title>
 <artist>....</artist>
 </cd>
 ....
</cds>
Solución
<cds>
{
for $x in /catalog/cd[country="USA"]
let $titol := $x/title/text()
let $artist := $x/artist/text() order by $x/artist
return
<cd>
<artist>{$artist}</artist>
<titol>{$titol}</titol>
</cd>
}
</cds>

Fes una consulta en los documentos de shakespeare que se muestre de la siguiente manera

<obres>
 <obra>
  <titol>Títol de la obra de teatre</titol>
   <personatges>
    <nom>nom del personatge </nom>
    <nom>.....</nom>
        ......
   </personatges>
 </obra>
</obres>
Solución
<obres>{
for $x in /PLAY
let $titol := $x/TITLE/text()
return
<obra>
<title>{$titol}</title>
<personatges>
{
for $i in $x/PERSONAE//PERSONA
let $nom :=$i/text()
return
<nom>{$nom}</nom>
}
</personatges>
</obra>
}
</obres>
  • Consulta XQuery en shakespeare que muestre todas los titulos de las obras y sus actos
<obres>
{
for $x in /PLAY
let $titol := $x/TITLE/text()
let $actes := count($x/ACT)
return
<obra>
<title>{$titol}</title>
<actes>{$actes}</actes>
</obra>
}
</obres>

xPath

XPath

Nota: Para ver los namespaces que corresponden a cada archivo. En la consola de Exist put archivo.xml o put archivo.rdf

  • El elemento RDF que se encuentra en el primer nivel. Declaramos el namespace que contiene las reglas.
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
/rdf:RDF
  • Selecciona todos los elementos Person
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//foaf:Person
  • Selecciona todos los elemetos descendientes de foaf:Person
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//foaf:Person/*
  • Selecciona de cada documento i de todos los elementos foaf:Person el primero que se encuentra encada documento.
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//foaf:Person[1]
  • Selecciona de cada documento y el ultimo elemento foaf:Person
namespace foaf = "http://xmlns.com/foaf/0.1/";
//foaf:Person[last()]
  • Selecciona todos los atributos rdf:nodeID de los elementos foaf:Person
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//foaf:Person/@rdf:nodeID
  • Mostrar los elementos foaf:givenname que tienen atributo rdf:nodeID
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//foaf:Person[@rdf:nodeID]/foaf:givenname
  • Seleccio elemeto por su id rdf:nodeID el valor 000003
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//foaf:Person[@rdf:nodeID=”000003”]
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//foaf:Person[@rdf:nodeID=”000003”]/foaf:givenname
  • Mostrar foaf:givenname
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//foaf:Person[@rdf:nodeID=”000003”]/foaf:givenname/text()
  • Mostrar elementos que tienen uno de estos intereres foaf:topic_interest “XML” o “BBDD”
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//foaf:Person[foaf:topic_interest=”XML" or foaf:topic_interest=”BBDD”]/foaf:givenname/text()
  • Contar los elemento anteriores
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
count(//foaf:Person[foaf:topic_interest=”XML” or foaf:topic_interest=”BBDD”])
  • Devuelve una cadena de texto con todos los elementos de caso anterior
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; 
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
string(//foaf:Person[foaf:topic_interest=”XML”   or foaf:topic_interest=”BBDD”]) 
  • Devuelve un boolean
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
boolean(//foaf:Person[foaf:topic_interest=”XML”   or foaf:topic_interest=”BBDD”]) 
  • Devuelve los elementos que tiene menos de dos conocidos
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//foaf:Person/foaf:knows[count(foaf:Person)<2]
  • Encuentra todos los elementos que la etiqueta comienza por “rdf”
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//*[starts­with(name(),”rdf”)] 
  • Encuentra todos los elementos en los que la cadena del nombre contenga “knows”
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
//*[contains(name(),”knows”)
  • Buscar en tres documentos escogidos las personas interesadas en XML
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
document('acortesg.rdf','jtallonp.rdf','jhiguerasa')//foaf:Person[foaf:topic_interest="XML"]/foaf:givenname/text()
  • Retornar aquelles persones que el seu nom comença per J
declare namespace foaf = "http://xmlns.com/foaf/0.1/";
declare namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
//foaf:Person/foaf:givenname[starts-with(text(),'J')]/text()