stringtranslate.com

XQuery

XQuery ( XML Query ) es un lenguaje de programación funcional y de consulta que consulta y transforma colecciones de datos estructurados y no estructurados , generalmente en forma de XML , texto y con extensiones específicas del proveedor para otros formatos de datos ( JSON , binarios , etc.). El lenguaje es desarrollado por el grupo de trabajo XML Query del W3C . El trabajo está estrechamente coordinado con el desarrollo de XSLT por parte del Grupo de Trabajo XSL; Los dos grupos comparten la responsabilidad de XPath , que es un subconjunto de XQuery.

XQuery 1.0 se convirtió en una recomendación del W3C el 23 de enero de 2007. [4]

XQuery 3.0 se convirtió en una recomendación del W3C el 8 de abril de 2014. [5]

XQuery 3.1 se convirtió en una recomendación del W3C el 21 de marzo de 2017. [6]

"La misión del proyecto XML Query es proporcionar servicios de consulta flexibles para extraer datos de documentos reales y virtuales en la World Wide Web, proporcionando así finalmente la interacción necesaria entre el mundo Web y el mundo de las bases de datos. En última instancia, las colecciones de archivos XML ser accedidos como bases de datos." [7]

Características

XQuery es un lenguaje de programación funcional, libre de efectos secundarios y orientado a expresiones con un sistema de tipos simple , resumido por Kilpeläinen: [8]

Todas las expresiones XQuery operan en 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 esquema XML como xs:integer o xs:string . Las secuencias también pueden estar vacías o constar de un solo elemento. No se hace distinción entre un solo elemento y una secuencia única. (...) Las secuencias XQuery/XPath se diferencian de las listas en lenguajes como Lisp y Prolog al excluir secuencias anidadas. Es posible que los diseñadores de XQuery hayan considerado innecesarias las secuencias anidadas para la manipulación del contenido del documento. El anidamiento o jerarquía de estructuras de documentos está representado por nodos y sus relaciones entre padres e hijos.

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 [9] o documentos de Office.

XQuery contiene un superconjunto de sintaxis de expresiones XPath para abordar partes específicas de un documento XML. Complementa esto 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, RETURN.

El lenguaje también proporciona sintaxis que permite construir nuevos documentos XML. Cuando los nombres de elementos y atributos se conocen de antemano, se puede utilizar una sintaxis similar a XML; en otros casos, están disponibles 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 de información de un documento XML, que contiene siete tipos de nodos: nodos de documento, elementos, atributos, nodos de texto, comentarios e instrucciones de procesamiento. y espacios de nombres.

