You are on page 1of 25

Captulo 10: XQuery

Informacin general
XQuery es un declarativo, un lenguaje escrito y funcional, diseado desde el principio por el Grupo de Trabajo de consulta XML especficamente con el propsito de la consulta de datos almacenados en formato XML. XQuery comparte el mismo modelo de datos y el esquema basado en XML mismo tipo de sistema con otros miembros de la familia de estndares XML, como XPath 2.0 yXSLT 2.0. XQuery est diseado para trabajar con documentos XML que no tienen tipo (no un esquema asociado con los datos), escrito con esquemas XML, o una combinacin de ambos. XQuery 1.0 es bsicamente un superconjunto de XPath 2.0. Adems de las caractersticas de XPath 2.0, que tiene las siguientes capacidades: Aade una clusula ORDER BY a la FLWOR(ms sobre esto ms adelante) clusula para ordenar en orden un documento. Aade una clusula que a la clusula FLWOR a nombre de los resultados de las expresiones para su uso posterior. Proporciona una manera de especificar los elementos estticos contexto en el prlogo de la consulta (por ejemplo, enlaces prefijo) Ofrece la posibilidad de construir nuevos nodos. Ofrece la posibilidad de especificar las funciones definidas. Ofrece la posibilidad de crear mdulos y libreras

En este captulo, se obtiene una mirada en profundidad a las caractersticas de XQuery, incluyendo su sintaxis a travs de ejemplos. Despus de eso, se le presenta el apoyo proporcionado por Java y SQL Server 2005para XQuery y los pasos implicados en el trabajo con XQuery desde Java y SQL Server 2005.

Qu es XQuery?
XQuery es un lenguaje bastante nuevo para consultar datos XML. Fue diseado desde el principio por el Grupo de Trabajo de XML Query del W3C con el nico propsito de la consulta de datos almacenados en formatoXML. Como se mencion antes, es esencialmente un superconjunto de XPath 2.0que ofrece todas las caractersticas de XPath 2.0 y una larga lista de caractersticas adicionales. Lo mejor de XQuery es que fue construido para trabajar con todos los documentos XML, si no tienen tipo, escritas a mquina, o una combinacin de los dos. En todos los casos, su trabajo es para consultar los datos almacenados en formato XML. Esto se logra mediante el uso de la funcionalidadde navegacin XPath.

Casos de Uso de XQuery


Las reas de aplicacin de XQuery se pueden clasificar en trminos siguientes:

XQuery para consulta y anlisis: XQuery,es excelente para la


consulta de grandes trozos de datos y proporciona la capacidad de filtrar, clasificar, ordenar y reutilizar la informacin requerida. Las aplicaciones tpicas incluyen la consulta de documentos XML que representan la informacin semiestructurada, nombre y valor de la propiedad bags de par, el anlisis de los registros de aplicacin, los registros de transacciones y los registros de auditora para identificar los posibles errores de aplicacin y cuestiones de seguridad, y as sucesivamente.

XQuery para la integracin de aplicaciones: como las


organizaciones tienden a alejarse de los enfoques de integracin de aplicaciones propietarias y comenzar a adoptar estndares de los enfoques basados en la integracin de aplicaciones, la necesidad de transformar los datos de internos especficos de la aplicacin de formatos en formatos estndar de intercambio est ganando ms atencin. Debido a su capacidad de construir y transformar los datos XML, XQuery atiende a esta necesidad. Un uso tpico de XQuery en el dominio de aplicacin, la integracin es la traduccin del vocabulario usado por una aplicacin que utiliza una base de datos nativa XML de origen de datos relacional en un lenguaje utilizado por otra aplicacin que utiliza un formato XML de datos relacionales.

Las ventajas de XQuery


Adems de la construccin en las tecnologas XML, como la consulta XPath y XSLT, XQuery tambin proporciona una serie de ventajas: 1. Es fcil de aprender si el conocimiento deSQL y XPath est presente. 2. Cuando las consultas se escriben en XQuery, se requiere menos cdigo que consultas escritas en XSLT hacer. 3. XQuery se puede utilizar como un lenguaje fuertemente tipado cuando los datos XML se escribe, lo que puede mejorar el rendimiento de la consulta, evitando conversiones implcitas del tipo y la garanta de tipo que se pueden utilizar al realizar la optimizacin de consultas. 4. XQuery se puede utilizar como un lenguaje dbilmente tipificado de datos sin tipo para ofrecer gran facilidad de uso. 5. Debido a XQuery requiere menos cdigo para realizar una consulta que se XSLT, los costos de mantenimiento son ms bajos. 6. XQuery es compatible con los proveedores de bases de datos.

Estructura de una expresin XQuery


