XQuery - XQuery

XQuery
Paradigma declarativo , funcional , modular
Projetado por W3C
Apareceu pela primeira vez 2007
Versão estável
3.1 / 21 de março de 2017 ; 4 anos atras  ( 21-03-2017 )
Disciplina de digitação dinâmico ou estático, forte
SO Plataforma cruzada
Extensões de nome de arquivo .xq, .xql, .xqm, .xqy, .xquery
Local na rede Internet www .w3 .org / XML / Query /
Implementações principais
Vários
Influenciado por
XPath , SQL , XSLT

XQuery ( XML Query ) é uma consulta e linguagem de programação funcional que consulta e transforma coleções de dados estruturados e não estruturados , geralmente na forma de XML , texto e com extensões específicas do fornecedor para outros formatos de dados ( JSON , binário , etc.). A linguagem é desenvolvida pelo grupo de trabalho XML Query do W3C . O trabalho é coordenado de perto com o desenvolvimento de XSLT pelo XSL Working Group; os dois grupos compartilham responsabilidade por XPath , que é um subconjunto de XQuery.

XQuery 1.0 se tornou uma recomendação do W3C em 23 de janeiro de 2007.

XQuery 3.0 se tornou uma recomendação do W3C em 8 de abril de 2014.

XQuery 3.1 se tornou uma recomendação do W3C em 21 de março de 2017.

“A missão do projeto XML Query é fornecer facilidades de consulta flexíveis para extrair dados de documentos reais e virtuais na World Wide Web, portanto, finalmente, fornecer a interação necessária entre o mundo da Web e o mundo do banco de dados. ser acessados ​​como bancos de dados. "

Características

XQuery é uma linguagem de programação funcional, sem efeitos colaterais e orientada à expressão com um sistema de tipos simples , resumido por Kilpeläinen:

Todas as expressões XQuery operam em sequências e são avaliadas em sequências. As sequências são listas ordenadas de itens. Os itens podem ser nós , que representam componentes de documentos XML, ou valores atômicos , que são instâncias de tipos de base do Esquema XML como xs: integer ou xs: string . As sequências também podem estar vazias ou consistir em apenas um único item. Nenhuma distinção é feita entre um único item e uma sequência singleton. (...) As sequências XQuery / XPath diferem de listas em linguagens como Lisp e Prolog por excluir sequências aninhadas. Os projetistas de XQuery podem ter considerado sequências aninhadas desnecessárias para a manipulação do conteúdo do documento. O aninhamento, ou hierarquia das estruturas do documento, é representado por nós e seus relacionamentos pai-filho

XQuery fornece os meios para extrair e manipular dados de documentos XML ou qualquer fonte de dados que pode ser visualizada como XML, como bancos de dados relacionais ou documentos de escritório.

XQuery contém um superconjunto de sintaxe de expressão XPath para tratar de partes específicas de um documento XML. Ele complementa isso com uma " expressão FLWOR " semelhante a SQL para realizar junções. Uma expressão FLWOR é construída a partir das cinco cláusulas após as quais é nomeada: FOR, LET, WHERE, ORDER BY, RETURN.

A linguagem também fornece sintaxe que permite a construção de novos documentos XML. Onde os nomes dos elementos e atributos são conhecidos com antecedência, uma sintaxe semelhante a XML pode ser usada; em outros casos, expressões conhecidas como construtores de nós dinâmicos estão disponíveis. Todas essas construções são definidas como expressões dentro da linguagem e podem ser aninhadas arbitrariamente.

A linguagem é baseada no modelo de dados XQuery e XPath (XDM) que usa um modelo estruturado em árvore do conteúdo de informação de um documento XML, contendo sete tipos de nós: nós de documento, elementos, atributos, nós de texto, comentários, instruções de processamento e namespaces.

O XDM também modela todos os valores como sequências (um valor singleton é considerado uma sequência de comprimento um). Os itens em uma sequência podem ser nós XML ou valores atômicos. Os valores atômicos podem ser inteiros, strings, booleanos e assim por diante: a lista completa de tipos é baseada nos tipos primitivos definidos no Esquema XML .

Recursos para atualizar documentos ou bancos de dados XML e capacidade de pesquisa de texto completo não fazem parte da linguagem principal, mas são definidos em padrões de extensão complementares: XQuery Update Facility 1.0 suporta o recurso de atualização e XQuery e XPath Full Text 1.0 suportam pesquisa de texto completo em documentos XML.

O XQuery 3.0 adiciona suporte para programação funcional completa, em que funções são valores que podem ser manipulados (armazenados em variáveis, passados ​​para funções de ordem superior e chamados dinamicamente).

