stringtranslate.com

Consulta X

XQuery ( XML Query ) es un lenguaje de programación funcional y de consultas 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 , binario , 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 XSL Working Group; 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 facilidades de consulta flexibles para extraer datos de documentos reales y virtuales en la World Wide Web, proporcionando así la interacción necesaria entre el mundo de la Web y el mundo de las bases de datos. En última instancia, se accederá a colecciones de archivos XML como si fueran 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 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 hace distinción entre un solo elemento y una secuencia singleton. (...) Las secuencias XQuery/XPath difieren de las listas en lenguajes como Lisp y Prolog al excluir las secuencias anidadas. Los diseñadores de XQuery pueden haber considerado innecesarias las secuencias anidadas para la manipulación de los contenidos de los documentos. La anidación, o jerarquía de las estructuras de los documentos, se representa en cambio 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 [9] o documentos de oficina.

XQuery contiene un superconjunto de sintaxis de expresión XPath para abordar partes específicas de un documento XML. Lo complementa 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 una sintaxis que permite construir nuevos documentos XML. Cuando los nombres de los elementos y atributos se conocen de antemano, se puede utilizar una sintaxis similar a la de 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 se pueden anidar de forma arbitraria.

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, 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, valores booleanos, etc.: la lista completa de tipos se basa en los tipos primitivos definidos en el esquema XML .

Las características para actualizar documentos XML o bases de datos y la capacidad de búsqueda de texto completo no son parte del lenguaje principal, sino que están definidas 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 que aparece a continuación enumera los hablantes únicos en cada acto de la obra Hamlet de Shakespeare, codificado en hamlet.xml

 <html><body> { para $ actuar en doc ( "hamlet.xml" )// ACTUAR deja que $ oradores := valores-distintos ( $ actuar // ORADOR ) devuelva <div> <h1> { cadena ( $ actuar / TÍTULO ) } </h1> <ul> { para $ orador en $ oradores devuelve <li> { $ orador } </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 que duplique un valor de entrada, simplemente se escribe:

declarar función 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 funcional .

Aplicaciones

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

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

Comparación de XQuery y XSLT

Alcance

Aunque XQuery fue concebido 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 superponen con XSLT , que fue diseñado expresamente para permitir que los documentos XML de entrada se transformen en HTML u otros formatos.

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

Origen

Sin embargo, ambos lenguajes tienen sus raíces en tradiciones diferentes y atienden las necesidades de comunidades diferentes. XSLT fue concebido principalmente como un lenguaje de hojas de estilo cuyo objetivo principal era representar XML para el lector humano en la pantalla, en la web (como lenguaje de plantillas 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 lenguajes 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 una recomendación en 1999, mientras que XQuery 1.0 recién se convirtió en una recomendación a principios de 2007; como resultado, XSLT todavía se usa mucho más ampliamente. Ambos lenguajes tienen un poder expresivo similar, aunque XSLT 2.0 tiene muchas características que faltan en XQuery 1.0, como agrupamiento, formato de números y fechas, y un mayor control sobre los espacios de nombres XML. [10] [11] [12] Muchas de estas características estaban 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 la tipificación fuerte y el reconocimiento 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 para aprender y al hecho de que los programas son más concisos. También es cierto que XQuery es más ortogonal, en el sentido de que cualquier expresión se puede utilizar 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.

En la actualidad, XSLT es más potente que XQuery para aplicaciones que implican realizar pequeños cambios en un documento (por ejemplo, eliminar todos los elementos NOTE). Estas aplicaciones se manejan generalmente en XSLT mediante el uso de un patrón de codificación que implica una plantilla de identidad que copia todos los nodos sin cambios, modificados 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 están en desarrollo. [15]

XQuery 1.0 carecía de cualquier tipo de mecanismo para la vinculación dinámica 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 cuando se escriben aplicaciones grandes o cuando se escribe código que está diseñado para ser reutilizable en diferentes entornos. [ cita requerida ] XSLT ofrece dos mecanismos complementarios en esta área: la coincidencia dinámica de reglas de plantilla y la capacidad de anular reglas utilizando xsl:import, que hacen posible 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 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. 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 hace que sea bastante verboso en comparación con XQuery 1.0. Sin embargo, muchas aplicaciones grandes aprovechan esta capacidad al utilizar XSLT para leer, escribir o modificar hojas de estilo de forma dinámica 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 XQuery es más adecuada para la incrustación en lenguajes de programación tradicionales como Java (consulte la API 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 verbosa y no es conveniente para los humanos, pero se puede procesar fácilmente con herramientas XML, por ejemplo, transformándolas con hojas de estilo XSLT. [16] [17]

Ampliaciones y trabajos futuros

Extensiones W3C

El W3C desarrolló dos extensiones importantes para XQuery:

Ambos alcanzaron el estado de Recomendación como extensiones de XQuery 1.0, pero el trabajo para llevarlos a funcionar 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 a partir de febrero de 2017.

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

El grupo comunitario EXPath [22] desarrolla extensiones para XQuery y otros estándares relacionados ( XPath , XSLT , XProc y XForms ). Actualmente están disponibles las siguientes extensiones:

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 .

XQuery 3.1 de facto deja obsoleto a JSONiq ya que ha agregado soporte completo para JSON.

El proyecto EXQuery [27] desarrolla estándares para la creación de aplicaciones XQuery portables. Actualmente están disponibles los siguientes estándares:

Lectura adicional

Implementaciones

Véase también

Referencias

  1. ^ "Recomendación de XQuery 3.1". 21 de marzo de 2017.
  2. ^ "XQuery 3.1: un lenguaje de consulta XML". 21 de marzo de 2017.
  3. ^ "XQuery y tipado estático".
  4. ^ "Cronología de los estándares XML y Web semántica del W3C" (PDF) . 2012-02-04.
  5. ^ "Recomendación de XQuery 3.0". 8 de abril de 2014.
  6. ^ "Recomendación de XQuery 3.1". 21 de marzo de 2017.
  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). "Se debate la superposición entre XQuery y XSLT".
  13. ^ "Requisitos de XQuery 3.0".
  14. ^ Usabilidad de los lenguajes de consulta XML. Joris Graaumans. Serie de tesis doctorales SIKS n.º 2005-16, ISBN 90-393-4065-X 
  15. ^ "Instalació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 scripts XQuery 1.0
  21. ^ Extensión de scripts de XQuery 1.0
  22. ^ Grupo comunitario EXPath
  23. ^ Sistema de embalaje
  24. ^ Módulo de archivo
  25. ^ Módulo binario
  26. ^ Aplicaciones web
  27. ^ "Estándar para aplicaciones XQuery portables" . Consultado el 12 de diciembre de 2013 .
  28. ^ "RESTXQ 1.0: Anotaciones RESTful para XQuery".

Enlaces externos