Una expresin XQuery se compone de dos secciones: un prlogo y un cuerpo. Un prlogo a su vez puede contener una declaracin de espacio de la subseccin. Las declaraciones de espacio de nombres(namespace) se utilizan para definir una correspondencia entre el prefijo y el URI de espacio de nombres, lo que le permite utilizar el prefijo en lugar de la URI de espacio en el cuerpo de la consulta. Tambin puede hacer referencia a nombres de elementos sin el prefijo de enlace de un espacio de nombres por defecto para los nombres de elementos, mediante la declaracin por defecto namespace. El cuerpo de una expresin XQuery contiene las expresiones de consulta que define el resultado de la consulta, por ejemplo, la expresin FLWOR firma (vase el "FLWOR Expresiones" en este captulo), una expresin XPath 2.0, u otra expresin XQuery, como una expresin de la construccin o la aritmtica.

Un ejemplo sencillo de XQuery


XQuery se utiliza para consultar un documento XML, y para eso se necesita un documento XML que hablar, mientras que el examen delas consultas diversas. Para los fines de este captulo, tenga en cuenta el documento XML en el listado 10-1, que describe la estructura de un conjunto de productos:

El elemento raz del documento XML es <Productos>, que contiene un nmero arbitrario de elementos <Product>. Cada elemento <Product>, a su vez, contiene <ProductID>,

NOMBRE, y los elementos <ProductNumber>. Adems, el elemento <Product> tambincontiene un atributo de categora. Al igual que SQL tiene que ser capaz de acceder a cualquier fila o columna en una tabla relacional, XQuery debe ser capaz de acceder a cualquier nodo de un documento XML.Estructuras XML que tanto la jerarqua y la secuencia, y puede contener una estructura compleja. Expresiones de ruta apoyan directamente la jerarqua y la secuencia, y le permiten navegar a una estructura XML. En su forma ms simple, una XQuery puede ser simplemente una expresin XPath. Por ejemplo, para obtener una lista de todos los nombres de los productos que son de tipo "Socks", puede utilizar las siguientes XQuery:

El doc ("Products.xml") parte indica el almacn de datos XML, que es un archivo XML denominado Products.xml en este caso. Teniendo en cuenta el contenido anterior del archivo Products.xml, la salida de esta consulta sera la siguiente:

La salida de una sentencia XQuery es una coleccin de elementos XML. En el ejemplo anterior, es una coleccin de elementos <Name>.

Expresiones cerradas
En el literal de constructores XML, puede utilizar las llaves ({}) para agregar el contenidoque se calcula cuando se ejecuta la consulta. Esto se llama una expresin cerrada. Por ejemplo, en el ejemplo anterior, si desea que todos los elementos <Name> a aparecer dentro de un elemento raz XML denominado <ProductNames>. Esto podra lograrse con la siguiente expresin XQuery:

Con esta adiccin, el resultado sera el siguiente:

Tenga en cuenta que en esta consulta, utiliza llaves alrededor de la expresin XPath en el elemento <ProductNames>. Las llaves indican que el contenido dentro de las llaves es una expresin XQuery, y no el contenido literal. Por ejemplo, la siguiente consulta omite las llaves:

La salida de esta consulta sera la siguiente:

Expresiones FLWOR
Similar a la instruccin T-SQL SELECT, XQuery FLWOR son la base para la consulta, el filtrado y clasificacin de los resultados de un documento XML. FLWOR significa for, let, where, order by y return y se pronuncia " flower". A pesar de expresiones XPath simples son tiles, el verdadero poder de XQuery brilla a travs de las expresiones FLWOR. Tmese un momento para pensar en una clusula SELECT de SQL. Los ingredientes principales son el SELECT, FROM y clusulas WHERE. La clusula FROM especifica las tablas de consulta. A continuacin, la clusula WHERE se evala para cada fila de la clusula de tablas. Las filas que superen la evaluacin tienen los campos que se especifican en la clusula SELECT de salida. FLWOR declaraciones son muy similares a un SELECT SQL. Como se mencion anteriormente, se compone de cinco partes, o clusulas, los siguientes: For : especifica la lista de nodos XML para repetir, y es similar a la instruccin SELECT de la clusula FROM. La lista de nodos XML se especifica mediante una expresin XPath. Por ejemplo, si desea iterar sobre todos los elementos <Product>, se utiliza la expresin XPath , doc(Products.xml)/Products/Product. Let: le permite declarar una variable y darle un valor Where: Contiene una expresin que se evala como un valor booleano, al igual que la clusula WHERE en una sentencia SQL SELECT. Cada nodo XML en la lista de nodos XML en la clusula es evaluada por la expresin de la clusula donde. Los que evalan para mover es Verdadero, los que no son pasados por alto. order by: Le permite ordenar los resultados de la expresin de consulta en orden ascendente o descendente. Return: Especifica el contenido que se devuelve desde la expresin FLWOR.

En un captulo posterior, se obtiene una visin en profundidad de cada una de estas clusulasen la expresin FLWOR. La expresin ms simple XQuery FLWOR es algo como esto:

Esto simplemente devuelve todos los elementos del producto en el documento $ doc. Usted puede agregar un poco de fondo con una XQuery clusula WHERE y la clusula de XQueryvolver un poco ms funcional, de la siguiente manera:

Esto devuelve ahora el producto que se identifica por 707 Identificacin del producto. Si conoces SQL, es probable que parece muy similar a la correspondiente sentencia SQL:

Por otro lado, una consulta equivalente usando XPath sera la siguiente:

Como puede ver, se puede producir el mismo resultado utilizando XPath tambin. Entonces la pregunta es, cmo saber qu estilo utilizar y cundo? Depende de lo que estamos acostumbrados. Si usted ha estado usando XML para el ao, especialmente en XML con la jerarqua de profundidad en los documentos de la narracin, es probable que se sienta cmodo con las expresiones de ruta. Pero si usted est ms cmodo con la idea de representar los datos como una tabla, entonces el estilo FLWOR puede que te vayan mejor. De hecho, una expresin de ruta XPath es totalmente equivalente a la expresin FLWORanterior, y es una XQuery legal por su propia cuenta. De hecho, cada expresin XPath legaltambin es legal en XQuery. La primera consulta en esta seccin puede ser en realidad se escribe as:

Como vers, las expresiones FLWOR son mucho ms potentes que las expresiones de ruta cuando se trata de hacer uniones. Sin embargo, para consultas sencillas, las capacidades se superponen y se tienen una opcin.

Una mirada en profundidad a las expresiones FLWOR


Como se mencion antes, el FLWOR nombre proviene de las cinco clusulas que componen una expresin FLWOR:for, let, where, order by, y return. En las secciones siguientes veremos con ms detalle en cada una de estas clusulas.

Clusula FOR
El comportamiento de la clusula de es bastante intuitivo: se repite en una secuencia de entrada y calcula un valor para cada elemento de la secuencia, de regreso de una secuencia obtenida mediante la concatenacin de los resultados de estos clculos. En casos sencillos, hay un punto de salida para cada punto de entrada. Por ejemplo:

Esto devuelve la secuencia (1, 4, 9, 16, 25, 36, 49, 64, 81, 100). En este ejemplo, los elementos de entrada son simples nmeros, y los elementos de salidatambin son simples nmeros. Los nmeros son un ejemplo de lo que llama XQuery valores atmicos. Otros ejemplos son las cadenas, fechas, booleanos y URI. El modelo de datosXQuery permite secuencias que contienen los nodos XML, as como los valores atmicos, y lade expresin pueden trabajar en cualquiera. He aqu un ejemplo que toma como entrada los nodos, y produce los nmeros como de salida. Se cuenta el nmero de nmeros de los productos indicados para cada producto:

Esto devuelve la salida (1, 1, 1,1). Una expresin FLWOR es slo una expresin, y se puede usar en cualquier lugar se permita una expresin-que no tiene que ser en el nivel superior de la consulta. El avg () l funcin que calcula la media de una secuencia de nmeros, as que usted puede utilizar eso para calcular el promedio de un grupo de elementos. Como se puede ver en el ejemplo anterior, XQuery es un lenguaje funcional que puede utilizar para calcular un valor que pasa por el resultado de una expresin o funcin en una expresin o funcin. Cualquier expresin puede anidarse dentro de cualquier otro, y la expresin FLWOR no es una excepcin. Si sabes de SQL, su instinto era probablemente para tratar de hacer el promedio y el redondeo en la clusula de devolucin. Pero la forma en XQuery es en realidad mucho ms lgica. La clusula de retorno se calcula un valor para cada elemento de la secuencia de entrada, mientras que la media () se aplica al resultado de la expresin FLWOR en su conjunto. Y se puede obtener a partir de una secuencia de nodos a otra secuencia de nodos. La clusula de verdad entra en su cuenta cuando usted tiene ms de uno de ellos en una

expresin FLWOR. Usted ser introducido q ms cuando empiece a mirar ms adelante en este captulo.

Clusula LET
La clusula de XQuery que simplemente declara una variable y le da un valor. Por ejemplo:

Con suerte, el significado es bastante intuitivo. De hecho, en este ejemplo, se puede sustituir cada variable de referencia con la expresin que proporciona el valor de la expresin. Esto significa que el resultado es el mismo que si hubiera utilizado lo siguiente:

En una clusula FOR , la variable se une a cada elemento de la secuencia, a su vez. En una clusula LET, la variable toma un solo valor. Esto puede ser un solo elemento o de una secuencia, y una secuencia puede contener nodos, valores atmicos, o una mezcla de los dos. En la mayora de los casos, las variables se utilizan exclusivamente para la comodidad, para simplificar las expresiones y que el cdigo sea ms legible. Si usted necesita usar la misma expresin ms de una vez, entonces se declara una variable tambin es un buen indicio parael procesador de consultas para hacer slo una vez la evaluacin. En una expresinFLWOR, puede tener cualquier nmero de clusulas, y cualquier nmero de clusulas que, y pueden estar en cualquier orden. Hay una cosa importante a destacar acerca de las variables en XQuery: no se puede actualizar. Esto significa que usted no puede escribir algo as como let $x:= $x+1. Esta regla puede parecer muy extrao si ests esperando XQuery a comportarse de la misma manera que las lenguas de procedimiento, como JavaScript. Pero XQuery no es ese tipo de lenguaje es un lenguaje declarativo y funciona a un nivel superior. No hay reglas sobre el orden en que las diferentes expresiones se ejecutan, y esto significa que las construcciones cuyo resultado depender de orden de ejecucin (como la asignacin de variables) estn prohibidos. Esta limitacin es esencial para dar a los optimizadores de la oportunidad de encontrar estrategias de ejecucin que puedan buscar en grandes bases de datos en fracciones de segundo.