Exemplos

O código XQuery de amostra abaixo lista os falantes únicos em cada ato da peça Hamlet de Shakespeare, codificado em 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 as construções XQuery para realizar cálculos são expressões . Não há afirmações , embora algumas das palavras-chave pareçam sugerir comportamentos semelhantes a afirmações. Para executar uma função, a expressão dentro do corpo é avaliada e seu valor é retornado. Assim, para escrever uma função para dobrar um valor de entrada, basta escrever:

declare function local:doubler($x) { $x * 2 }

Para escrever uma consulta completa dizendo 'Hello World', escreve-se a expressão:

 "Hello World"

Este estilo é comum em linguagens de programação funcionais .

Formulários

Abaixo estão alguns exemplos de como o XQuery pode ser usado:

  1. Extração de informações de um banco de dados para uso em um serviço da web.
  2. Gerar relatórios resumidos sobre os dados armazenados em um banco de dados XML.
  3. Pesquisar documentos textuais na Web para obter informações relevantes e compilar os resultados.
  4. Seleção e transformação de dados XML em XHTML para publicação na web.
  5. Puxando dados de bancos de dados a serem usados ​​para integração de aplicativos.
  6. Dividir um documento XML que representa várias transações em vários documentos XML.

XQuery e XSLT comparados

Alcance

Embora XQuery tenha sido inicialmente concebido como uma linguagem de consulta para grandes coleções de documentos XML, também é capaz de transformar documentos individuais. Como tal, seus recursos se sobrepõem ao XSLT , que foi projetado expressamente para permitir que documentos XML de entrada sejam transformados em HTML ou outros formatos.

Os padrões XSLT 2.0 e XQuery foram desenvolvidos por grupos de trabalho separados dentro do W3C , trabalhando juntos para garantir uma abordagem comum quando apropriado. Eles compartilham o mesmo modelo de dados ( XDM ), sistema de tipos e biblioteca de funções, e ambos incluem XPath 2.0 como sublinguagem.

Origem

As duas línguas, no entanto, estão enraizadas em tradições diferentes e atendem às necessidades de comunidades diferentes. O XSLT foi concebido principalmente como uma linguagem de folha de estilo cujo objetivo principal era renderizar XML para o leitor humano na tela, na web (como linguagem de modelo da web ) ou no papel. XQuery foi concebido principalmente como uma linguagem de consulta de banco de dados na tradição do SQL .

Como as duas linguagens se originam em comunidades diferentes, o XSLT é mais forte no tratamento de documentos narrativos com estrutura mais flexível, enquanto o XQuery é mais forte no tratamento de dados (por exemplo, ao realizar junções relacionais).

Versões

XSLT 1.0 apareceu como uma recomendação em 1999, enquanto XQuery 1.0 só se tornou uma recomendação no início de 2007; como resultado, o XSLT ainda é muito mais amplamente usado. Ambas as linguagens têm poder expressivo semelhante, embora o XSLT 2.0 tenha muitos recursos que estão faltando no XQuery 1.0, como agrupamento, formatação de número e data e maior controle sobre os namespaces XML. Muitos desses recursos foram planejados para o XQuery 3.0.

Qualquer comparação deve levar em consideração o fato de que XSLT 1.0 e XSLT 2.0 são linguagens muito diferentes. O XSLT 2.0, em particular, foi fortemente influenciado pelo XQuery em sua mudança para tipagem forte e reconhecimento de esquema.

Forças e fraquezas

Estudos de usabilidade mostraram que XQuery é mais fácil de aprender do que XSLT , especialmente para usuários com experiência anterior em linguagens de banco de dados, como SQL. Isso pode ser atribuído ao fato de que XQuery é uma linguagem menor com menos conceitos para aprender e ao fato de que os programas são mais concisos. Também é verdade que XQuery é mais ortogonal, em que qualquer expressão pode ser usada em qualquer contexto sintático. Em contraste, o XSLT é um sistema de dois idiomas no qual as expressões XPath podem ser aninhadas nas instruções XSLT, mas não vice-versa.

O XSLT é atualmente mais forte do que o XQuery para aplicativos que envolvem fazer pequenas alterações em um documento (por exemplo, excluir todos os elementos NOTE). Esses aplicativos são geralmente tratados em XSLT pelo uso de um padrão de codificação que envolve um modelo de identidade que copia todos os nós inalterados, modificados por modelos específicos que modificam os nós selecionados. XQuery não tem equivalente a esse padrão de codificação, embora em versões futuras seja possível resolver esses problemas usando os recursos de atualização na linguagem que está em desenvolvimento.

