XQuery - XQuery

XQuery
Paradigme deklarativ , funktionel , modulær
Designet af W3C
Først dukkede op 2007
Stabil frigivelse
3.1 / 21. marts 2017 ; for 4 år siden  ( 2017-03-21 )
Skrive disciplin dynamisk eller statisk, stærk
OS Tværplatform
Filnavneudvidelser .xq, .xql, .xqm, .xqy, .xquery
Internet side www .w3 .org / XML / Query /
Større implementeringer
Mange
Påvirket af
XPath , SQL , XSLT

XQuery ( XML Query ) er et forespørgsel og funktionelt programmeringssprog , der forespørger og transformerer samlinger af strukturerede og ustrukturerede data , normalt i form af XML , tekst og med leverandørspecifikke udvidelser til andre dataformater ( JSON , binær osv.). Sproget er udviklet af XML Query- arbejdsgruppen i W3C . Arbejdet koordineres tæt med udviklingen af XSLT af XSL-arbejdsgruppen; de to grupper deler ansvaret for XPath , som er en delmængde af XQuery.

XQuery 1.0 blev en W3C-anbefaling den 23. januar 2007.

XQuery 3.0 blev en W3C-anbefaling den 8. april 2014.

XQuery 3.1 blev en W3C-anbefaling den 21. marts 2017.

"XML-forespørgselsprojektets mission er at tilvejebringe fleksible forespørgselsfaciliteter til at udtrække data fra ægte og virtuelle dokumenter på World Wide Web, og til sidst tilvejebringe den nødvendige interaktion mellem webverdenen og databaseverdenen. I sidste ende vil samlinger af XML-filer være adgang som databaser. "

Funktioner

XQuery er en funktionel, bivirkning-fri , ekspression programmeringssprog med en simpel typesystem , opsummeret af Kilpeläinen:

Alle XQuery-udtryk fungerer på sekvenser og evalueres til sekvenser. Sekvenser er ordnede lister over varer. Elementer kan enten være noder , der repræsenterer komponenter i XML-dokumenter, eller atomværdier , som er forekomster af XML-skema-basetyper som xs: heltal eller xs: streng . Sekvenser kan også være tomme eller kun bestå af et enkelt element. Der skelnes ikke mellem et enkelt element og en singletonsekvens. (...) XQuery / XPath-sekvenser adskiller sig fra lister på sprog som Lisp og Prolog ved at ekskludere indlejrede sekvenser. Designere af XQuery kan have betragtet indlejrede sekvenser som unødvendige til manipulation af dokumentindhold. Indlejring eller hierarki af dokumentstrukturer er i stedet repræsenteret af noder og deres forhold mellem børn og forældre

XQuery giver mulighed for at udtrække og manipulere data fra XML-dokumenter eller enhver datakilde, der kan ses som XML, såsom relationsdatabaser eller kontordokumenter.

XQuery indeholder et supersæt af XPath- udtrykssyntaks til adressering af specifikke dele af et XML-dokument. Det supplerer dette med et SQL- lignende " FLWOR- udtryk" til at udføre sammenføjninger. Et FLWOR-udtryk er konstrueret ud fra de fem klausuler, hvorefter det er navngivet: FOR, LET, WHERE, ORDER BY, RETURN.

Sproget giver også syntaks, der gør det muligt at konstruere nye XML-dokumenter. Hvor element- og attributnavne er kendt på forhånd, kan en XML-lignende syntaks bruges; i andre tilfælde er udtryk, der kaldes dynamiske knudekonstruktører, tilgængelige. Alle disse konstruktioner er defineret som udtryk inden for sproget og kan være vilkårligt indlejrede.

Sproget er baseret på XQuery og XPath Data Model (XDM), der bruger en trestruktureret model af informationsindholdet i et XML-dokument, der indeholder syv slags noder: dokumentnoder, elementer, attributter, tekstnoder, kommentarer, behandlingsinstruktioner og navneområder.

XDM modellerer også alle værdier som sekvenser (en singletonværdi betragtes som en sekvens af længde en). Elementerne i en sekvens kan enten være XML-noder eller atomværdier. Atomiske værdier kan være heltal, strenge, booleanske osv.: Den fulde liste over typer er baseret på de primitive typer, der er defineret i XML-skema .

Funktioner til opdatering af XML-dokumenter eller databaser og søgning i fuldtekst er ikke en del af kernesproget, men er defineret i tilføjelsesstandards: XQuery Update Facility 1.0 understøtter opdateringsfunktion og XQuery og XPath Full Text 1.0 understøtter søgning i fuld tekst i XML-dokumenter.

XQuery 3.0 tilføjer understøttelse af fuld funktionel programmering, idet funktioner er værdier, der kan manipuleres (gemt i variabler, videregivet til højere ordensfunktioner og kaldes dynamisk).