Clusula WHERE
La clusula WHERE de XQuery en una expresin FLWOR realiza una funcin muy similar a la clusula WHERE en una consulta SQL: especifica una condicin para filtrar los

elementos que se interese en la clusula en una expresin FLWOR es opcional, pero s parece slo debe aparecer una vez, despus de todo a favor y dejar que las clusulas. He aqu un ejemplo que reafirma una de las consultas anteriores, pero esta vez utilizando una clusula WHERE:

Esta consulta devuelve el producto con 707 productos de identificacin con la categora de los " Helmets". Este estilo de codificacin es algo que los usuarios de SQL tienden a ser muy cmodo: en primer lugar, definir todas las tablas que le interesa, a continuacin, especificar una donde la expresin para definir todas las condiciones de restriccin que seleccionar subconjuntos de las filas de cada tabla como as como las condiciones de unin que muestran cmo los diferentes cuadros estn relacionados.

Clusula ORDER BY
La clusula order by permite ordenar los valores en el conjunto de resultados devuelto .El orden por palabra clave acepta una expresin de ordenacin, que debe devolver un valor atmico. Si lo desea, tambin puede especificar ascendente o descendente para el orden de clasificacin. El orden predeterminado es ascendente. Para clasificar los productos en orden ascendente de Identificacin del producto, utilice la siguiente consulta:

Clusula RETURN
Todas las expresiones XQuery FLWOR tiene una clusula de devolucin, y siempre viene al final. En l se definen los elementos que se incluyen en el resultado. Por lo general, la clusula de devolucin XQuery genera un solo elemento cada vez que se evala. En general, la clusula return tambin se puede producir una secuencia. Por ejemplo, usted puede hacer lo siguiente:

Esto selecciona todos los nombres de los productos que pertenecen a la categora de "socks". Sin embargo, tambin puede envoltorio de los nodos resultante en un elemento raz, por lo que fcilmente envoltorios alrededor de los elementos Name:

En general, una expresin FLWOR sin constructores nico elemento que puede generar listas planas de valores o nodos, y que no suele ser suficiente. Por lo general, quieren producir un documento XML como el resultado de la consulta, y los documentos XML que no son planas. Como resultado, en lugar de hacerlo puramente relacional que une a generar una salidaplana, que se desea construir la salida jerrquica utilizando una serie de expresiones FLWORanidados. La clusula de retorno puede parecer la parte menos importante de la FLWOR,sino un regreso fuera de lugar puede hacer una gran diferencia. Se recomienda que siemprealinear el F (for), L (let), W (where), O (order by), y R (return) las clusulas de una expresin FLWOR solo por debajo de los dems, cualquier error de expresiones anidadas, por lo que que se puede ver lo que est pasando.

Expresiones FLWOR Versus expresiones XPath


Utilizando una expresin FLWOR para definir la secuencia de resultados cuando se puede expresar la misma secuencia utilizando una expresin XPath puede ser excesivo en algunos casos debido a la complejidad de las expresiones FLWOR. Como regla general, debe establecer los casos de uso donde se justifica el uso de una expresin FLWOR. La siguiente lista proporciona escenarios bsicos donde el uso de expresiones FLWOR tiene sentido: Si desea iterar sobre una secuencia de valores que se devuelven como resultado de una expresin: utilizar la clusula FOR, que se une una variable para los sucesivos valores del conjunto de resultados. Ejemplos de ello son la construccin de nuevos elementos en el mbito de la clusula y la retencin de duplicados. Si desea filtrar el resultado de la secuencia de la clusula sobre la base de un predicado queno se puede definir mediante expresiones XPath simples: Utilice la clusula WHERE para eliminar los valores deseados en el conjunto de resultados. Por ejemplo:

Si usted desea ordenar el conjunto de resultados sobre la base de una expresin de ordenacin: Utilice la clusula ORDER BY para definir el tipo en el conjunto de resultados.

Si desea definir la forma del conjunto de resultados devuelto con los resultados obtenidos de la clusula: Utilice la sentencia return para llevar a cabo la formacin del conjunto de resultados. Si su requerimiento no cae en ninguno de estos escenarios, debe evaluar cuidadosamente el uso de expresiones FLWOR.

XQuery Funciones
XQuery incluye una serie de funciones integradas. Estas funciones se utilizan para todo el camino de trabajar con valores de cadena en valores numricos, fecha y hora de comparacin, el nodo y la manipulacin QName, de manipulacin de secuencia, los valores booleanos, y mucho ms. Adems de las funciones incorporadas, tambin puede definir sus propias funciones personalizadas en XQuery. Las secciones siguientes exploran el XQueryfunciones incorporadas. XQuery Funciones incorporadas El espacio de nombres(namespace) de XQuery que contiene todas las funciones XPath se identifica porw3.org/2005/02 / xpath functions. Al utilizar estas funciones incorporadas, puede utilizar el prefijo fn: Por ejemplo, puede invocar la funcin string () con el prefijo fn: string (). Sin embargo, puede invocar la funcin misma del mismo modo string () dejando de lado la funcin fn: prefijo desde fn: es el prefijo del espacio de nombres. Por ejemplo, he aqu algunos ejemplos del uso de funciones dentro de una XQuery.

