XQuery ( XML Query ) es un lenguaje de consulta y un lenguaje de programación funcional diseñado para consultar y transformar colecciones de datos estructurados y no estructurados , principalmente en formato XML . También admite datos de texto y, mediante extensiones específicas de la implementación, otros formatos como datos binarios y relacionales .
El lenguaje fue desarrollado por el grupo de trabajo XML Query del W3C , y la versión 1.0 se convirtió en una recomendación del W3C en enero de 2007. El desarrollo de XQuery se coordina estrechamente con el desarrollo de XSLT por parte del Grupo de Trabajo XSL. Ambos grupos mantienen conjuntamente XPath , un componente compartido de XQuery y XSLT. XQuery extiende XPath con características como las expresiones FLWOR (For, Let, Where, Order by, Return), lo que lo hace semánticamente similar a SQL , pero optimizado para datos jerárquicos en lugar de relacionales .
XQuery 3.1, publicado en marzo de 2017, añadió compatibilidad con JSON e introdujo mapas , matrices y funciones de orden superior adicionales , ampliando significativamente las capacidades del lenguaje para el procesamiento de datos moderno .
XQuery está implementado en muchos sistemas de bases de datos , bases de datos XML y procesadores XML, incluidos BaseX , eXist , MarkLogic , Saxon y Berkeley DB XML , lo que lo convierte en una tecnología fundamental para el procesamiento de datos XML en aplicaciones de software empresarial .
Características
La misión de XQuery es:
"Proporcionar funcionalidades de consulta flexibles para extraer datos de documentos reales y virtuales en la World Wide Web, facilitando así la interacción necesaria entre el mundo web y el mundo de las bases de datos. En última instancia, se podrá acceder a colecciones de archivos XML como si fueran bases de datos." [ 4 ]
Es un lenguaje de programación funcional, sin efectos secundarios y orientado a expresiones, con un sistema de tipos simple , resumido por Kilpeläinen: [ 5 ]
Todas las expresiones XQuery operan sobre secuencias y se evalúan como secuencias. Las secuencias son listas ordenadas de elementos. Los elementos pueden ser nodos , que representan componentes de documentos XML, o valores atómicos , que son instancias de tipos base de esquemas XML como xs:integer o xs:string . Las secuencias también pueden estar vacías o constar de un solo elemento. No se distingue entre un solo elemento y una secuencia singleton. (...) Las secuencias XQuery/XPath se diferencian de las listas en lenguajes como Lisp y Prolog al excluir las secuencias anidadas. Los diseñadores de XQuery pueden haber considerado que las secuencias anidadas no son necesarias para la manipulación del contenido de los documentos. El anidamiento, o jerarquía de estructuras de documentos, se representa mediante nodos y sus relaciones padre-hijo.
XQuery proporciona los medios para extraer y manipular datos de documentos XML o cualquier fuente de datos que pueda verse como XML, como bases de datos relacionales [ 6 ] o documentos de oficina.
XQuery incluye un superconjunto de la sintaxis de expresiones XPath para acceder a partes específicas de un documento XML. Complementa esta sintaxis con una expresión FLWOR , similar a SQL , para realizar uniones. Una expresión FLWOR se construye a partir de las cinco cláusulas que le dan nombre: FOR, LET, WHERE, ORDER BY y RETURN.
El lenguaje también proporciona una sintaxis que permite construir nuevos documentos XML. Cuando se conocen de antemano los nombres de los elementos y atributos, se puede utilizar una sintaxis similar a XML; en otros casos, se dispone de expresiones denominadas constructores de nodos dinámicos. Todas estas construcciones se definen como expresiones dentro del lenguaje y pueden anidarse arbitrariamente.
El lenguaje se basa en el modelo de datos XQuery y XPath (XDM), que utiliza un modelo estructurado en árbol del contenido informativo de un documento XML, que contiene siete tipos de nodos: nodos de documento, elementos, atributos, nodos de texto, comentarios, instrucciones de procesamiento y espacios de nombres.
XDM también modela todos los valores como secuencias (un valor único se considera una secuencia de longitud uno). Los elementos de una secuencia pueden ser nodos XML o valores atómicos. Los valores atómicos pueden ser enteros, cadenas, booleanos, etc.: la lista completa de tipos se basa en los tipos primitivos definidos en XML Schema .
Las funciones para actualizar documentos o bases de datos XML, así como la capacidad de búsqueda de texto completo , no forman parte del lenguaje principal, sino que están definidas en estándares de extensión adicionales: XQuery Update Facility 1.0 admite la función de actualización y XQuery and XPath Full Text 1.0 admite la búsqueda de texto completo en documentos XML.
XQuery 3.0 añade compatibilidad con la programación funcional completa, en la que las funciones son valores que se pueden manipular (almacenar en variables, pasar a funciones de orden superior y llamar dinámicamente).
Ejemplos
El siguiente código XQuery de ejemplo enumera los hablantes únicos en cada acto de la obra Hamlet de Shakespeare, codificados en hamlet.xml.
<html> <body> { for $ act in doc ( "hamlet.xml" )// ACT let $ speakers := distinct-values ( $ act // SPEAKER ) return <div> <h1> { string ( $ act / TITLE ) } </h1> <ul> { for $ speaker in $ speakers return <li> { $ speaker } </li> } </ul> </div> } </body> </html>Todas las construcciones de XQuery para realizar cálculos son expresiones . No hay sentencias , aunque algunas palabras clave parezcan sugerir comportamientos similares a las de una sentencia. Para ejecutar una función, se evalúa la expresión dentro del cuerpo y se devuelve su valor. Por lo tanto, para escribir una función que duplique un valor de entrada, simplemente se escribe:
declare function local:doubler ( $ x ) { $ x * 2 }Para escribir una consulta completa que diga 'Hola Mundo', se escribe la expresión:
"Hola Mundo"Este estilo es común en los lenguajes de programación funcionales .
Aplicaciones
A continuación se muestran algunos ejemplos de cómo se puede utilizar XQuery:
- Extracción de información de una base de datos para su uso en un servicio web. [ 7 ]
- Generación de informes resumidos sobre datos almacenados en una base de datos XML. [ 7 ]
- Buscar información relevante en documentos de texto en la web y recopilar los resultados. [ 8 ]
- Seleccionar y transformar datos XML a XHTML para su publicación en la Web. [ 7 ]
- Extraer datos de las bases de datos para utilizarlos en la integración de la aplicación. [ 7 ]
- Dividir un documento XML que representa múltiples transacciones en múltiples documentos XML. [ 8 ]
Comparación entre XQuery y XSLT
Alcance
Aunque XQuery se concibió inicialmente como un lenguaje de consulta para grandes colecciones de documentos XML, también es capaz de transformar documentos individuales. Por ello, sus capacidades se solapan con las de XSLT , que se diseñó expresamente para permitir la transformación de documentos XML de entrada a HTML u otros formatos.
Los estándares XSLT 2.0 y XQuery fueron desarrollados por grupos de trabajo independientes dentro del W3C , que colaboraron para garantizar un enfoque común cuando fuese apropiado. Comparten el mismo modelo de datos ( XDM ), sistema de tipos y biblioteca de funciones, e incluyen XPath 2.0 como sublenguaje.
Origen
Sin embargo, ambos lenguajes tienen raíces en tradiciones diferentes y satisfacen las necesidades de comunidades distintas. XSLT se concibió principalmente como un lenguaje de hojas de estilo cuyo objetivo principal era mostrar XML al lector humano en pantalla, en la web (como lenguaje de plantillas web ) o en papel. XQuery se concibió principalmente como un lenguaje de consulta de bases de datos, siguiendo la tradición de SQL .
Debido a que ambos lenguajes tienen su origen en comunidades diferentes, XSLT es más eficaz en el manejo de documentos narrativos con una estructura más flexible, mientras que XQuery es más eficaz en el manejo de datos (por ejemplo, al realizar uniones relacionales).
Versiones
XSLT 1.0 apareció como recomendación en 1999, mientras que XQuery 1.0 no se convirtió en recomendación hasta principios de 2007; como resultado, XSLT sigue siendo mucho más utilizado. Ambos lenguajes tienen una capacidad expresiva similar, aunque XSLT 2.0 tiene muchas características que faltan en XQuery 1.0, como la agrupación, el formato de números y fechas, y un mayor control sobre los espacios de nombres XML. [ 9 ] [ 10 ] [ 11 ] Muchas de estas características estaban previstas para XQuery 3.0. [ 12 ]
Cualquier comparación debe tener en cuenta la versión de XSLT. XSLT 1.0 y XSLT 2.0 son lenguajes muy diferentes. XSLT 2.0, en particular, ha recibido una fuerte influencia de XQuery en su transición hacia el tipado estricto y la comprensión de esquemas.
Fortalezas y debilidades
Los estudios de usabilidad han demostrado que XQuery es más fácil de aprender que XSLT , especialmente para usuarios con experiencia previa en lenguajes de bases de datos como SQL. [ 13 ] Esto se puede atribuir a que XQuery es un lenguaje más pequeño con menos conceptos que aprender y a que los programas son más concisos. También es cierto que XQuery es más ortogonal, ya que cualquier expresión se puede usar en cualquier contexto sintáctico. Por el contrario, XSLT es un sistema de dos lenguajes en el que las expresiones XPath se pueden anidar en instrucciones XSLT, pero no al revés.
Actualmente, XSLT es más robusto que XQuery para aplicaciones que implican realizar pequeños cambios en un documento (por ejemplo, eliminar todos los elementos NOTE). Estas aplicaciones se suelen gestionar en XSLT mediante un patrón de codificación que utiliza una plantilla de identidad que copia todos los nodos sin modificar, modificados por plantillas específicas que modifican nodos seleccionados. XQuery no dispone de un equivalente a este patrón de codificación, aunque en futuras versiones será posible abordar estos problemas utilizando las funcionalidades de actualización del lenguaje que se encuentran en desarrollo. [ 14 ]
XQuery 1.0 carecía de cualquier mecanismo para el enlace dinámico o el polimorfismo; esto se ha solucionado con la introducción de funciones como valores de primera clase en XQuery 3.0. La ausencia de esta capacidad comienza a notarse al escribir aplicaciones grandes o código diseñado para ser reutilizable en diferentes entornos. XSLT ofrece dos mecanismos complementarios en este ámbito: la coincidencia dinámica de reglas de plantilla y la capacidad de sobrescribir reglas mediante , lo que permite escribir aplicaciones con múltiples capas de personalización.xsl:import
La ausencia de estas funcionalidades en XQuery 1.0 fue una decisión de diseño deliberada: esto permite que XQuery sea muy susceptible al análisis estático, lo cual es esencial para lograr el nivel de optimización necesario en los lenguajes de consulta de bases de datos. Además, facilita la detección de errores en el código XQuery durante la compilación.
El hecho de que XSLT 2.0 utilice sintaxis XML lo hace bastante extenso en comparación con XQuery 1.0. Sin embargo, muchas aplicaciones de gran tamaño aprovechan esta capacidad utilizando XSLT para leer, escribir o modificar hojas de estilo dinámicamente como parte de un proceso continuo. El uso de la sintaxis XML también permite el uso de herramientas basadas en XML para la gestión del código XSLT. Por el contrario, la sintaxis XQuery es más adecuada para su integración en lenguajes de programación tradicionales como Java (véase la API de XQuery para Java ) o C# . Si es necesario, el código XQuery también puede expresarse en una sintaxis XML denominada XQueryX. La representación XQueryX del código XQuery es bastante extensa y poco práctica para los humanos, pero puede procesarse fácilmente con herramientas XML, por ejemplo, transformándola con hojas de estilo XSLT. [ 15 ] [ 16 ]
Versiones y extensiones
Versiones
- XQuery 1.0 se convirtió en una recomendación del W3C el 23 de enero de 2007. [ 17 ]
- XQuery 3.0 se convirtió en una recomendación del W3C el 8 de abril de 2014. [ 18 ]
- XQuery 3.1 se convirtió en una recomendación del W3C el 21 de marzo de 2017. [ 19 ]
extensiones del W3C
El Consorcio World Wide Web (W3C) desarrolló dos extensiones importantes para XQuery:
- XQuery 1.0 y XPath 2.0 Full-Text, [ 20 ] que extiende XQuery con capacidades de búsqueda de texto completo.
- XQuery Update Facility , que permite la modificación de datos en XQuery.
Ambas se convirtieron en recomendaciones del W3C como extensiones de XQuery 1.0. Los esfuerzos por adaptarlas a XQuery 3.0 se abandonaron debido a limitaciones de recursos.
Se propuso una extensión de scripting (procedimental) para XQuery, pero nunca se completó. [ 21 ] [ 22 ]
El Grupo Comunitario EXPath [ 23 ] desarrolla extensiones para XQuery y estándares relacionados ( XPath , XSLT , XProc y XForms ). Las siguientes extensiones están disponibles:
Extensiones de terceros
JSONiq es una extensión de XQuery que permite extraer y transformar datos de documentos JSON . JSONiq es un superconjunto de XQuery 3.0 y se publica bajo la licencia Creative Commons Atribución-CompartirIgual 3.0 .
XQuery 3.1 deja de usar JSONiq de facto, ya que ha añadido compatibilidad total con JSON.
El proyecto EXQuery [ 28 ] desarrolla estándares en torno a la creación de aplicaciones XQuery portátiles. Actualmente están disponibles los siguientes estándares:
- RESTXQ [ 29 ]
Lecturas adicionales
- Consultas XML: XQuery, XPath y SQL/XML en contexto. Jim Melton y Stephen Buxton. Morgan Kaufmann, 2006. ISBN 1-55860-711-0.
- Walmsley, Priscilla (2007). XQuery, 1.ª edición . O'Reilly Media. ISBN 978-0-596-00634-1.
- Walmsley, Priscilla (2015). XQuery, 2.ª edición . O'Reilly Media. ISBN 978-1-4919-1510-3.
- XQuery: El lenguaje de consulta XML. Michael Brundage. Addison-Wesley Professional, 2004. ISBN 0-321-16581-0.
- XQuery de los expertos: Guía del lenguaje de consulta XML del W3C. Howard Katz (ed.). Addison-Wesley, 2004. ISBN 0-321-18060-7.
- Introducción a la expresión FLWOR de XQuery . Dr. Michael Kay (Comité XQuery del W3C), 2005.
Implementaciones
Véase también
Referencias
- ↑ "Recomendación de XQuery 3.1" . 21/03/2017.
- ↑ "XQuery 3.1: Un lenguaje de consulta XML" . 21 de marzo de 2017.
- ↑ "XQuery y tipado estático" . 3 de abril de 2023.
- ↑ W3C (25-10-2003). "citado por J.Robie" .
{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace ) - ↑ Kilpeläinen, Pekka (2012). "Uso de XQuery para la resolución de problemas" (PDF) . Software: Practice and Experience . 42 (12): 1433– 1465. doi : 10.1002/spe.1140 . S2CID 15561027. Archivado del original (PDF) el 4 de marzo de 2016. Consultado el 29 de agosto de 2015 .
- ↑ "Recuperación de datos con XQuery" . Consultado el 18 de enero de 2016.
- 1 2 3 4 "Tutorial de XQuery" . www.w3schools.com . Consultado el 6 de noviembre de 2025 .
- 1 2 "XQuery y XPath Full Text 3.0" . www.w3.org . Consultado el 6 de noviembre de 2025 .
- ↑ Kay, Michael (mayo de 2005). "Comparación de XSLT y XQuery" . Archivado del original el 27 de junio de 2018. Recuperado el 15 de junio de 2016 .
- ↑ Eisenberg, J. David (2005-03-09). "Comparando XSLT y XQuery" .
- ↑ Smith, Michael (23 de febrero de 2001). "Se debate la superposición entre XQuery y XSLT" . Archivado del original el 16 de junio de 2006. Consultado el 19 de junio de 2006 .
- ↑ "Requisitos de XQuery 3.0" .
- ↑ Usabilidad de los lenguajes de consulta XML. Joris Graaumans. Serie de tesis doctorales SIKS n.º 2005-16, ISBN 90-393-4065-X
- ↑ "Función de actualización de XQuery" .
- ↑ "Sintaxis XML para XQuery (XQueryX)" .
- ↑ Michael Kay. "Diarios sajones: Cómo no plegar constantes" .
- ↑ "Cronología de los estándares XML y Web Semántica del W3C" (PDF) . 4 de febrero de 2012. Archivado del original (PDF) el 26 de octubre de 2019. Consultado el 4 de febrero de 2012 .
- ↑ "Recomendación XQuery 3.0" . 8 de abril de 2014.
- ↑ "Recomendación de XQuery 3.1" . 21/03/2017.
- ↑ XQuery y XPath Texto completo 1.0
- ↑ Requisitos de la extensión de scripting XQuery 1.0
- ↑ Extensión de scripting XQuery 1.0
- ↑ Grupo de la comunidad EXPath
- ↑ Sistema de embalaje
- ↑ Módulo de archivos
- ↑ Módulo binario
- ↑ Aplicaciones web
- ↑ "Estándar para aplicaciones XQuery portátiles" . Consultado el 12 de diciembre de 2013 .
- ↑ "RESTXQ 1.0: Anotaciones RESTful para XQuery" .
- Fragmentos tomados con permiso de los libros "XML Hacks" ( O'Reilly Media ) y "XQuery" ( O'Reilly Media ).
- Versión anterior basada en un artículo de la Wikipedia en francés
Enlaces externos
- Consulta XML del W3C (XQuery)
- Lenguajes de programación de cuarta generación
- Lenguajes funcionales
- Lenguajes de consulta
- Estándares del Consorcio World Wide Web
- Acceso a datos XML