Hlavní navigace

Akta X: XQuery na vzestupu

Petr Cimprich

Jazyku XQuery 1.0 se podařilo naplnit očekávání a těší se široké podpoře uživatelů i výrobců softwaru. Jeho eklektická syntaxe mu dává velké vyjadřovací schopnosti, které se navíc chystá ještě posílit hned několik plánovaných rozšíření. K čemu je jazyk XQuery 1.0 a jak bude vypadat v blízké budoucnosti?

Jazyk XQuery 1.0 se stal doporučením W3C v lednu letošního roku, společně s příbuznými specifikacemi XPath 2.0 a XSLT 2.0. Zatímco XSLT 2.0 nerozhodně přešlapuje na místě, XQuery je jednoznačně úspěšným standardem. Bylo to zřejmé už dávno předtím, než bylo zveřejněno konečné doporučení. Implementátoři na nic nečekali a dali se do práce. Dnes existuje více než padesát implementací, z toho desítky pod open-source licencemi.

XQuery je v mnohých ohledech zajímavý jazyk. Původně se mělo jednat o dotazovací jazyk nad daty ve formátu XML. Jazyk XQuery měl být pro XML data tím, čím je pro relační databáze jazyk SQL. Toto srovnání je vcelku výstižné pokud se bavíme o využití XQuery v XML databázích, ale použití XQuery je mnohem širší. Sami autoři XQuery svůj výtvor definují takto: „XQuery je standardní jazyk pro kombinování dokumentů, databází, webových stránek a skoro všeho ostatního.“ Mluví o jazyku vhodném k vývoji webových aplikací, o náhradě kódu v Javě, C++ nebo PHP. To jsou jistě odvážná tvrzení, kterým je třeba rozumět v kontextu obvyklého nadšení autorů pro svůj výtvor a snahy uplatnit jej vždy a všude. Skutečností ale zůstává, že XQuery je mimořádně mocným prostředkem.

Syntaxe jazyka XQuery je nesourodá a eklektická. Zahrnuje tři velmi různé styly. Tím prvním jsou výrazy XPath 2.0. Jazyk XPath 2.0 je podmnožinou XQuery 1.0; každý platný výraz XPath 2.0 je také platným dotazem XQuery 1.0. Dotaz na všechny zaměstnance z určitého oddělení tedy může vypadat například takto:

//employee[@deptno='22']

To ovšem není nic nového. Hlavním prostředkem jazyka XQuery jsou takzvané výrazy FLWOR viditelně inspirované jazykem SQL. Zkratka FLWOR shrnuje hlavní klauzule této části jazyka: For, Let, Where, Order by a Return. Následující výraz spojuje hlavní dokument – seznam zaměstnanců – s číselníkem všech oddělení. Pro každé, které má deset a více zaměstnanců, vrátí číslo oddělení a průměrný plat zaměstnanců:

for $d in fn:doc("departments.xml")/departments/deptno
let $e := //employee[@deptno = $d]
where fn:count($e) >= 10
order by $d
return ($d, fn:avg($e/salary))

Posledním typem syntaxe jsou konstruktory XML. Mohou být buď literální, nebo vyhodnocované (počítané). Aby výsledkem předchozího dotazu byl soubor XML, stačí dotaz doplnit literálními konstruktory. Jeden „obalí“ celý dotaz, zbylé strukturují obsah klauzule return:

<big-depts>
  {
    for $d in fn:doc("departments.xml")/departments/deptno
    let $e := //employee[@deptno = $d]
    where fn:count($e) >= 10
    order by $d
    return
      <big-dept>

        <deptno>{$d}</deptno>
        <headcount>{fn:count($e)}</headcount>
        <avgsal>{fn:avg($e/salary)}</avgsal>
      </big-dept>

  }
</big-depts>

Syntaxe jazyka XQuery dovoluje mnohonásobné vnořování konstruktorů XML a výrazů FLWOR, takže lze napsat opravdu složité dotazy, obsahující dále například deklarace uživatelských funkcí. Zahrnutí výrazů XPath a konstruktorů XML nedovoluje jazyku XQuery definovat vyhrazená klíčová slova. Totožná jména elementů by v takovém případě bylo nutné nějak odlišit, čímž by vzala za své kompatibilita s XPathem a XML. Klauzule výrazů FLWOR je tedy nutné rozpoznávat v kontextu, což činí syntaxi dosti křehkou a parsování dotazů poměrně obtížným. Hlavní potíž ale představuje rozšiřování takto pojatého jazyka. A to není žádný akademický povzdech, ale reálný a velmi aktuální problém.

Rozšiřování jazyka XQuery je totiž skloňováno ve všech pádech. Rozšířením číslo jedna je specifikace XQuery 1.0 and XPath 2.0 Full-Text 1.0 doplňující XPath 2.0 a XQuery 1.0 o prostředky pro textové vyhledávání. Rozšířeny jsou výrazy XPath i FLWOR.

Druhou a mnohem podstatnější rozšiřující specifikací jeXQuery Update Facility 1.0. Máme-li zůstat u analogie s SQL, XQuery 1.0 zatím nabízí jen protějšek příkazu SELECT. S XQuery Update Facility 1.0 přibudou XMLizované verze příkazů INSERT, DELETE a UPDATE. Tady už nemůžeme mluvit o doplnění výrazů FLWOR, ale o zavedení nových paralelních výrazů insert, delete, replace, rename a transform. Právě toto zásadní rozšíření naráží na omezení syntaxe a nutí autory jazyka balancovat mezi vymýšlením dlouhých slovních konstrukcí a zaváděním nových speciálních znaků.

Dva výše zmíněné doplňky už jsou relativně daleko; pro oba už bylo zveřejněno několik pracovních verzí specifikace, přičemž ta aktuální už je označena jako Last Call. Pro třetí zamýšlené rozšíření – XQuery Scripting Extension – zatím existují jen požadavky. Skriptovací rozšíření má být procedurální programovací jazyk s plnohodnotnými proměnnými, který posílí XQuery v oblastech, jako je udržování interních stavů. I tady se nabízí analogie s SQL a procedurálními jazyky typu PL/SQL.

A když mluvíme o rozšiřování XQuery 1.0, nesmíme vynechat ani úvahy o budoucí verzi 1.1, zatím také jen ve stádiu požadavků. Z nich je zřejmé, že se verze 1.1 bude snažit doplnit chybějící grupování, různé formátování výstupu, lepší zpracování chyb a další náměty od uživatelů.

XQuery se nehodlá spokojit se svým současným úspěšným tažením a bouřlivě se rozvíjí na všechny strany. Pokud se podaří dokončit všechna plánovaná rozšíření, má XQuery šanci stát se novou rozsáhlou platformou pro práci nejen s XML. Uživatelé ani implementátoři, kteří si vsadili na XQuery, se určitě nebudou nudit.

Našli jste v článku chybu?

11. 9. 2007 21:18

Jirka Kosek (neregistrovaný)
Jestli vám stačí free editor pro XQuery, můžete zkusit tenhle:

http://www.axyana.com/qizxopen/

11. 9. 2007 19:08

Me by zajímalo, jak je to s editory nebo vyvojovymi prostredimi. Vím, ze existuji placene Altova, Stylus a Oxygen (zacal jsem pouzivat Oxygen). Existuji nejake podobné pouzitelne free editory nebo vyvojova prostredi? Zatim me bohuzel nic podobneho necvrnklo do nosu.
Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?