Puede utilizar las funciones para dar formato al contenido de un elemento XML dentro de un elemento XML: Tambin puede utilizar las funciones dentro del predicado de una consulta XPath para realizar operaciones tales como las comparaciones de cadenas, y as sucesivamente para introducir nuevas condiciones: Tambin puede utilizar funciones en una clusula que antes de asignar los valores a una variable XQuery de la siguiente manera:

Como se puede ver en los ejemplos anteriores, XQuery funciones integradas son muy tiles yrecorrer un largo camino en la aplicacin efectiva de la fuerza de XQuery para resolver los problemas del mundo real. Ahora que usted ha tenido una idea del papel de las funciones quese suministra con XQuery, vamos a explorar algunas de las tiles funciones incorporadas.

doc () funcin
El doc (URI) devuelve el nodo raz del documento de referencia. El formato de referencia URI depende de la implementacin. Por ejemplo, doc ("Products.xml") devuelve el nodo raz del documento Products.xml.

Funciones de agregado
i. ii. iii. iv. v. vi.

XQuery proporciona contar, promedio, mximo, mnimo y las funciones de suma total, quehacer lo siguiente: Count Devuelve el nmero de elementos de la secuencia. AVG devuelve el promedio (media) de una secuencia de nmeros. sum devuelve la suma de una secuencia de nmeros. max devuelve el nmero con un valor mximo de una secuencia. min devuelve el nmero con el valor mnimo de una secuencia.

Por ejemplo, la siguiente consulta calcula el nmero de productos contenidos en el archivoProducts.xml:

En el XQuery anterior, la variable $ productos representa todos los elementos del producto en el archivo de Products.xml. El recuento ($ products) devuelve el recuento de productos en ese orden. La clusula return construye un elemento que tiene este aspecto:

Funciones STRING
XQuery proporciona las funciones de cadena: concat, comienza con, termina con, contiene,subcadena, cadena de longitud, normalizar, maysculas y minsculas.( concat, starts-with, ends-with, contains, substring, string-length, normalize, upper-case, and lower-case.) La funcin comienza con (str1, str2) devuelve true si el inicio de str1 coincide con los caracteres de cadena2. La funcin termina con (str1, str2) devuelve true si los personajes que terminan en str1 coinciden con los caracteres de cadena2. La funcin contiene (str1, str2) devuelve verdadero si cadena1 contiene cadena2. La consulta siguiente utiliza la funcin contains () para encontrar los productos en elProducts.xml cuya categora es de tipo "socks"

Esto da como resultado la siguiente salida:

XQuery Funciones definidas por el usuario


Lo bueno de XQuery es que si usted no puede encontrar la funcin de XQuery de la caja,usted es libre de escribir la suya. Estas funciones definidas por el usuario se puede definir en la consulta o en una libreria independiente. La sintaxis de las funciones definidas por el usuario es el siguiente:

Las siguientes son las principales caractersticas de una funcin definida por el usuario que tiene que tener en cuenta al escribir funciones definidas: - Las funciones de uso de la " declare function" como palabra clave. -El nombre de la funcin debe tener el prefijo. -Los tipos de datos de los parmetros son en su mayora los mismos que los tipos de datos definidos en el esquema XML. -El cuerpo de la funcin debe estar rodeado por llaves. He aqu un ejemplo de una funcin definida por el usuario:

} Y aqu est un ejemplo de cmo llamar a la funcin minPrice:

El siguiente es otro ejemplo que ilustra la declaracin y el uso de una funcin local. En este caso, la funcin acepta una secuencia de elementos empleados, un resumen de ellos por departamento, y devuelve una secuencia de elementos de departamento:

Para preparar un resumen de los empleados ubicados en Phoenix, invocar la funcin anterior como sigue:

XQuery en Java
Hay una serie de herramientas disponibles para trabajar con XQuery desde Java. En este captulo se utiliza la implementacin de XMLBeans de cdigo abierto de Apache para trabajar con XQuery. XMLBeans es una tecnologa de acceso a XML mediante la unin a los tipos Java. XMLBeans ofrece varias maneras de obtener en el XML, incluyendo las siguientes: * A travs de esquemas XML, que ha sido compilado para generar los tipos Java que representan los tipos de esquema. De esta manera, se puede acceder a las instancias del esquema de acceso a travs de JavaBeans de estilo como getXXX y setXXX. * reflejar en el esquema XML en s a travs de un modelo de objetos de esquema XML que proporciona la API XMLBeans. *Con un modelo de cursor a travs del cual se puede recorrer la totalidad de InfoSet XML. *Con XML DOM, que es totalmente compatible. Pre-requisitos Estos son los requisitos previos para trabajar con XMLBeans: *JDK 1.4 y Ant-Instalar estos si no los tiene ya. *XMLBeans binarios * Saxon XQuery XQuery completo procesador de apoyo para XMLBeans 2.2.0, es necesario Saxon 8.6.1