XQuery 1.0 carecia de qualquer tipo de mecanismo para ligação dinâmica ou polimorfismo; isso foi remediado com a introdução de funções como valores de primeira classe no XQuery 3.0. A ausência desse recurso começa a se tornar perceptível ao escrever grandes aplicativos ou ao escrever código que é projetado para ser reutilizável em diferentes ambientes. O XSLT oferece dois mecanismos complementares nesta área: a correspondência dinâmica de regras de modelo e a capacidade de substituir regras usando xsl:import , que tornam possível escrever aplicativos com várias camadas de personalização.

A ausência desses recursos no XQuery 1.0 foi uma decisão de design deliberada: tem como consequência que o XQuery é muito receptivo à análise estática, que é essencial para atingir o nível de otimização necessário em linguagens de consulta de banco de dados. Isso também torna mais fácil detectar erros no código XQuery em tempo de compilação.

O fato de que XSLT 2.0 usa sintaxe XML torna-o bastante prolixo em comparação com XQuery 1.0. No entanto, muitos aplicativos grandes aproveitam esse recurso usando XSLT para ler, gravar ou modificar folhas de estilo dinamicamente como parte de um pipeline de processamento. O uso da sintaxe XML também permite o uso de ferramentas baseadas em XML para gerenciar o código XSLT. Em contraste, a sintaxe XQuery é mais adequada para incorporação em linguagens de programação tradicionais, como Java (consulte XQuery API para Java ) ou C # . Se necessário, o código XQuery também pode ser expresso em uma sintaxe XML chamada XQueryX. A representação XQueryX do código XQuery é bastante detalhada e não conveniente para humanos, mas pode ser facilmente processada com ferramentas XML, por exemplo, transformada com folhas de estilo XSLT.

Extensões e trabalhos futuros

Extensões W3C

Duas extensões principais para o XQuery foram desenvolvidas pelo W3C:

Ambos alcançaram o status de recomendação como extensões do XQuery 1.0, mas o trabalho de levá-los adiante para trabalhar com o XQuery 3.0 foi abandonado por falta de recursos.

O trabalho em XQuery 3.0 foi publicado como recomendação em 8 de abril de 2014 e XQuery 3.1 é uma recomendação em fevereiro de 2017.

Uma extensão de script (procedural) para XQuery foi projetada, mas nunca concluída.

O EXPath Community Group desenvolve extensões para XQuery e outros padrões relacionados ( XPath , XSLT , XProc e XForms ). As seguintes extensões estão disponíveis atualmente:

  • Sistema de Embalagem
  • Módulo de Arquivo
  • Módulo Binário
  • Aplicativos da web

Extensões de terceiros

JSONiq é uma extensão do XQuery que adiciona suporte para extrair e transformar dados de documentos JSON . JSONiq é um superconjunto do XQuery 3.0. É publicado sob a licença Creative Commons Attribution-ShareAlike 3.0 .

O projeto EXQuery desenvolve padrões em torno da criação de aplicativos XQuery portáteis. Os seguintes padrões estão disponíveis atualmente:

  • RESTXQ

Leitura adicional

  • Consultando XML: XQuery, XPath e SQL / XML no contexto. Jim Melton e Stephen Buxton. Morgan Kaufmann, 2006. ISBN   1-55860-711-0 .
  • Walmsley, Priscilla (2007). XQuery, 1ª edição . O'Reilly Media. ISBN   978-0-596-00634-1 .
  • Walmsley, Priscilla (2015). XQuery, 2ª edição . O'Reilly Media. ISBN   978-1-4919-1510-3 .
  • XQuery: a linguagem de consulta XML. Michael Brundage. Addison-Wesley Professional, 2004. ISBN   0-321-16581-0 .
  • XQuery dos especialistas: um guia para a linguagem W3C XML Query. Howard Katz (ed). Addison-Wesley, 2004. ISBN   0-321-18060-7 .
  • Uma introdução à expressão XQuery FLWOR . Dr. Michael Kay (Comitê W3C XQuery), 2005.

Implementações

Visão geral das implementações populares de XQuery
Nome Licença Língua XQuery 3.1 XQuery 3.0 XQuery 1.0 Atualização XQuery 1.0 XQuery Full Text 1.0
BaseX Licença BSD Java sim sim sim sim sim
existir LGPL Java Parcial Parcial sim Não Não
MarkLogic Proprietário C ++ Não Parcial sim Não Não
HE saxão Licença Pública Mozilla Java Parcial Parcial sim sim Não
Saxon EE Proprietário Java sim sim sim sim Não
Zorba Licença Apache C ++ Não sim sim sim sim

Outras implementações incluem:

pesquisas

Referências

links externos