1
Depa amen o de Lenguajes y Sis emas In o má icos
Escuela Técnica Supe io de Ingenie ía
In o má ica
Uni e sidad de Se illa
A da Reina Me cedes, s/n. 41012 SEVILLA
Fax : 95 455 71 39. Tl : 95 455 71 39. E-mail: [email p o ec ed]
XQue y
J. J. Gu ié ez, M. J. Escalona, M. Mejías, J. To es, D.Villadiego
Uni e sidad de Se illa
Lenguajes y Sis emas In o má icos
España
{ja ie j, escalona, iso o, o es}@lsi.us.es
Se illa, Feb e o de 2005
2
HOJA DE CONTROL DE MODIFICACIONES
Núme o Fecha Desc ipción Au o es
0 06 – 2.004 Desa ollo Inicial Los au o es
1 03 – 2005 Co ecciones del p oceso de
e aluación
Los au o es
3
Índice.
1. In oducción............................................................................................4
1.1. ¿Po qué necesi amos XQue y?.......................................................................... 5
2. De inición de XQue y............................................................................7
2.1. Reque imien os écnicos de XQue y. ................................................................. 7
2.2. Colección de da os de ejemplo. .......................................................................... 8
3. Consul as en XQue y............................................................................11
3.1. Reglas gene ales................................................................................................ 14
3.2. Di e encias en e las cláusulas o y le ............................................................ 15
3.3. Funciones de en ada. ....................................................................................... 17
3.4. Exp esiones condicionales................................................................................ 17
3.5. Cuan i icado es exis enciales:........................................................................... 19
3.6. Ope ado es y unciones p incipales.................................................................. 20
3.7. Comen a ios...................................................................................................... 23
3.8. XQue yX........................................................................................................... 24
3.9. Ejemplos de consul as....................................................................................... 25
4. XQue y y Ja a......................................................................................31
4.1. XQEngine. ........................................................................................................ 31
4.2. Ejecu ando consul as con XQEngine................................................................ 31
4.3. Embebiendo XQEngine en una aplicación Ja a............................................... 35
4.4. O os mo o es XQue y open-sou ce. ................................................................ 37
4.5. O as he amien as elacionadas con XQue y................................................... 37
5. Conclusiones.........................................................................................39
6. Re e encias y enlaces. ..........................................................................40
Apéndice I. Pa ses SAX y DOM..............................................................41
SAX. ........................................................................................................................ 41
DOM........................................................................................................................ 41
Apéndice II. XML Binding......................................................................42
Apéndice III. Xpa h..................................................................................44
Apéndice IV. Conjun o de documen os que desc iben XQue y y XPa h.47
4
1. In oducción.
Ex ensible Ma kup Language[1] (más conocido como XML) es un o ma o pa a
almacena da os ex emadamen e e sá il, u ilizado pa a ep esen a una g an can idad
dis in a de in o mación como, po ejemplo, páginas web (XHTML), mensajes web en e
aplicaciones (SOAP), lib os y a ículos, da os de negocio, ep esen ación de bases de
da os elacionales, in e aces de usua io (XUL), ansacciones inancie as y banca ias,
pa idas de ajed ez, ece as de cocina, azas del sis ema, g á icos ec o iales (SVG),
sindicación de con enidos (RSS), a chi os de con igu ación, documen os de ex o
(OpenO ice.o g) y manusc i os en g iego clásico.
Un conjun o de da os exp esados en XML es una cadena de ex o donde cada
uno de los da os es á delimi ado po e ique as de la o ma <T> ... </T> o se incluye
como a ibu o de una e ique a de la o ma <T A=”...”> ... </T>. Median e es a
ep esen ación es posible exp esa ambién la semán ica de cada uno de los da os.
A con inuación se mues a un conjun o de da os en XML que con iene
in o mación sob e un lib o i ulado “TCP/IP Illus a ed”, esc i o po “S e ens, W.”,
edi ado po “Addison-Wesley” y cuyo p ecio es 69.95.
<bib>
<lib o>
< i ulo>TCP/IP Illus a ed</ i ulo>
<au o >
<apellido>S e ens</apellido>
<nomb e>W.</nomb e>
</au o >
<edi o ial>Addison-Wesley</edi o ial>
<p ecio> 65.95</p ecio>
</lib o>
</bib>
En XML las e ique as se es uc u an en o ma de á bol n-á io. En la igu a 1 se
mues a la es uc u a en á bol del conjun o de da os e e idos al lib o.
5
<bib>
<lib o>
< i ulo> <au o > <edi o ial> <p ecio>
<apellido> <nomb e>
Figu a 1. Rep esen ación en o ma de á bol de un conjun o de e ique as XML.
1.1. ¿Po qué necesi amos XQue y?.
Ac ualmen e, XML se ha con e ido en una he amien a de uso co idiano en los
en o nos de a amien o de in o mación y en los en o nos de p og amación. Sin
emba go, a medida que se emplea en un mayo núme o de p oyec os de complejidad y
amaño c ecien es y la can idad de da os almacenados en XML aumen a, se comp ueba
que, las he amien as más habi uales pa a manipula desde un p og ama un á bol con un
conjun o de da os en XML, los pa se s SAX y DOM1, no son p ác icas pa a maneja
g andes y complejas colecciones de da os en XML.
El p incipal p oblema a la ho a de p ocesa colecciones de da os en XML a bajo
ni el median e pa se s DOM y SAX es la necesidad de esc ibi una g an can idad de
código pa a ealiza el p ocesamien o. Es e código consis e, básicamen e, en eco e un
á bol, pa a un pa se DOM, o de alla una lis a de acciones según la e ique a que se
encuen e pa a pa se SAX.
Pos e io men e a los pa se s DOM y SAX, ha apa ecido una nue a amilia de
he amien as conocidas gené icamen e como bindings2, que, si bien en cie os aspec os
son emendamen e ú iles y aho an una g an can idad de abajo, no son ú iles en odas
las si uaciones en las que se puede u iliza XML.
O a solución exis en e en la ac ualidad es el es ánda XSLT[3] que pe mi e
de ini ans o maciones sob e colecciones da os en XML en o os o ma os, como
HTML o PDF y las he amien as que le dan sopo e. Sin emba go XSLT sólo es
aplicable en los casos en los que desee ob ene una ep esen ación dis in a de los da os,
no cuando se desea localiza una in o mación conc e a den o de dicho conjun o de
da os. Un ejemplo de un escena io donde no es aplicable ninguna de las he amien as
comen adas has a aho a (pa se s, binding y XSLT) lo encon amos a la ho a de
consul a la in o mación en los ac uales se ido es de bases de da os que ya inco po an
1 Pa a una desc ipción del modo de abajo y ca ac e ís icas p incipales de los pa se s SAX y DOM
consul a el apéndice I.
2 Pa a más in o mación sob e la mane a de abaja y un lis ado de he amien as de binding consul a el
apéndice II.
6
unciones pa a pode ob ene los da os en XML o bases de da os XML na i as (Na i e
XML Da abase). El escena io de uso más común se da cuando enemos que ealiza
alguna búsqueda en un documen o o conjun o de documen os con g an can idad de
da os en XML, o bien hemos de abaja sólo sob e un subconjun o de odos los da os
XML y que emos ob ene dicho subconjun o de una o ma sencilla, pa a e i a abaja
con oda la colección de da os.
Da solución a es e escena io de uso median e código esc i o con la ayuda de un
pa se SAX es ápido y sencillo de desa olla si la consul a y la es uc u a de la
in o mación no ienen una g an complejidad. A medida que la consul a a ganando en
complejidad, es necesa io de ini compo amien os más complejos a ejecu a cuando se
encuen e una e ique a y se necesi a un mayo núme o de almacenamien os empo ales
de da os. O o p oblema es que el código es á ue emen e ligado a la es uc u a de los
da os en XML, po lo que cualquie cambio en la consul a o en la es uc u a de los da os
obliga a ol e a esc ibi el código. Además el código esul an e es muy poco
pa ame izable y eu ilizable po lo que pa a desa olla una consul a simila hab ía que
ol e la a esc ibi desde el p incipio, sin pode ap o echa nada de lo esc i o. Da
solución a es e escena io de uso median e código esc i o con la ayuda un pa se DOM
añade, a los p oblemas de eusabilidad, complejidad y ue e acoplamien o an e io es, la
exigencia de ene ca ga los da os en memo ia an es de comenza el eco ido, lo cual
puede esul a imposible pa a g andes olúmenes de da os.
Las he amien as de bindings a o ecen la sencillez en el p oceso de ca ga en
memo ia de los da os, pe o, aplicadas a es e escena io de uso, no acili a la a ea a la
ho a de esc ibi una consul a. P ime o, muchos bindings necesi an los documen os de
de inición de los documen os XML (DTDs o XML-Schemas) pa a pode gene a las
clases y el código de inculación, po lo que si no se ienen y la es uc u a de la
in o mación es compleja puede esul a que el iempo que ganamos con el uso de es as
he amien as lo pe damos esc ibiendo el DTD o XML-Schemas co espondien e.
También exis en he amien as que pueden abaja sin los DTD o XML-Schemas, pe o
en onces es necesa io esc ibi a mano odas las clases necesa ias pa a almacena la
colección de da os en XML. Además es as he amien as siguen eniendo el p oblema de
que equie en ca ga en memo ia odos los da os. Más aún, lo que es amos haciendo es
cambia un conjun o de da os exp esados median e e ique as XML po un conjun o de
da os exp esados po los a ibu os de un conjun o de obje os, po lo que sigue siendo
necesa io esc ibi la algo i mia necesa ia pa a esa consul a, algo i mia poco eu ilizable
en pos e io es consul as.
A la is a de odo lo comen ado has a aho a, se hace necesa ia la apa ición de un
lenguaje que pe mi a de ini de o ma ápida y compac a, consul as o eco idos
complejos sob e colecciones de da os en XML los cuales de uel an odos los nodos que
cumplan cie as condiciones. Es e lenguaje debe se , además, decla a i o, es deci ,
independien emen e de la o ma en que se ealice el eco ido o de donde se encuen en
los da os. Es e lenguaje ya exis e y se llama XQue y.
A lo la go de es e a ículo amos a mos a , con p o usión de ejemplos, las
ca ac e ís icas p incipales de es e lenguaje y amos a mos a como u iliza uno de los
mo o es open-sou ce exis en es pa a inco po a capacidad de p ocesado de consul a
XQue y en nues as aplicaciones.
7
2. De inición de XQue y.
De mane a ápida podemos de ini XQue y con un símil en el que XQue y es a
XML lo mismo que SQL es a las bases de da os elacionales.
XQue y[4][5] es un lenguaje de consul a diseñado pa a esc ibi consul as sob e
colecciones de da os exp esadas en XML. Aba ca desde a chi os XML has a bases de
da os elacionales con unciones de con e sión de egis os a XML. Su p incipal
unción es ex ae in o mación de un conjun o de da os o ganizados como un á bol n-
á io de e ique as XML. En es e sen ido XQue y es independien e del o igen de los
da os. XQue y es un lenguaje uncional, lo que signi ica que, en ez de ejecu a una
lis a de comandos como un lenguaje p ocedimen al clásico, cada consul a es una
exp esión que es e aluada y de uel e un esul ado, al igual que en SQL. Di e sas
exp esiones pueden combina se de una mane a muy lexible con o as exp esiones pa a
c ea nue as exp esiones más complejas y de mayo po encia semán ica.
XQue y es á llamado a se el u u o es ánda de consul as sob e documen os
XML. Ac ualmen e, XQue y es un conjun o de bo ado es3 en el que abaja el g upo
W3C[20]. Sin emba go, a pesa de no ene una edacción de ini i a ya exis en o es án
en p oceso nume osas implemen aciones de mo o es y he amien as que lo sopo an.
2.1. Reque imien os écnicos de XQue y.
El g upo de abajo en XQue y del W3C[20] ha de inido un conjun o de
eque imien os écnicos pa a es e lenguaje. Los más impo an es se de allan a
con inuación.
XQue y debe se un lenguaje decla a i o. Al igual que SQL hay que
indica que se quie e, no la mane a de ob ene lo.
XQue y debe se independien e del p o ocolo de acceso a la colección de
da os. Una consul a en XQue y debe unciona igual al consul a un
a chi o local que al consul a un se ido de bases de da os que al
consul a un a chi o XML en un se ido web.
Las consul as y los esul ados deben espe a el modelo de da os XML
Las consul as y los esul ados deben o ece sopo e pa a los namespace4.
Debe se capaz de sopo a XML-Schemas y DTDs y ambién debe se
capaz de abaja sin ninguno de ellos.
XQue y debe pode abaja con independencia de la es uc u a del
documen o, es o es, sin necesidad de conoce la.
XQue y debe sopo a ipos simples, como en e os y cadenas, y ipos
complejos, como un nodo compues o po a ios nodos hijos.
Las consul an deben sopo a cuan i icado es uni e sales (pa a odo) y
exis enciales (exis e).
3 Pa a e el conjun o comple o de bo ado es y sus URLs consul a el apéndice IV.
4 Un namespace[1] es un espacio de de inición de e ique as que pe mi e que dos diseñado es puedan
u iliza el mismo nomb e de e ique a con dos signi icados semán icos dis in os sin que en en en
con lic o. Dos e ique as con el mismo nomb e decla adas en namespaces di e en es se conside an dos
e ique as di e en es.
8
Las consul as deben sopo a ope aciones sob e je a quías de nodos y
secuencias de nodos.
Debe se posible en una consul a combina in o mación de múl iples
uen es.
Las consul as deben se capaces de manipula los da os
independien emen e del o igen de es os.
Median e XQue y debe se posible de ini consul as que ans o men las
es uc u as de in o mación o iginales y debe se posible c ea nue as
es uc u as de da os.
El lenguaje de consul a debe se independien e de la sin axis, es o es,
debe se posible que exis an a ias sin axis dis in as pa a exp esa una
misma consul a en XQue y.
Aunque XQue y y SQL puedan conside a se simila es en casi la o alidad de sus
aspec os, el modelo de da os sob e el que se sus en a XQue y es muy dis in o del
modelo de da os elacional sob e el que sus en a SQL, ya que XML incluye concep os
como je a quía y o den de los da os que no es án p esen es en el modelo elacional. Po
ejemplo, a di e encia de SQL, en XQue y el o den es que se encuen en los da os es
impo an e y de e minan e, ya que no es lo mismo busca una e ique a <B> den o de
una e ique a <A> que odas las e ique as <B> del documen o (que pueden es a
anidadas den o de una e ique a <A> o ue a).
XQue y ha sido cons uido sob e la base de Xpa h[3]. Xpa h5 es un lenguaje
decla a i o pa a la localización de nodos y agmen os de in o mación en á boles XML.
XQue y se basa en es e lenguaje pa a ealiza la selección de in o mación y la i e ación
a a és del conjun o de da os.
2.2. Colección de da os de ejemplo.
En los ejemplos de consul as que e emos a lo la go de es e abajo, amos a
abaja con un conjun o de da os compues o po ichas de a ios lib os almacenadas en
un a chi o local llamado “lib os.xml”, cuyo con enido se mues a a con inuación.
<?xml e sion="1.0" encoding="ISO-8859-1"?>
<bib>
<lib o año="1994">
< i ulo>TCP/IP Illus a ed</ i ulo>
<au o >
<apellido>S e ens</apellido>
<nomb e>W.</nomb e>
</au o >
<edi o ial>Addison-Wesley</edi o ial>
<p ecio> 65.95</p ecio>
</lib o>
<lib o año="1992">
< i ulo>Ad an P og amming o Unix en i onmen </ i ulo>
<au o >
5 Pa a más in o mación sob e XPa h consul a el apéndice III y el apéndice IV.
9
<apellido>S e ens</apellido>
<nomb e>W.</nomb e>
</au o >
<edi o ial>Addison-Wesley</edi o ial>
<p ecio>65.95</p ecio>
</lib o>
<lib o año="2000">
< i ulo>Da a on he Web</ i ulo>
<au o >
<apellido>Abi eboul</apellido>
<nomb e>Se ge</nomb e>
</au o >
<au o >
<apellido>Buneman</apellido>
<nomb e>Pe e </nomb e>
</au o >
<au o >
<apellido>Suciu</apellido>
<nomb e>Dan</nomb e>
</au o >
<edi o ial>Mo gan Kau mann edi o ials</edi o ial>
<p ecio>39.95</p ecio>
</lib o>
<lib o año="1999">
< i ulo> Economics o Technology o Digi al TV</ i ulo>
<edi o >
<apellido>Ge ba g</apellido>
<nomb e>Da cy</nomb e>
<a iliacion>CITI</a iliacion>
</edi o >
<edi o ial>Kluwe Academic edi o ials</edi o ial>
<p ecio>129.95</p ecio>
</lib o>
</bib>
A con inuación se mues a el con enido del DTD co espondien e al a chi o
"lib os.xml".
<!ELEMENT bib (lib o* )>
<!ELEMENT lib o ( i ulo,(au o + | edi o + ),edi o ial, p ecio )>
<!ATTLIST lib o yea CDATA #REQUIRED >
<!ELEMENT au o (apellido, nomb e )>
<!ELEMENT edi o (apellido, nomb e, a iliacion )>
<!ELEMENT i ulo (#PCDATA )>
<!ELEMENT apellido (#PCDATA )>
<!ELEMENT nomb e (#PCDATA )>
<!ELEMENT a iliacion (#PCDATA )>
<!ELEMENT edi o ial (#PCDATA )>
16
Como se puede e compa ando los esul ados ob enidos po ambas consul as, la
cláusula o incula una a iable con cada nodo que encuen e en la colección de da os.
En es e ejemplo la a iable $d a inculándose a cada uno de los í ulos de odos los
lib os del a chi o "lib os.xml", c eando una upla po cada í ulo. Po es e mo i o
apa ece epe ido el pa de e ique as < i ulos>...</ i ulos> pa a cada í ulo. La cláusula
le , en cambio, incula una a iable con odo el esul ado de una exp esión. En es e
ejemplo, la a iable $d se incula a odos los í ulos de odos los lib os del a chi o
"lib os.xml", c eando una única upla con odos esos í ulos. Po es e mo i o solo
apa ece el pa de e ique as < i ulos>...</ i ulos> una única ez.
Si una cláusula le apa ece en una consul a que ya posee una o más cláusulas o ,
los alo es de la a iable inculada po la cláusula le se añaden a cada una de las uplas
gene adas po la cláusula o . Un ejemplo se mues a en la siguien e consul a:
o $b in doc("lib os.xml")//lib o
le $c := $b/au o
e u n
<lib o>{ $b/ i ulo, <au o es>{ coun ($c) }</au o es>}</lib o>
Es a consul a de uel e el í ulo de cada uno de los lib os de a chi o "lib os.xml"
jun o con el núme o de au o es de cada lib o. El esul ado de es a consul a se mues a a
con inuación:
<lib o>
< i ulo>TCP/IP Illus a ed</ i ulo>
<au o es>1</au o es>
</lib o>
<lib o>
< i ulo>Ad anced P og amming in he UNIX
En i onmen </ i ulo>
<au o es>1</au o es>
</lib o>
<lib o>
< i ulo>Da a on he Web</ i ulo>
<au o es>3</au o es>
</lib o>
<lib o>
< i ulo>The Economics o Technology and Con en o
Digi al TV</ i ulo>
<au o es>0</au o es>
</lib o>
Si en la consul a apa ece más de una cláusula o (o más de una a iable en una
clásula o ), el esul ado es el p oduc o ca esiano de dichas a iables, es deci , las
uplas gene adas cub en odas las posibles combinaciones de los nodos de dichas
a iables. Un ejemplo se mues a en la siguien e consul a, la cual de uel e los í ulos de
odos los lib os con enidos en el a chi o “lib os.xml” y odos los comen a ios de cada
lib o con enidos en el a chi o “comen a ios.xml”.
17
o $ in doc("books.xml")// i ulo,
$e in doc("comen a ios.xml")//en ada
whe e $ = $e/ i ulo
e u n <comen a io>{ $ , $e/comen a io }</comen a io>
El esul ado de es a consul a se mues a a con inuación.
<comen a io>
< i ulo>Da a on he Web</ i ulo>
<comen a io>Un lib o muy bueno sob e bases de
da os.</comen a io>
</comen a io>
<comen a io>
< i ulo>Ad anced P og amming in he Unix
en i onmen </ i ulo>
<comen a io>Un lib o cla o y de allado de p og amación en
UNIX.</comen a io>
</comen a io>
<comen a io>
< i ulo>TCP/IP Illus a ed</ i ulo>
<comen a io>Uno de los mejo es lib os de
TCP/IP.</comen a io>
</comen a io>
3.3. Funciones de en ada.
XQue y u iliza las unciones de en ada en las cláusulas o o le o en
exp esiones XPa h pa a iden i ica el o igen de los da os. Ac ualmen e el bo ado de
XPa h y XQue y de ine dos unciones de en ada dis in as, doc(URI) y collec ion(URI).
La unción doc(URI) de uel e el nodo documen o, o nodo aíz, del documen o
e e enciado po un iden i icado uni e sal de ecu sos (URI). Es a es la unción más
habi ual pa a accede a la in o mación almacenada en a chi os.
La unción collec ion(URI) de uel e una secuencia de nodos e e enciados po
una URI, sin necesidad de que exis a un nodo documen o o nodo aíz. Es a es la unción
más habi ual pa a accede a la in o mación almacenada en una base de da os que enga
capacidad pa a c ea es uc u as de da os XML.
3.4. Exp esiones condicionales.
Además de la cláusula whe e, XQue y ambién sopo a exp esiones
condicionales del ipo “i - hen-else” con la misma semán ica que en los lenguajes de
p og amación más habi uales (C, Ja a, Delphi, e c..). Po ejemplo, la siguien e consul a
de uel e los í ulos de odos los lib os almacenados en el a chi o "lib os.xml" y sus dos
p ime os au o es. En el caso de que exis an más de dos au o es pa a un lib o, se añade
un e ce au o "e al.".
18
o $b in doc("lib os.xml")//lib o
e u n
<lib o>
{ $b/ i ulo }
{
o $a a $i in $b/au o
whe e $i <= 2
e u n <au o >{s ing($a/las ), ", ",
s ing($a/ i s )}</au o >
}
{
i (coun ($b/au o ) > 2)
hen <au o >e al.</au o >
else ()
}
</lib o>
El esul ado de es a consul a se mues a a con inuación.
<lib o>
< i ulo>TCP/IP Illus a ed</ i ulo>
<au o >S e ens, W.</au o >
</lib o>
<lib o>
< i ulo>Ad anced P og amming in he Unix
En i onmen </ i ulo>
<au o >S e ens, W.</au o >
</lib o>
<lib o>
< i ulo>Da a on he Web</ i ulo>
<au o >Abi eboul, Se ge</au o >
<au o >Buneman, Pe e </au o >
<au o >e al.</au o >
</lib o>
La cláusula whe e de una consul a pe mi e il a las uplas que apa ece án en el
esul ado, mien as que una exp esión condicional nos pe mi e c ea una u o a
es uc u a de nodos en el esul ado que dependa de los alo es de las uplas il adas.
A di e encia de la mayo ía de los lenguajes, la cláusula else es obliga o ia y debe
apa ece siemp e en la exp esión condicional. El mo i o de es o es que oda exp esión
en XQue y debe de ol e un alo . Si no exis e ningún alo a de ol e al no cumpli se
la cláusula i , de ol emos una secuencia acía con ‘else ()’, al y como se mues a en el
ejemplo an e io .
19
3.5. Cuan i icado es exis enciales:
XQue y sopo a dos cuan i icado es exis enciales llamados “some” y “e e y”, de
al mane a que nos pe mi e de ini consul as que de uel a algún elemen o que sa is aga
la condición (“some”) o consul as que de uel an los elemen os en los que odos sus
nodos sa is agan la condición (“e e y”). Po ejemplo, la siguien e consul a de uel e los
í ulos de los lib os en los que al menos uno de sus au o es es W. S e ens.
o $b in doc("lib os.xml")//lib o
whe e some $a in $b/au o
sa is ies ($a/las ="S e ens" and $a/ i s ="W.")
e u n $b/ i ulo
El esul ado de es a consul a se mues a a con inuación
< i le>TCP/IP Illus a ed</ i le>
< i le>Ad anced P og amming in he Unix En i onmen </ i le>
La siguien e consul a de uel e odos los í ulos de los lib os en los que odos los
au o es de cada lib o es W. S e ens.
o $b in doc("lib os.xml")//lib o
whe e e e y $a in $b/au o
sa is ies ($a/las ="S e ens" and $a/ i s ="W.")
e u n $b/ i ulo
El esul ado de es a consul a se mues a en el siguien e pá a o.
< i ulo>TCP/IP Illus a ed</ i ulo>
< i ulo>Ad anced P og amming in he Unix En i onmen </ i ulo>
< i ulo>The Economics o Technology and Con en o Digi al
TV</ i ulo>
El úl imo í ulo de uel o como esul ado de la consul a es un lib o que no iene
au o es. Cuando un cuan i icado uni e sal se aplica sob e un nodo acío, siemp e
de uel e cie o, como se e en el ejemplo an e io .
O o ejemplo. La siguien e consul a de uel e los í ulos de los lib os que
mencionen “Unix” y “p og aming” en el mismo pá a o. Si el lib o iene más de un
pá a o solo es necesa io que apa ezca en, al menos, uno de ellos. Es o lo indicamos con
la palab a ese ada “some” jus o a con inuación de whe e.
20
o $b in doc("bib.xml")//lib o
whe e some $p in $b//pa a o sa is ies
(con ains($p,"Unix") AND con ains($p,"p og aming"))
e u n $b/ i le
O o ejemplo. La siguien e consul a de uel e el í ulo de odos los lib os que
mencionen “p og aming” en cada uno de los pá a os de los lib os almacenados en
“bib.xml”.
o $b in doc("bib.xml")//lib o
whe e e e y $p in $b// pa a o sa is ies
con ains($p,"p og aming")
e u n $b/ i le
Es a consul a es dis in a de la an e io ya que no es su icien e que “p og aming”
apa ezca en al menos uno de los pá a os, sino que debe apa ece en odos los pá a os
que exis an. Es o lo indicamos con la palab a ese ada “e e y” jus o a con inuación de
“whe e”.
3.6. Ope ado es y unciones p incipales.
El conjun o de unciones y ope ado es sopo ado po XQue y 1.0 es el mismo
conjun o de unciones y ope ado es u ilizado en XPa h 2.0 y XSLT 2.0.
XQue y sopo a ope ado es y unciones ma emá icas, de cadenas, pa a el
a amien o de exp esiones egula es, compa aciones de echas y ho as, manipulación de
nodos XML, manipulación de secuencias, comp obación y con e sión de ipos y lógica
booleana. Además pe mi e de ini unciones p opias y unciones dependien es del
en o no de ejecución del mo o XQue y. Los ope ado es y unciones más impo an es se
mues an en la abla 2 y se de allan a lo la go de es e apa ado.
Ma emá icos:
+, -, *, di (*), idi (*), mod.
Compa ación: =, !=, <, >, <=, >=, no ()
Secuencia: union (|), in e sec , excep
Redondeo: loo (), ceiling(), ound().
Funciones de ag upación: coun (), min(), max(), a g(), sum().
Funciones de cadena: conca (), s ing-leng h(), s a s-
wi h(), ends-wi h(), subs ing(),
uppe -case(), lowe -case(), s ing()
Uso gene al: dis inc - alues(), emp y(), exi s()
Tabla 2. P incipales ope ado es y unciones de XQue y
21
(*) La di isión se indica con el ope ado ‘di ’ ya que el símbolo ‘/’ es necesa io
pa a indica caminos. El ope ado ‘idi ’ es pa a di isiones con en e os en las que se
igno a el es o.
El esul ado de un ope ado a i mé ico en el que uno, o ambos, de los ope andos
sea una cadena acía es una cadena acía. Como egla gene al el uncionamien o de las
cadenas acías en XQue y es análogo al uncionamien o de los alo es nulos en SQL.
El ope ado unión ecibe dos secuencias de nodos y de uel e una secuencia con
odos los nodos exis en es en las dos secuencias o iginales. A con inuación se mues a
una consul a que usa el ope ado unión pa a ob ene una lis a o denada de apellidos de
odos los au o es y edi o es:
o $l in dis inc - alues(doc("lib os.xml")
//(au o | edi o )/apellido)
o de by $l
e u n <apellidos>{ $l }</apellidos>
El esul ado de es a consul a se mues a en el siguien e pá a o:
<apellidos>Abi eboul</apellidos>
<apellidos>Buneman</apellidos>
<apellidos>Ge ba g</apellidos>
<apellidos>S e ens</apellidos>
<apellidos>Suciu</apellidos>
El ope ado de in e sección ecibe dos secuencias de nodos como ope andos y
de uel e una secuencia con eniendo odos los nodos que apa ezcan en ambos
ope andos.
El ope ado de sus acción (excep ) ecibe dos secuencias de nodos como
ope andos y de uel e una secuencia con eniendo odos los nodos del p ime ope ando
que no apa ezcan en el segundo ope ando. A con inuación se mues a una consul a que
usa el ope ado sus acción pa a ob ene un nodo lib o con odos sus nodos hijos sal o
el nodo <p ecio>.
o $b in doc("lib os.xml")//lib o
whe e $b/ i ulo = "TCP/IP Illus a ed"
e u n
<lib o>
{ $b/@* }
{ $b/* excep $b/p ecio }
</lib o>
El esul ado de es a consul a se mues a a con inuación.
22
<lib o yea = "1994">
< i le>TCP/IP Illus a ed</ i le>
<au ho >
<apellidos>S e ens</apellidos>
< i s >W.</ i s >
</au ho >
<publishe >Addison-Wesley</publishe >
</lib o>
La unción dis inc - alues() ex ae los alo es de una secuencia de nodos y c ea
una nue a secuencia con alo es únicos, eliminando los nodos duplicados. Po ejemplo,
la siguien e consul a de uel e odos los apellidos dis in os de los au o es.
o $l in dis inc - alues(doc("lib os.xml")//au o /apellidos)
e u n <apellidos>{ $l }</apellidos>
El esul ado de es a consul a se mues a en el siguien e pá a o.
<apellidos>S e ens</apellidos>
<apellidos>Abi eboul</apellidos>
<apellidos>Buneman</apellidos>
<apellidos>Suciu</apellidos>
La unción emp y() de uel e cie o cuando la exp esión en e pa én esis es á
acía. Po ejemplo, la siguien e consul a de uel e odos los nodos lib o que engan al
menos un nodo au o .
o $b in doc("lib os.xml")//lib o
whe e no (emp y($b/au o ))
e u n $b
El esul ado de es a consul a se mues a a con inuación.
<lib o año="1994">
< i ulo>TCP/IP Illus a ed</ i ulo>
<au o >
<apellido>S e ens</apellido>
<nomb e>W.</nomb e>
</au o >
<edi o ial>Addison-Wesley</edi o ial>
<p ecio> 65.95</p ecio>
</lib o>
23
<lib o año="1992">
< i ulo>Ad an P og amming o Unix en i onmen </ i ulo>
<au o >
<apellido>S e ens</apellido>
<nomb e>W.</nomb e>
</au o >
<edi o ial>Addison-Wesley</edi o ial>
<p ecio>65.95</p ecio>
</lib o>
<lib o año="2000">
< i ulo>Da a on he Web</ i ulo>
<au o >
<apellido>Abi eboul</apellido>
<nomb e>Se ge</nomb e>
</au o >
<au o >
<apellido>Buneman</apellido>
<nomb e>Pe e </nomb e>
</au o >
<au o >
<apellido>Suciu</apellido>
<nomb e>Dan</nomb e>
</au o >
<edi o ial>Mo gan Kau mann edi o ials</edi o ial>
<p ecio>39.95</p ecio>
</lib o>
La unción opues a a emp y() es exis s(), la cual de uel e cie o cuando una
secuencia con iene, al menos, un elemen o. Po ejemplo, como la consul a an e io iene
una cláusula whe e que comp ueba una negación sob e emp y(), podemos esc ibi la
usando la unción exis s() al y como se mues a a con inuación:
o $b in doc("lib os.xml")//lib o
whe e exis s($b/au o )
e u n $b
El esul ado de es a consul a es el mismo que el esul ado de la consul a an e io .
3.7. Comen a ios.
Los comen a ios en XQue y, a di e encia de XML, an ence ados en e ca as
son ien es, al y como se mues a a con inuación.
(: Es o es un comen a io, y pa ece muy eliz :)
24
La sin axis de comen a io usada en XML no es aplicable a XQue y sal o que la
consul a se esc iba con la sin axis XQue yX, como se e á más adelan e.
3.8. XQue yX.
Como hemos is o, uno de los eque imien os de XQue y es que debe pe mi i
u iliza di e en es sin axis pa a edac a las consul as. XQue yX es un ejemplo de
sin axis al e na i a pa a XQue y.
XQue yX es la especi icación de una sin axis al e na i a pa a XQue y que
pe mi e de ini una consul a XQue y median e e ique as XML. Con una sin axis basada
en XML es más sencillo analiza las consul as median e el uso de he amien as
es ánda es y gene a y consul a los con enidos de la consul a. Es o es ú il, po ejemplo,
pa a op imizaciones a ni el de código uen e que dependen de la capacidad de
inspecciona de o ma ápida y sencilla el código de una consul a.
Sin emba go, el bo ado de XQue yX no ha sido ac ualizado desde su c eación
en el año 2.001, ni el g upo de abajo de XQue y ha hecho ningún comen a io al
espec o sob e es a sin axis, po lo que su u u o es bas an e incie o.
Como ejemplo amos a e una sencilla consul a que de uel e la lis a de odos
los au o es de lib os. Con la sin axis de XQue y es a consul a se esc ibi ía como se
mues a a con inuación:
le $au o es := /lib o/au o
e u n
<au o es>
{
$au o es
}
</au o es>
A con inuación se mues a la misma consul a esc i a con la sin axis XQue yX.
<q:que y xmlns:q="h p://www.w3.o g/2001/06/XQue yx">
<q: lw >
<q:le Assignmen a iable="$au o es">
<q:s ep axis="CHILD">
<q:iden i ie />
<q:s ep axis="CHILD">
<q:iden i ie >lib o</q:iden i ie >
<q:iden i ie >au o </q:iden i ie >
</q:s ep>
</q:s ep>
</q:le Assignmen >
<q: e u n>
<q:elemen Cons uc o >
<q: agName>
<q:iden i ie >au o es</q:iden i ie >
</q: agName>
<q: a iable>$au o es</q: a iable>
</q:elemen Cons uc o >
25
</q: e u n>
</q: lw >
</q:que y>
A con inuación se mues a el esul ado de ambas consul as.
<au o es>
<au o >
<apellido>S e ens</apellido>
<nomb e>W.</nomb e>
</au o >
<au o >
<apellido>S e ens</apellido>
<nomb e>W.</nomb e>
</au o >
<au o >
<apellido>Abi eboul</apellido>
<nomb e>Se ge</nomb e>
</au o >
<au o >
<apellido>Buneman</apellido>
<nomb e>Pe e </nomb e>
</au o >
<au o >
<apellido>Suciu</apellido>
<nomb e>Dan</nomb e>
</au o >
</au o es>
3.9. Ejemplos de consul as
Como ya hemos is o, la consul a más sencilla posible en XQue y es una
exp esión en XPa h, po ejemplo:
documen ("lib os.xml")//lib o[ i ulo="Rico a Pie"]
La exp esión an e io de uel e odos los nodos <lib o> que engan un hijo
< i ulo> con el alo “Rico a Pie” del conjun o de da os almacenado en el a chi o
“lib os.xml”. El o den de los lib os se á, po de ec o, el mismo o den en que apa ecen
en el documen o “lib os.xml”.
Pa iendo del conjun o de da os de allados en el apa ado 2.2, amos a esc ibi
una se ie de consul as y a mos a cuales se ian los esul ados ob enidos.
Esc ibi una consul a que ob enga el nomb e y el año de odos los lib os
publicados po Addison-Wesley después de 1991. El código de la consul a se á:
32
Figu a 5. In e az de SampleApp
“SampleApp” ca ga e indexa un conjun o de a chi os XML con da os de
ejemplo pa a pode ejecu a consul as sob e ellos. Es os iche os son: "bib.xml",
" e iews.xml", "book.xml", " epo 1.xml", "bib_2.xml", "nsTes _1.xml",
"nsTes _2.xml", "nsTes _3.xml" y "Bug_10jan04_1.xml" y ambién se dis ibuyen
jun o con XQEngine.
La aplicación no o ece ninguna o ma de indica que a chi os XML que emos
que se ca guen e indexen al inicio. La única mane a de ag ega nues os p opios
a chi os es modi ica di ec amen e el código de la clase “SampleApp.ja a”.
Conc e amen e, en el mé odo “ un()” de dicha clase se indica el nomb e de los a chi os
XML que debe ca ga e indexa SampleApp. Pa a añadi el a chi o que enimos usando
como base pa a los ejemplos, “lib os.xml”, suponiendo que se encuen a en la misma
ca pe a que los a chi os an e io es, añadimos a la clase SampleApp la siguien e línea.
33
public oid un()
{
[…..]
m_engine.se Documen (“lib os.xml”);
[…..]
}
Aho a, al ejecu a la aplicación, inclui á en su índice de a chi os al a chi o
“lib os.xml”.
Pa a ejecu a una consul a hay que edac a la en la mi ad supe io de la en ana.
Una ez comple ada la consul a es necesa io pulsa dos eces la ecla “En e ” pa a que
la aplicación la ejecu e y mues e los esul ados en la mi ad in e io de la en ana. En la
igu a 6 se mues a un ejemplo de consul a, en la mi ad supe io , y de sus esul ados, en
la mi ad in e io .
Figu a 6. Ejemplo de consul a y esul ados.
Tan o la mi ad de edición de la consul a como la mi ad que mues a los
esul ados sopo an copia (CTRL+C) y pega (CTRL+V), pe o no deshace .
Si la consul a no es á bien esc i a, en la mi ad in e io de la pan alla de la
aplicación ob end emos un mensaje de: “In alidQue yExcep ion”. Un mensaje de e o
más desc ip i o se en ía a la salida es ánda . Po ejemplo, en la igu a 7 se mues a el
mensaje de e o ob enido al in en a ejecu a la consul a an e io sin esc ibi la cláusula
o .
34
Figu a 7. Consul a e ónea.
Y en la salida es ánda ob enemos el siguien e mensaje, bas an e más desc ip i o
que el an e io .
com. a dog.xmlEngine.excep ions.In alidQue yExcep ion:
Encoun e ed "$" a line 3, column 6
.
Was expec ing one o :
"o " ...
"and" ...
" o" ...
"=" ...
"is" ...
"!=" ...
"isno " ...
"<=" ...
"<<" ...
">=" ...
">>" ...
"eq" ...
"ne" ...
"g " ...
"ge" ...
"l " ...
"le" ...
"<" ...
35
">" ...
"[" ...
"," ...
"}" ...
"/" ...
"//" ...
"(" ...
Ni es a aplicación ni XQEngine sopo an la sin axis XQue yX pa a la edacción
de las consul as.
4.3. Embebiendo XQEngine en una aplicación Ja a.
Pa a mos a como u iliza XQEngine como componen e en nues as
aplicaciones Ja a amos a desa olla un sencillo ejemplo. Es e ejemplo ejecu a á una
consul a sob e el a chi o “lib os.xml” y mos a á el esul ado de la consul a po
pan alla.
Pa a implemen a el ejemplo amos a c ea una clase llamada
“EjemploXQEngine” que con enga un único mé odo “main” que con end á odo el
código necesa io pa a el ejemplo. El código comple o de la clase se mues a a
con inuación.
impo com. a dog.xmlEngine.Resul Lis ;
impo com. a dog.xmlEngine.XQEngine;
impo com. a dog.xmlEngine.excep ions.*;
impo ja ax.xml.pa se s.*;
impo o g.xml.sax.XMLReade ;
public class EjemploXQEngine
{
public s a ic oid main(S ing[] a gs)
{
S ing que y = "<bib> { "
+ " o $b in doc( "lib os.xml ")/bib/lib o"
+ " whe e $b/edi o ial = "Addison-Wesley "”
+ “ and $b/@año > 1991 "
+ " e u n "
+ " <lib o> { $b/ i ulo } </lib o>"
+ " } </bib> ";
XQEngine engine;
engine = new XQEngine();
SAXPa se Fac o y sp = SAXPa se Fac o y.newIns ance();
y
36
{
SAXPa se pa se = sp .newSAXPa se ();
XMLReade eade = pa se .ge XMLReade ();
engine.se XMLReade ( eade );
engine.se Documen ( "lib os.xml" );
Resul Lis esul s = engine.se Que y( que y );
Sys em.ou .p in ln( esul s. oS ing() );
Sys em.ou .p in ln( “----------------------“ );
Sys em.ou .p in ln( esul s.emi Xml() );
}
ca ch( Excep ion e )
{
e.p in S ackT ace();
}
}
};
En los siguien es pá a os se de alla el uncionamien o del código an e io .
En p ime luga , c ea una ins ancia del mo o XQEngine es an sencillo como
decla a una a iable de ipo XQEngine y c ea un nue o obje o de ese ipo. Sin
emba go, an es de que el mo o de XQEngine, pueda unciona necesi a dos elemen os:
el p ime o es un pa se SAX pa a lee los documen os XML. En es e ejemplo se ha
op ado po usa el pa se SAX de SUN po se el más di undido ya que iene con la
dis ibución de J2EE, pe o o os pa se s, como el que se incluye en el componen e
Xe ces[19] de Apache, son pe ec amen e álidos.
El segundo elemen o que XQEngine necesi a es el conjun o de a chi os XML
que con ienen los da os sob e los que se an a ejecu a las consul as. XQEngine necesi a
conoce p e iamen e es os a chi os pa a pode indexa los an es de ealiza ninguna
consul a. En es e ejemplo solo u ilizamos un a chi o “lib os.xml” pe o, en p incipio,
XQEngine no impone ninguna limi ación sob e el núme o de a chi os que podamos
ca ga e indexa .
Una ez ob enido un obje o XQEngine, es posible ealiza an as consul as como
se desee. Al ejecu a una consul a, XQEngine de uel e el esul ado en un obje o de ipo
Resul Lis . El mé odo de es e obje o oS ing() de uel e las es adís icas de la consul a y
el mé odo emi Xml() de uel e el esul ado como un S ing .
El esul ado de la ejecución de la clase “EjemploXQEngine” se mues an a
con inuación.
Resul Lis . oS ing():
NumDocumen s = 1
NumTo alI ems = 1
NumValidI ems = 1
Documen id = -1 ["QUERY_DOCUMENT"]
NumTo alI ems = 1
37
NumValidI ems = 1
[0][0] <bib> [pa en =-1]
----------------------
<bib><lib o>< i ulo>TCP/IP
Illus a ed</ i ulo></lib o><lib o>< i ulo>Ad an P og amming o
Unix en i onmen </ i ulo></lib o></bib>
4.4. O os mo o es XQue y open-sou ce.
En es e apa ado se enume an los mo o es XQue y open-sou ce más ele an es y
sus ca ac e ís icas p incipales.
Qexo: Qexo[8] es un mo o XQue y esc i o en Ja a y con licencia GPL que se
dis ibuye in eg ado den o del paque e Kawa.
Saxon:
Saxon[10] es o o mo o XQue y esc i o en Ja a que se dis ibuye en dos
paque es, uno de ellos, Saxon-B es open-sou ce bajo licencia GPL y con iene una
implemen ación básica de XSLT 2.0 y XQue y, mien as que el segundo paque e,
Saxon-SA, con iene un p ocesado comple o XSLT y XQue y pe o iene licencia
p opie a ia, aunque es á disponible una licencia de e aluación de 30 días.
Qizx/open:
Qizx/open[9] es una implemen ación Ja a de la úl ima e sión de las
especi icaciones XQue y. Implemen a odas las ca ac e ís icas del lenguaje excep o la
impo ación y alidación de XML-Schemas. Ac ualmen e es e es el mo o con licencia
GPL más comple o que exis e.
4.5. O as he amien as elacionadas con XQue y.
En es e apa ado se desc iben b e emen e o as he amien as elacionadas con
XQue y.
Xqua k B idge:
XQua k B idge[16] es una he amien a que pe mi e impo a y expo a da os a
bases de da os elacionales u ilizando XML. De es e modo, XQua k o ece la
posibilidad de maneja es uc u as XML y ealiza la ans o mación a obje os de la
base de da os, siendo capaz ambién de ealiza el paso con a io. Además de odo es o
XQua k es capaz de espe a odas las es icciones de in eg idad y ans o ma las
elaciones implíci as en los documen os XML en elaciones explíci as en la base de
da os y odo ello con un buen endimien o.
XQua k-B idge sopo a ambién la consul a y manipulación de los da os en
o ma o XML u ilizando el lenguaje XQue y.
XQua k-B idge sopo a MySQL, O acle, SQLSe e y Sybase, iene una
licencia LGPL.
38
BumbleBee:
BumbleBee[7] es un en o no de p ueba au omá ico c eado con el in de e alua
mo o es de XQue y y alida consul as esc i as en sin axis XQue y. BumbleBee pe mi e
e alua que g ado de sa is acción de los bo ado es del es ánda y especi icaciones
sa is ace un mo o XQue y y comp oba si una e sión más mode na de nues o mo o
pe mi e segui ejecu ando nues as consul as.
BumbleBee se dis ibuye con un conjun o de p uebas ya p epa adas y, además,
o ece un en o no sencillo pa a edac a y ejecu a nues as p opias p uebas.
Ac ualmen e sopo a los mo o es XQue y open-sou ce: Qexo[8], Qizx/open[9] y
Saxon[10] y los mo o es XQue y p opie a ios: Ce isen [11], Ipedo[12], IPSI-XQ[13] y
X-Hi e[14].
BumbleBee es so wa e p opie a io aunque es á disponible pa a desca ga una
e sión de demos ación comple amen e uncional du an e 30 días.
39
5. Conclusiones
XQue y es en la ac ualidad, y a pesa de es a aún en ase de bo ado , una
ecnología eme gen e con g andes expec a i as en el mundo de la p og amación y del
a amien o y manipulación de in o mación como lo demues a el núme o de emp esas
que es án apos ando po desa olla implemen aciones de mo o es de consul a basados
en XQue y.
Sus p incipales aplicaciones se pueden esumi en es g andes g upos.
En p ime luga , ecupe a in o mación a pa i de conjun os de da os XML.
Hemos expues o en es e abajo, a a és de los ejemplos, como, g acias a un lenguaje
sencillo, po en e y lexible, es posible eco e los nodos de un conjun o de da os XML,
il ando aquellos que nos in e esen y ans o mándolos pa a mos a la in o mación
deseada con la es uc u a adecuada.
En segundo luga , ans o ma unas es uc u as de da os XML en o as
es uc u as que o ganicen la in o mación de o ma di e en e. Po ejemplo, es sencillo y
ácil ob ene a pa i de la je a quía de da os almacenada en el a chi o "lib os.xml", o a
je a quía de da os donde se almacene una lis a con odos los au o es y los lib os que ha
esc i o cada au o , al y como se mues a en la igu a 8.
<lib o año="1994">
< i ulo>TCP/IP Illus a ed</ i ulo>
<au o >
<apellido>S e ens</apellido>
<nomb e>W.</nomb e>
</au o >
<edi o ial>Addison-Wesley</edi o ial>
<p ecio> 65.95</p ecio>
</lib o>
<lib o año="1992">
< i ulo>Ad an P og amming o Unix
en i onmen </ i ulo>
<au o >
<apellido>S e ens</apellido>
<nomb e>W.</nomb e>
</au o >
<edi o ial>Addison-Wesley</edi o ial>
<p ecio>65.95</p ecio>
</lib o>
<au o > <apellido>S e ens</apellido>
<nomb e>W.</nomb e>
<lib os>
< i ulo>TCP/IP Illus a ed</ i ulo>
< i ulo>Ad an P og amming o
Unix en i onmen </ i ulo>
</lib os>
</au o >
Figu a 8. T ans o mación de una je a quía en o a median e XQue y.
Y en e ce luga , o ece una al e na i a a XSLT pa a ealiza ans o maciones
de da os en XML a o o ipo de ep esen aciones, como HTML o PDF. Ya hemos is o
en uno de los ejemplos del pun o 3.9 lo sencillo que esul a esc ibi una consul a
XQue y pa a que gene e código HMTL.
Ac ualmen e ambién exis e un núme o a iado de implemen aciones open-
sou ce, lo que nos o ece libe ad de elección, y es án lo su icien emen e madu as como
pa a pode se inco po adas con ga an ías a cualquie p oyec o de p og amación, con la
condición de que dicho p oyec o man enga la licencia GPL y siga siendo open-sou ce.
40
6. Re e encias y enlaces.
[1] Ma chal, Benoî . XML by Example. QUE. 2.001 Wes 103 d S ee , Indianapolis, Indiana
46290.
[2] McLaughlin, B e . Ja a and XML Da a Binding. 2.002. O'Reilly.
[3] Robe Ga dne , John; Rendon, Za ella L. XSLT and XPATH: A Guide o XML
T ans o ma ions. 2001. P en ice Hall PTR
[4] Ka z, Howa d; Chambe lin, Don, e -al. XQue y om he Expe s: A Guide o he W3C XML
Que y Language. 2.003. Addison Wesley
[5] B undage, Michael. XQue y: The XML Que y Language. 2.004. Addison Wesley
[6] XQEngine. h p://xqengine.sou ce o ge.ne /
[7] BumbleBee. h p://www.XQue y.com/bumblebee/
[8] Qexo. h p://www.gnu.o g/so wa e/qexo/
[9] Qizx/open. h p://www.x a.ne /qizxopen/
[10] Saxon. h p://saxon.sou ce o ge.ne /
[11]Ce isen . h p://www.ce isen .com/
[12] Ipedo. h p://www.ipedo.com/
[13] IPSI-XQ. h p://ipsi. hg.de/oasys/p ojec s/ipsi-xq/index_e.h ml
[14] X-Hi e. h p://xhi e.com/
[15] JAXB, API Ja a de Sun pa a XML Binding. h p://ja a.sun.com/xml/jaxb/
[16] Xqua k. h p://xqua k. o ge.objec web.o g/index.h ml
[17] SAX p ojec websi e. h p://sax.sou ce o ge.ne /
[18] DOM home page. h p://www.w3.o g/DOM/
[19] Apache's XML pa se . h p://xml.apache.o g/xe ces2-j/
[20] W3C Xque y. h p://www.w3.o g/TR/XQue y/
41
Apéndice I. Pa ses SAX y DOM
En el con ex o de es e a ículo, un pa se es una he amien a que p ocesa una
colección de da os o ganizados en un á bol de e ique as que sigue la sin axis XML.
Es os pa se s son cons uidos como lib e ías o componen es pa a se u iliza los en
p og amas que manejen colecciones de da os en XML. A con inuación se desc iben
b e emen e las ca ac e ís icas p incipales de un pa se SAX y un pa se DOM.
SAX. SAX[1][17] es un pa se di igido po e en os. Es o signi ica que cada ez que
apa ece un elemen o XML, como la ape u a o cie e de una nue a e ique a, el pa se
gene a un e en o. La p og amación con un pa se SAX consis e en ede ini las
unciones de los e en os que nos in e ese con ola y, pa a cada e en o, comp oba el
alo de la e ique a y ac ua en consecuencia.
Las en ajas p incipales de los pa se s SAX son que no necesi a una g an
can idad de memo ia, ya que solo ca ga la sección de da os XML con la que es á
abajando, y que es ápido y sencillo esc ibi pa se s SAX simples. Sus p incipales
incon enien es son que depende comple amen e de la es uc u a del documen o, si
cambia la es uc u a es necesa io modi ica el código, no es eu ilizable de un
documen o a o o a menos que compa an las mismas e ique as y es uc u a de da os y,
como se p ocesa a medida que se lee, no se iene in o mación de lo que iene a
con inuación y solo se pueden esc ibi acciones simples.
DOM. DOM[1][18], a di e encia del an e io , ca ga odo el conjun o de da os XML en
memo ia en la o ma de un á bol n-a io. Cualquie ope ación sob e el conjun o de da os
se ealiza sob e el á bol que se almacena en memo ia.
Como en ajas, es más ápido que SAX ya que abaja con los da os en memo ia
y no en el a chi o. Además, al ene oda la es uc u a de da os disponible, es posible
ob ene in o mación de lo que iene a con inuación, e ocede , o hace a ias
búsquedas.
Como incon enien es, es más complejo abaja con un pa se DOM ya que es
necesa io esc ibi un eco ido sob e un á bol n-a io, necesi a más can idad de memo ia
que SAX y es más len o, aunque si es necesa io eco e más de un ez el documen o o
una pa e de él, DOM gana en elocidad.
48
h p://www.w3.o g/TR/xsl -XQue y-se ializa ion/
XML Que y and XPa h Full-Tex Requi emen s.
Es e documen o con iene la desc ipción de los equisi os que una
implemen ación comple a debe se capaz de cumpli .
h p://www.w3.o g/TR/XQue y- ull- ex - equi emen s/
XML Que y and XPa h Full-Tex Use Cases.
Es e documen o de alla un conjun o de escena ios omados del mundo eal que
una especi icación comple a debe se capaz de ges iona .
h p://www.w3.o g/TR/xmlque y- ull- ex -use-cases/