*Un editor para escribir cdigo Java-Esto podra ser un editor de texto o su favorito IDEJava. Con estos elementos instalados y configurados, usted est listo para trabajar con XQuerydesde Java.

Seleccin de XML con XQuery


Puede utilizar XQuery para recuperar piezas especficas de XML como se puede recuperar datos de una base de datos. XQuery ofrece sintaxis para especificar los elementos y atributos que usted est interesado pulg El API XMLBeans proporciona un mtodo llamadoExecQuery () para ejecutar expresiones XQuery. Usted puede llamar desde y XmlObject ejemplo (o un tipo generado heredar de ella) o una instancia XmlCursor. En primer lugar, eche un vistazo a un ejemplo que invoca el ExecQuery() desde una instancia XmlObject. Invocando ExecQuery () de un XmlObject Tenga en cuenta que las expresiones XQuery requiere clases adicionales en la ruta de la clase, como se indica en las instrucciones de instalacin XMLBeans. Utiliza el mtodo ExecQuery para ejecutar expresiones XQuery. Con expresiones XQuery, la salida XMLdevuelto es una copia de XML en el documento de consulta y en contra de esta salida es una matriz de XmlObject tipo. El ejemplo del Listado 2.10 recupera <Name> elementos del XML entrantes, que muestra directamente en la consola.

Usted comienza por crear una instancia de objeto XmlObject pasando en el nombre del archivo XML como un argumento:

Despus de eso, se especifica la expresin de consulta en una variable de cadena:

Esta expresin de consulta primero se hace referencia a todos los elementos <Name> en el archivo XML y los devuelve como resultado. La variable $ this en la expresin de consulta se refiere a la posicin actual. A continuacin, realizar la ejecucin del XQuery con el ExecQuery (), lo que pasa en el valorque se obtiene mediante la combinacin de la declaracin de espacio de nombres con la expresin de consulta real:

A continuacin, mostrar la salida resultante de la consola a travs de los System.out.println() method. Para probar este programa Java, crear un archivo XML denominado Departments.xml con el contenido mostrado en el listado 10-3.

Si pasa la direccin URL del archivo Departments.xml como un argumento de lnea de comandos en el momento de la ejecucin de la clase XmlObjectSample, obtendr la siguiente salida:

Invocando ExecQuery () de un XmlCursor


El cursor XML ofrece un modelo de grano fino para la manipulacin de datos, adems deque le proporciona un mtodo para ejecutar las expresiones de consulta. El cursor de la APIXML, de forma anloga a la API de objetos DOM, es simplemente una manera de apuntar a un dato concreto. Por lo tanto, al igual que un cursor ayuda a navegar a travs de un documento de texto, el cursor XML define un lugar en XML donde se pueden realizar acciones en el seleccionado XML. Cursores son ideales para mover a travs de un documento XML cuando no hay esquemadisponible. Una vez que tienes el cursor en el lugar que le interesa, puede realizar una variedad de operaciones con ella. Por ejemplo, puede ejecutar consultas, establecer y obtener valores, insertar y extraer fragmentos de XML, fragmentos de copia de XML a otras partes del documento, y hacer otros de grano fino, cambios en el documento XML. Listado10-4 utiliza un cursor XML para ejecutar una consulta XQuery.

Este cdigo crea un nuevo cursor al comienzo del documento. A partir de ah, se utiliza la interfaz ExecQuery XmlCursor de () para ejecutar la expresin de consulta:

Despus de ejecutar la consulta, los resultados se muestran a travs de la llamada al mtodoxmlText () de la XmlCursor resultante:

Esta es la salida producida por el cdigo.

XQuery en Bases de Datos Relacionales


Uno de los desarrolladores principales tareas se enfrentan es consultar los datos de algn almacn de datos y permite a los usuarios ver y / o manipular la informacin a travs de una interfaz Web. Por lo general, los almacenes de datos que son tradicionales de consulta de bases de datos relacionales, como Microsoft SQL Server u Oracle. Con bases de datos relacionales, los medios de facto para la consulta de datos es SQL. Sin embargo, con el surgimiento cada vez ms constante de la popularidad de los servicios Web, y la necesidad de una plataforma independiente, Internet es transferible, el formato de representacin de datos, almacenes de datos XML se estn convirtiendo ms y ms popular. SQL nunca fue diseado para la consulta de semi-estructuradas almacenes de datos, y por lo tanto no es adecuado para la consulta de almacenes de datos XML. Entonces, cmo se consulta un almacn de datos XML y recuperar los resultados de dicha consulta? La mayora de los desarrolladores utilizan actualmente XSLT y XPath para realizar esta tarea. Sin embargo, XPath y XSLT por s solos no son suficientes para la consulta de los almacenes de datos XML, y usted necesita el poder de XQuery para poder maximizar los beneficios de la utilizacin de almacenes de datos XML. Ahora todos los principales proveedores de bases de datos relacionales (incluyendo Oracle y Microsoft) la compatibilidad de XQuery como parte de sus implementaciones de bases de datos. La siguiente seccin le ofrece un rpido recorrido por el apoyo proporcionado por XQuery SQL Server 2005.