Eksempler

Eksemplet på XQuery-koden nedenfor viser de unikke højttalere i hver akt af Shakespeares stykke Hamlet, kodet i 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>

Alle XQuery-konstruktioner til udførelse af beregninger er udtryk . Der er ingen udsagn , selvom nogle af nøgleordene synes at antyde udsagnlignende adfærd. For at udføre en funktion evalueres udtrykket i kroppen, og dens værdi returneres. For at skrive en funktion til at fordoble en inputværdi skriver man simpelthen:

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

For at skrive en fuld forespørgsel, der siger 'Hello World', skriver man udtrykket:

 "Hello World"

Denne stil er almindelig i funktionelle programmeringssprog .

Ansøgninger

Nedenfor er et par eksempler på, hvordan XQuery kan bruges:

  1. Uddrag af information fra en database til brug i en webservice.
  2. Generering af oversigtsrapporter om data gemt i en XML-database.
  3. Søgning efter tekstdokumenter på Internettet efter relevant information og kompilering af resultaterne.
  4. Valg og omdannelse af XML-data til XHTML, der skal offentliggøres på Internettet.
  5. Henter data fra databaser, der skal bruges til applikationsintegration.
  6. Opdeling af et XML-dokument, der repræsenterer flere transaktioner i flere XML-dokumenter.

XQuery og XSLT sammenlignet

Anvendelsesområde

Selvom XQuery oprindeligt blev opfattet som et forespørgselssprog for store samlinger af XML-dokumenter, er det også i stand til at transformere individuelle dokumenter. Som sådan overlapper dens kapaciteter med XSLT , som udtrykkeligt blev designet til at tillade input XML-dokumenter at blive omdannet til HTML eller andre formater.

XSLT 2.0- og XQuery-standarderne blev udviklet af separate arbejdsgrupper inden for W3C og arbejdede sammen for at sikre en fælles tilgang, hvor det var relevant. De deler den samme datamodel ( XDM ), typesystem og funktionsbibliotek, og begge inkluderer XPath 2.0 som et under sprog.

Oprindelse

De to sprog er dog rodfæstet i forskellige traditioner og tjener forskellige samfunds behov. XSLT blev primært opfattet som et typografi-sprog, hvis primære mål var at gengive XML til den menneskelige læser på skærmen, på nettet (som webskabelonsprog ) eller på papir. XQuery blev primært tænkt som et databaseforespørgselssprog i traditionen med SQL .

Fordi de to sprog stammer fra forskellige samfund, er XSLT stærkere i sin håndtering af fortællende dokumenter med mere fleksibel struktur, mens XQuery er stærkere i sin datahåndtering (for eksempel når man udfører relationelle sammenføjninger).

Versioner

XSLT 1.0 optrådte som en anbefaling i 1999, mens XQuery 1.0 først blev en anbefaling i begyndelsen af ​​2007; som et resultat er XSLT stadig meget mere udbredt. Begge sprog har lignende udtryksstyrke, selvom XSLT 2.0 har mange funktioner, der mangler i XQuery 1.0, såsom gruppering, nummer- og datoformatering og større kontrol over XML-navneområder. Mange af disse funktioner var planlagt til XQuery 3.0.

Enhver sammenligning skal tage højde for, at XSLT 1.0 og XSLT 2.0 er meget forskellige sprog. Især XSLT 2.0 har været stærkt påvirket af XQuery i sin bevægelse til stærk skrivning og skemabevidsthed.

Styrker og svagheder

Usability-studier har vist, at XQuery er lettere at lære end XSLT , især for brugere med tidligere erfaring med databasesprog som SQL. Dette kan tilskrives det faktum, at XQuery er et mindre sprog med færre begreber at lære, og det faktum, at programmerne er mere koncise. Det er også rigtigt, at XQuery er mere ortogonal, idet ethvert udtryk kan bruges i enhver syntaktisk kontekst. Derimod er XSLT et to-sprogssystem, hvor XPath-udtryk kan indlejres i XSLT-instruktioner, men ikke omvendt.

XSLT er i øjeblikket stærkere end XQuery til applikationer, der involverer små ændringer i et dokument (for eksempel sletning af alle BEMÆRK-elementer). Sådanne applikationer håndteres generelt i XSLT ved anvendelse af et kodemønster, der involverer en identitetsskabelon, der kopierer alle noder uændret, modificeret af specifikke skabeloner, der ændrer valgte noder. XQuery svarer ikke til dette kodemønster, selvom det i fremtidige versioner vil være muligt at tackle sådanne problemer ved hjælp af opdateringsfaciliteterne på det sprog, der er under udvikling.