XDM también modela todos los valores como secuencias (un valor singleton 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 números enteros, cadenas, booleanos, etc.: la lista completa de tipos se basa en los tipos primitivos definidos en el esquema XML .

Las funciones para actualizar documentos o bases de datos XML y la capacidad de búsqueda de texto completo no forman parte del lenguaje principal, pero se definen en estándares de extensión complementarios: XQuery Update Facility 1.0 admite la función de actualización y XQuery y XPath Full Text 1.0 admiten la búsqueda de texto completo. en documentos XML.

XQuery 3.0 agrega soporte para programación funcional completa, en el sentido de que las funciones son valores que pueden manipularse (almacenarse en variables, pasarse a funciones de orden superior y llamarse dinámicamente).

Ejemplos

El código XQuery de muestra siguiente enumera los hablantes únicos en cada acto de la obra de Shakespeare Hamlet, codificado en hamlet.xml.

 <html><cuerpo> { for $ actuar en doc ( "hamlet.xml" )// ACT dejar $ hablantes := valores distintos ( $ actuar // ALTAVOZ ) return <div> <h1> { cadena ( $ actuar / TÍTULO ) } </h1> <ul> { para $ altavoz en $ altavoces devolver <li> { $ altavoz } </li> } </ul> </div> } </body></html>                             

Todas las construcciones de XQuery para realizar cálculos son expresiones . No hay declaraciones , aunque algunas de las palabras clave parecen sugerir comportamientos similares a declaraciones. 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 para duplicar un valor de entrada, simplemente se escribe:

declarar función local: duplicador ( $ 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 lenguajes de programación funcionales .

Aplicaciones

A continuación se muestran algunos ejemplos de cómo se puede utilizar XQuery:

  1. Extracción de información de una base de datos para su uso en un servicio web.
  2. Generar informes resumidos sobre los datos almacenados en una base de datos XML.
  3. Buscar documentos textuales en la Web para obtener información relevante y recopilar los resultados.
  4. Seleccionar y transformar datos XML a XHTML para publicarlos en la Web.
  5. Extraer datos de bases de datos para utilizarlos en la integración de la aplicación.
  6. Dividir un documento XML que representa múltiples transacciones en múltiples documentos XML.

XQuery y XSLT comparados

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. Como tal, sus capacidades se superponen con XSLT , que fue diseñado expresamente para permitir que los documentos XML de entrada se transformen a HTML u otros formatos.

Los estándares XSLT 2.0 y XQuery fueron desarrollados por grupos de trabajo separados dentro del W3C , trabajando juntos para garantizar un enfoque común cuando corresponda. Comparten el mismo modelo de datos ( XDM ), sistema de tipos y biblioteca de funciones, y ambos incluyen XPath 2.0 como sublenguaje.

Origen

Los dos idiomas, sin embargo, tienen sus raíces en tradiciones diferentes y satisfacen las necesidades de comunidades diferentes. XSLT se concibió principalmente como un lenguaje de hojas de estilo cuyo objetivo principal era representar XML para el lector humano en pantalla, en la web (como lenguaje de plantilla web ) o en papel. XQuery fue concebido principalmente como un lenguaje de consulta de bases de datos en la tradición de SQL .

Debido a que los dos idiomas se originan en comunidades diferentes, XSLT es más fuerte [ ¿según quién? ] en su manejo de documentos narrativos con una estructura más flexible, mientras que XQuery es más fuerte en su manejo de datos (por ejemplo, al realizar uniones relacionales).

Versiones

XSLT 1.0 apareció como Recomendación en 1999, mientras que XQuery 1.0 sólo se convirtió en Recomendación a principios de 2007; Como resultado, XSLT sigue siendo mucho más utilizado. Ambos lenguajes tienen un poder expresivo similar, aunque XSLT 2.0 tiene muchas características que faltan en XQuery 1.0, como agrupación, formato de números y fechas, y un mayor control sobre los espacios de nombres XML. [10] [11] [12] Muchas de estas características fueron planeadas para XQuery 3.0. [13]

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 sido fuertemente influenciado por XQuery en su transición hacia una tipificación fuerte y conciencia 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. [14] Esto se puede atribuir al hecho de que XQuery es un lenguaje más pequeño con menos conceptos que aprender y al hecho de que los programas son más concisos. También es cierto que XQuery es más ortogonal, ya que cualquier expresión puede usarse en cualquier contexto sintáctico. Por el contrario, XSLT es un sistema de dos idiomas en el que las expresiones XPath se pueden anidar en instrucciones XSLT, pero no al revés.

Actualmente, XSLT es más potente que XQuery para aplicaciones que implican realizar pequeños cambios en un documento (por ejemplo, eliminar todos los elementos NOTA). Estas aplicaciones generalmente se manejan en XSLT mediante el uso de un patrón de codificación que involucra una plantilla de identidad que copia todos los nodos sin cambios, modificada por plantillas específicas que modifican los nodos seleccionados. XQuery no tiene equivalente a este patrón de codificación, aunque en futuras versiones será posible abordar estos problemas utilizando las funciones de actualización del lenguaje que se encuentran en desarrollo. [15]

XQuery 1.0 carecía de cualquier tipo de mecanismo de enlace dinámico o 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 cuando se escriben aplicaciones grandes o cuando se escribe código diseñado para ser reutilizable en diferentes entornos. [ cita necesaria ] XSLT ofrece dos mecanismos complementarios en esta área: la coincidencia dinámica de reglas de plantilla y la capacidad de anular reglas usando xsl:import, que permiten escribir aplicaciones con múltiples capas de personalización.

La ausencia de estas funciones en XQuery 1.0 fue una decisión de diseño deliberada: tiene como consecuencia que XQuery es muy susceptible al análisis estático, lo cual es esencial para alcanzar el nivel de optimización necesario en los lenguajes de consulta de bases de datos. Esto también facilita la detección de errores en el código XQuery en tiempo de compilación.

El hecho de que XSLT 2.0 utilice sintaxis XML lo hace bastante detallado en comparación con XQuery 1.0. Sin embargo, muchas aplicaciones grandes aprovechan esta capacidad utilizando XSLT para leer, escribir o modificar hojas de estilo dinámicamente como parte de un proceso de procesamiento. El uso de la sintaxis XML también permite el uso de herramientas basadas en XML para gestionar el código XSLT. Por el contrario, la sintaxis de XQuery es más adecuada para integrarse en lenguajes de programación tradicionales como Java (consulte API de XQuery para Java ) o C# . Si es necesario, el código XQuery también se puede expresar en una sintaxis XML llamada XQueryX. La representación XQueryX del código XQuery es bastante detallada y no es conveniente para los humanos, pero puede procesarse fácilmente con herramientas XML, por ejemplo, transformarse con hojas de estilo XSLT. [16] [17]

Ampliaciones y trabajos futuros

Extensiones W3C

El W3C desarrolló dos extensiones importantes de XQuery:

Ambos alcanzaron el estado de Recomendación como extensiones de XQuery 1.0, pero el trabajo para llevarlos adelante para que funcionen con XQuery 3.0 se abandonó por falta de recursos.

El trabajo sobre XQuery 3.0 se publicó como Recomendación el 8 de abril de 2014 [19] y XQuery 3.1 es una Recomendación en febrero de 2017.

Se diseñó una extensión de secuencias de comandos (procedimiento) para XQuery, pero nunca se completó. [20] [21]

El EXPath Community Group [22] desarrolla extensiones para XQuery y otros estándares relacionados ( XPath , XSLT , XProc y XForms ). Las siguientes extensiones están actualmente disponibles:

Extensiones de terceros

JSONiq es una extensión de XQuery que agrega soporte para extraer y transformar datos de documentos JSON . JSONiq es un superconjunto de XQuery 3.0. Se publica bajo la licencia Creative Commons Attribution-ShareAlike 3.0 .

El proyecto EXQuery [27] desarrolla estándares en torno a la creación de aplicaciones XQuery portátiles. Actualmente están disponibles los siguientes estándares:

Otras lecturas

Implementaciones

Ver también

Referencias

  1. ^ "Recomendación de XQuery 3.1". 2017-03-21.
  2. ^ "XQuery 3.1: un lenguaje de consulta XML". 2017-03-21.
  3. ^ "XQuery y escritura estática".
  4. ^ "Cronología de los estándares XML y Web Semántica W3C" (PDF) . 2012-02-04.
  5. ^ "Recomendación de XQuery 3.0". 2014-04-08.
  6. ^ "Recomendación de XQuery 3.1". 2017-03-21.
  7. ^ W3C (25 de octubre de 2003). "citado por J. Robie".{{cite web}}: CS1 maint: numeric names: authors list (link)
  8. ^ Kilpeläinen, Pekka (2012). "Uso de XQuery para la resolución de problemas" (PDF) . Software: práctica y experiencia . 42 (12): 1433-1465. doi :10.1002/spe.1140. S2CID  15561027.
  9. ^ "Recuperación de datos con XQuery". Recuperado el 18 de enero de 2016.
  10. ^ Kay, Michael (mayo de 2005). "Comparación de XSLT y XQuery".
  11. ^ Eisenberg, J. David (9 de marzo de 2005). "Comparación de XSLT y XQuery".
  12. ^ Smith, Michael (23 de febrero de 2001). "XQuery, XSLT" se superponen "debatido".
  13. ^ "Requisitos de XQuery 3.0".
  14. ^ Usabilidad de los lenguajes de consulta XML. Joris Graaumans. Serie de disertaciones SIKS No 2005-16, ISBN 90-393-4065-X 
  15. ^ "Función de actualización de XQuery".
  16. ^ "Sintaxis XML para XQuery (XQueryX)".
  17. ^ Michael Kay. "Diarios sajones: cómo no doblar constantes".
  18. ^ XQuery y XPath Texto completo 1.0
  19. ^ Consulta XML (XQuery) 3.0
  20. ^ Requisitos de la extensión de secuencias de comandos XQuery 1.0
  21. ^ Extensión de secuencias de comandos XQuery 1.0
  22. ^ Grupo comunitario EXPath
  23. ^ Sistema de embalaje
  24. ^ Módulo de archivos
  25. ^ Módulo binario
  26. ^ Aplicaciones web
  27. ^ "Estándar para aplicaciones XQuery portátiles" . Consultado el 12 de diciembre de 2013 .
  28. ^ "RESTXQ 1.0: Anotaciones RESTful para XQuery".

enlaces externos