XML a databáze – základy XML-QL
V předchozím článku jsem vás seznamil s jednoduchým XML dokumentem popisující klienty cestovní kanceláře a s nejjednoduším použitím dotazovacího jazyka XML-QL. Dnes vám možnosti použití jazyka rozšířím o další zajímavé příklady použití.
Konvence
V následujícím textu budu vycházet z konvence, že ukončovací tagy lze zapisovat ve zkrácené podobě, např. místo </ZAJEZD> jednoduše zapíši </>. Příklad seznamu jmen a příjmení všech brněnských klientů by vypadal takto:
|
Dokonce, je-li dvakrát za sebou </></>, lze psát zkráceně </>>.
Příklad
Pro potřebu tohoto článku vytvořím XML dokument pro popis knih v knihovně. Odpovídající DTD bude vypadat takto:
|
Popis knihy obsahuje jednoho nebo více autorů, název a vydavatele. Autor je zapsán jako jméno a příjmení, přičemž křestní jméno nemusí být uvedeno. Vydavatel je pak evidován pod svým názvem a adresou, která se dále dělí na ulici, číslo, město a psč.
Shlukování pomocí vnořených dotazů
Přestavte si situaci, že v XML dokumentu máme následující obsah:
|
V XML dokumentu je uložena jedna kniha dvakrát, pokaždé s jiným jejím autorem. Položme nyní dotaz na seznam všech knih a jejich autorů. Dotaz sestrojím klasickým způsobem:
|
Výstup bude zcela dle očekávání:
|
Nyní bychom ale chtěli, aby výstup byl následující:
|
Tj., aby tato kniha byla zapsána jen jednou a všichni autoři byli uvedeni u ní v rámci jednoho záznamu. Toho docílíme následující konstrukcí dotazu:
|
Princip je velmi podobný vnořování dotazů v jazyce SQL. V první části where se získají všechny knihy a pro ně se naleznou všechny jejich názvy. Při konstrukci výstupu se pak vygeneruje seznam názvů všech knih a pro každou knihu (přes vazební proměnnou $k) se vygeneruje ještě podseznam všech jejích autorů.
Operátor CONTENT_AS
Uvedený dotaz lze přeformulovat pomocí operátoru content_as. Jeho použití spočívá v tom, že dotaz formulujeme klasickým jednoduchým způsobem a výsledek tohoto dotazu se „uloží“ jako kontext do vazební proměnné, na kterou se pak odkážeme v konstrukční části. Předchozí příklad lze tedy zapsat následovně:
|
Příklad se zájezdy
Nyní se na chvíli vrátím k našemu příkladu z minulého článku. Kdybychom chtěli seznam všech konaných zájezdů a u každého zájezdu seznam jeho účastníků, položili bychom dotaz takto:
|
Jak sami vidíte, jazyk XML-QL je nástroj, který na vstupu má nějaký XML dokument a na výstup dává zase XML dokument. Dá se tedy říci, že XML-QL v tomto případě slouží jako „transformátor“ XML dat.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Gaming na HDR monitoru: Stojí to za to?
12. srpna 2024 -
Členská sekce: 4 důvody proč ji mít na svém webu
12. března 2024 -
Vlastní web: Jak nainstalovat WordPress?
24. června 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024