XQuery 1.0 manglede nogen form for mekanisme til dynamisk binding eller polymorfisme; dette er afhjulpet med introduktionen af ​​funktioner som førsteklasses værdier i XQuery 3.0. Fraværet af denne kapacitet begynder at blive mærkbar, når du skriver store applikationer, eller når du skriver kode, der er designet til at kunne genbruges i forskellige miljøer. XSLT tilbyder to supplerende mekanismer på dette område: dynamisk matchning af skabelonregler og muligheden for at tilsidesætte regler ved hjælp af xsl:import , der gør det muligt at skrive applikationer med flere tilpasningslag.

Fraværet af disse faciliteter fra XQuery 1.0 var en bevidst designbeslutning: det har den konsekvens, at XQuery er meget modtagelig for statisk analyse, hvilket er vigtigt for at opnå det nødvendige optimeringsniveau i databaseforespørgselssprog. Dette gør det også lettere at opdage fejl i XQuery-kode på kompileringstidspunktet.

Det faktum, at XSLT 2.0 bruger XML- syntaks, gør det temmelig ordentligt sammenlignet med XQuery 1.0. Imidlertid udnytter mange store applikationer denne mulighed ved at bruge XSLT til at læse, skrive eller ændre typografiark dynamisk som en del af en behandlingsrørledning. Brug af XML-syntaks muliggør også brug af XML-baserede værktøjer til styring af XSLT-kode. I modsætning hertil er XQuery-syntaksen mere velegnet til indlejring i traditionelle programmeringssprog såsom Java (se XQuery API for Java ) eller C # . Om nødvendigt kan XQuery-kode også udtrykkes i en XML-syntaks kaldet XQueryX. XQueryX-repræsentationen af ​​XQuery-koden er ret detaljeret og ikke praktisk for mennesker, men kan let behandles med XML-værktøjer, for eksempel transformeret med XSLT-stilark.

Udvidelser og fremtidigt arbejde

W3C-udvidelser

To store udvidelser til XQuery blev udviklet af W3C:

Begge nåede Anbefalingsstatus som udvidelser til XQuery 1.0, men arbejdet med at føre dem frem til arbejde med XQuery 3.0 blev opgivet på grund af manglende ressourcer.

Arbejdet med XQuery 3.0 blev offentliggjort som en anbefaling den 8. april 2014, og XQuery 3.1 er en anbefaling pr. Februar 2017.

En scripting (procedurel) udvidelse til XQuery blev designet, men blev aldrig afsluttet.

EXPath Community Group udvikler udvidelser til XQuery og andre relaterede standarder ( XPath , XSLT , XProc og XForms ). Følgende udvidelser er i øjeblikket tilgængelige:

  • Emballagesystem
  • Filmodul
  • Binært modul
  • Webapplikationer

Tredjepartsudvidelser

JSONiq er en udvidelse af XQuery, der tilføjer support til at udtrække og transformere data fra JSON- dokumenter. JSONiq er et supersæt af XQuery 3.0. Den udgives under Creative Commons Attribution-ShareAlike 3.0- licens.

EXQuery-projektet udvikler standarder omkring oprettelse af bærbare XQuery-applikationer. Følgende standarder er i øjeblikket tilgængelige:

  • RESTXQ

Yderligere læsning

  • Forespørgsel om XML: XQuery, XPath og SQL / XML i sammenhæng. Jim Melton og Stephen Buxton. Morgan Kaufmann, 2006. ISBN   1-55860-711-0 .
  • Walmsley, Priscilla (2007). XQuery, 1. udgave . O'Reilly Media. ISBN   978-0-596-00634-1 .
  • Walmsley, Priscilla (2015). XQuery, 2. udgave . O'Reilly Media. ISBN   978-1-4919-1510-3 .
  • XQuery: XML Query Language. Michael Brundage. Addison-Wesley Professional, 2004. ISBN   0-321-16581-0 .
  • XQuery fra eksperterne: En guide til W3C XML Query Language. Howard Katz (red). Addison-Wesley, 2004. ISBN   0-321-18060-7 .
  • En introduktion til XQuery FLWOR- udtrykket. Dr. Michael Kay (W3C XQuery Committee), 2005.

Implementeringer

Oversigt over populære XQuery-implementeringer
Navn Licens Sprog XQuery 3.1 XQuery 3.0 XQuery 1.0 XQuery-opdatering 1.0 XQuery Fuld tekst 1.0
BaseX BSD-licens Java Ja Ja Ja Ja Ja
eksisterer LGPL Java Delvis Delvis Ja Ingen Ingen
MarkLogic Proprietære C ++ Ingen Delvis Ja Ingen Ingen
Saksisk HE Mozilla Public License Java Delvis Delvis Ja Ja Ingen
Saksisk EE Proprietære Java Ja Ja Ja Ja Ingen
Zorba Apache-licens C ++ Ingen Ja Ja Ja Ja

Andre implementeringer inkluderer:

Undersøgelser

Referencer

eksterne links