XQuery en SQL Server 2005


Una de las caractersticas nuevas introducidas en SQL Server 2005 es el tipo de datos XML nativos. Utilizando el tipo de datos XML, puede crear una tabla que tiene una o ms columnas de tipo XML, adems de columnas relacionales. Las variables y los parmetros de XML tambin son permitidos. Los valores XML se almacena en un formato interno como objetos binarios grandes (BLOB) para apoyar a las caractersticas del modelo XML, tales como el orden del documento y las estructuras recursivas, con mayor fidelidad. SQL Server 2005 ofrece colecciones de esquemas XML como una manera de manejar esquemas XML del W3C como metadatos. Un tipo de datos XML se puede asociar con una coleccin de esquemas XML para hacer cumplir las restricciones de esquema en las instancias XML. Cuando los datos XML se asocia con una coleccin de esquemas XML, se llama XML con tipo, de lo contrario se llama XML sin tipo. Con tipo y XML sin tipo se alojan en un marco nico, el modelo de datos XML se conserva, y el procesamiento de consultas aplica la semntica XML. La infraestructura relacional subyacente se utiliza ampliamente para este propsito. Es compatible con la interoperabilidad entre datos relacionales y XML, con objeto de alcanzar la adopcin ms generalizada de las caractersticas XML.

Tipo de consulta de datos XML y modificacin de datos


Puede utilizar una sentencia SELECT T-SQL para recuperar instancias XML. Cinco mtodos incorporados en el tipo de datos XML se proporcionan para consultar y modificar las instancias XML. Estos mtodos aceptan XQuery. El sistema de tipos XQuery se alinea con la de los tipos de esquema XML de W3C. La mayora de los tipos de SQL son compatibles con el sistema de tipos XQuery (por ejemplo, decimal). Un puado de tipos (por ejemplo, xs: duration) se almacenan en un formato interno y convenientemente interpretados para ser compatible con el sistema de tipos XQuery.

La fase de recopilacin comprueba la correccin de tipo esttico de las expresiones XQuery y las declaraciones de modificacin de datos, y utiliza esquemas XML para las inferencias de tipo en el caso de XML con tipo. Errores de tipo esttico se plantean si una expresin puede fallar en tiempo de ejecucin debido a una violacin de la seguridad de tipos. A travs del apoyo XQuery, puede recuperar todo los valores XML o puede recuperar parte de las instancias XML. Esto es posible mediante el uso de cuatro mtodos de tipo de datos XML que tienen una expresin XQuery como argumento: query (), value (), exist () y nodos ().Un quinto mtodo, modificar (), permite la modificacin de los datos XML y acepta una declaracin de modificacin de datos XML como entrada. Aqu hay una breve introduccin a cada uno de estos mtodos: query():Extractos de las partes de una instancia XML. La expresin XQuery como resultado una lista de nodos XML. El subrbol con raz en cada uno de estos nodos se devuelve en el orden del documento. El tipo de resultado es XML sin tipo.

value():Extrae un valor escalar de una instancia XML y devuelve el valor del nodo de la expresin XQuery se evala. Este valor se convierte a un tipo de T-SQL se especifica como el segundo argumento del mtodo value (). exist():Realiza comprobaciones existencial en una instancia XML. Devuelve 1 si la expresin XQuery evala lista de nodos que no son nulos, de lo contrario devuelve 0.

nodes():Los rendimientos de los casos, un especial tipo de datos XML, cada uno de ellos tiene su contexto establecido en un nodo diferente que la expresin XQuery se evala. modify():Le permite modificar partes de una instancia XML, como la adicin o eliminacin de sub-estructuras, o sustitucin de los valores escalares como el precio de un libro de 9,99 a 39,99. Dar un breve vistazo a cada uno de estos mtodos. Antes de eso, crear una tabla denominada Departamento con dos columnas: una columna de Identificacin y de la columna xml_data que utiliza el tipo de datos xml.

Ahora que se crea la tabla, insertar un par de filas a la tabla de la siguiente manera:

Trabajar con el mtodo de consulta


Con la introduccin del tipo de datos XML en SQL Server 2005, la clusula FOR XMLproporciona ahora la capacidad de generar una instancia de XML directamente con la directiva TYPE nuevo. Por ejemplo:

Esto devuelve los elementos empleados como una instancia de tipo de datos XML, en lugar de la nvarchar (max) instancia que habra sido el caso sin la directiva TYPE. Este resultado segarantiza la conformidad de las restricciones de buenaformacin proporcionada por el tipo de datos XML. Debido a que el resultado es un ejemplo del tipo de datos XML, tambin puede utilizar expresiones XQuery para consultar y dar nueva forma al resultado. Para las expresiones XQuery, se utiliza el mtodo query () con el apoyo del tipo de datos XML. Por ejemplo, la siguiente

expresin XQuery recupera todos los nombres de departamentos de la tabla del Departamento.

Los resultados de la consulta previa en la siguiente salida:

Tambin puede utilizar el mtodo de consulta para ejecutar un XQuery FLWOR. Por ejemplo, puede crear un documento XML que contiene todos los nombres de departamento de la tabla de Departamento con la siguiente consulta:

He aqu el resultado producido por la consulta anterior.

Tenga en cuenta que hay que declarar el espacio de nombres del documento, si la columna de origen es una columna xml. Puesto que la columna xml_data no es una columna escrita, no hay necesidad de utilizar el espacio de nombres.

Trabajar con el mtodo VALUE


Para el mtodo value, se pasa una sentencia XQuery y el tipo de retorno. Como resultado,el mtodo de valor () devuelve un valor nico que se produce como resultado de la ejecucin de la consulta. A modo de ejemplo, la siguiente consulta,

produce el resultado siguiente

Como se puede ver en la consulta, que se pasa en el tipo de datos como un segundo parmetro al mtodo value (). Esto le indica el mtodo para devolver el valor de ese tipo. El mtodo value () es muy til cuando se quiere obtener un valor de una columna XML e insertar el valor en otra columna de la tabla de un tipo diferente.

Trabajar con el mtodo EXIST


El mtodo exist () le permite determinar si un valor del nodo que est buscando existe.Devuelve un 1 si el valor del nodo se encuentra y un 0 si no.

En el ejemplo anterior, el mtodo exist () se utiliza en la clusula where y acta como el mecanismo de filtrado para recuperar slo el nombre del departamento con el valor de id 1.La consulta tambin produce " Engineering" como la salida.

Trabajar con el mtodo NODES


Este mtodo acepta una sentencia XQuery como parmetro y devuelve un conjunto de filasque contiene datos lgica escalar de la variable XML. Es muy similar a la selectNodes () enXML DOM. Este mtodo es muy til cuando se necesita para triturar los datos de una variable de tipo de datos XML en una o varias columnas de las tablas relacionales.

Trabajar con el mtodo de MODIFY


A travs del mtodo de modify, se pueden insertar, actualizar o eliminar los valores de una columna XML con tipo. Para modificar el contenido de un elemento, primero debe hacer referencia a ese elemento mediante la expresin XPath. Una vez en el propio elemento, a continuacin, hacer referencia al contenido de texto empleando el mtodo text () de la siguiente manera:

En el cdigo anterior, se utiliza reemplazar el valor de identificar el elemento que desea modificar y luego se utiliza el de especificar el nuevo valor. Ahora que ha echado un vistazo a la actualizacin, a ver un ejemplo de la eliminacin de

unelemento. Por ejemplo, aqu es la forma de eliminar el <groupname> (elemento secundario de<department>) elemento de la columna xml_data.

Resumen
Este captulo se inici con una breve introduccin a XQuery, discutiendo el papel de XQuery ,sus ventajas y la estructura de una expresin XQuery. Despus de eso, mir a uno de los aspectos clave de XQuery FLWOR, expresiones que le proporcionan una forma consistente para escribir y ejecutar las expresiones de consulta. Expresiones FLWOR son la caracterstica central del lenguaje XQuery, en la misma forma que las expresiones de ruta son el ncleo del XPath. En concreto:

Expressions FLWOR tiene 5 apartados for, let, where, order by, y return. Las dos primeras pueden aparecer en cualquier nmero de veces en cualquier orden. El orden de dnde y por las clusulas son opcionales, pero si se utilizan, deben aparecer en el orden indicado. Siempre hay una clusula de retorno. La semntica son similares a los de una sentencia SELECT en SQL. En la mayora de los casos, usted puede pensar en una expresin FLWOR con varias de las clusulas como un conjunto de bucles anidados, pero con una clasificacin para utilizar un modelo de ejecucin bastante ms complejo que se necesita. Se pueden utilizar expresiones FLWOR en cualquier lugar que usted puede utilizar cualquier otro tipo de expresin. Esto significa que las expresiones se pueden anidar unos dentro de otros, y pueden aparecer en contextos como un argumento a una funcin como count () oMAX (). La nica restriccin es que el tipo de valor devuelto por la expresin FLWOR (una secuencia de elementos) debe ser adecuada al contexto donde se utiliza la expresin.

Despus de esto ha aprendido las diversas funciones con el apoyo de XQuery incluyendo el uso de las funciones incorporadas y definidas por el usuario. Tambin explor los pasos a seguir en el uso de XQuery dentro de un programa Java a travs de un XMLBeans implementacin en cdigo abierto. Como parte de esto, has aprendido las dos formas de ejecutar expresiones XQuery desde una aplicacin Java: a travs de XmlObject y XmlCursor .Ejemplos que muestran la implementacin de XQuery en SQL Server 2005.
Ahora es un momento tan bueno como cualquier otro para empezar a aprender XQuery, porque es obligado a ser ms prominentes como almacenes de datos XML continuar su meterico ascenso. Adems, con el profundo apoyo XQuery proporcionada por SQL Server 2005, es slo cuestin de tiempo antes de XQuery se convierte en dominante.

You might also like