Požadavek get-pseudo-document
Účel a dopady
Načte jeden nebo více tzv. pseudo-dokumentů – sestav dat definovaných v XDS, ne přímo tabulkových dokumentů. Na rozdíl od sql-query nejde o přímý SQL dotaz, ale o dvoufázový XSLT/SQL pipeline definovaný samostatně pro každý pseudo-typ (viz „Zpracování“). Požadavek sám o sobě nic v databázi neukládá, jen čte; přesné chování SQL dotazů vložených v XSLT šabloně pseudo-typu zde není dokumentováno.
Dostupnost, kontext, oprávnění apod.
- Požadavek neprovádí žádnou explicitní kontrolu role (
r_adminapod.) – přístup je fakticky řízen tím, zda pro dvojici (pseudo-typ, efektivní role) existuje na serveru nahraná XSLT šablona pro čtení; není-li šablona pro danou roli k dispozici, položka skončí chybou (viz „Chyby a reakce“). - Vyžaduje běžnou přihlášenou session jako ostatní požadavky ve stejné větvi dispatcheru.
- Nepodléhá transakčnímu přeskočení obálky
<request>(dispatcher nemá podmínku!transactional || …) – provede se vždy.
XML požadavek (syntax + popis)
<request>
<get-pseudo-document
type="{string}"
opt-roles="{string}"
>
<document ... /> *
</get-pseudo-document>
</request>
Parametry a pravidla (atributy, potomci)
type- Typ pro obálku odpovědi - Hodnota se beze změny přenese do atribututypeodpovídajícího uzludocument-setv odpovědi; na zpracování jednotlivých potomkůdocumentnemá žádný vliv – pseudo-typ každého dokumentu se čte samostatně zdocument/@type. (typ:string; nepovinný)opt-roles- Volitelná role - Výchozí volitelná role pro všechny vnořenédocument, které ji sami nepřepíšou. (typ:string; nepovinný)
Potomek: document (0 a vícekrát) – zpracují se jen přímé potomky doslova pojmenované document, ostatní se přeskočí.
Uzel document
<document
type="{string}"
opt-roles="{string}"
/>
type- pseudo-typ dokumentu - Typový název pseudo-dokumentu definovaného v XDS; použije se k výběru XSLT šablon pro čtení. (typ:string; nepovinný – chybí-li, chová se jako neplatný typ, viz „Chyby a reakce“)opt-roles- Volitelná role - Přepíše pro tentodocumentroli zděděnou zget-pseudo-document/přihlášení. (typ:string; nepovinný)
Server z uzlu document nečte žádný jiný atribut ani nijak neomezuje jeho potomky – celý uzel document (včetně všech vlastních atributů, např. případného dkey, i případných potomků) se beze změny předá jako vstup XSLT šabloně daného pseudo-typu (viz „Zpracování“). Jejich přípustnost a význam určuje výhradně tato šablona na serveru.
Příklady požadavku
(Zatím bez ověřeného příkladu; viz příklad získání pseudo-dokumentu.)
Zpracování a vedlejší účinky
Pro každý platný potomek document:
- Server dohledá (a při prvním použití natáhne a mezipaměťuje) XSLT šablonu pro čtení daného pseudo-typu a role. Nepodaří-li se šablonu načíst, položka končí chybou.
- Celý vstupní uzel
document(se všemi atributy a potomky) se serializuje a poprvé transformuje touto XSLT šablonou; výsledkem je mezitímní XML obsahující vložené SQL dotazy. - Vložené SQL dotazy se v tomto mezitímním XML doplní o skutečná data z databáze (
sqlQueryCapsule). - Stejná XSLT šablona se aplikuje podruhé, tentokrát nad XML doplněným o data z kroku 3 – výsledek se vrátí jako obsah odpovídajícího elementu odpovědi.
- Tvar výsledného XML (jméno kořenového elementu, atributy, struktura) určuje výhradně XSLT šablona daného pseudo-typu na serveru – jde o obdobu vzoru „obsah generovaný databázovou procedurou“ popsaného v autorském postupu, jen zde je generujícím mechanismem XSLT šablona pseudo-typu místo uložené procedury.
Zvláštnost odpovědi: v jedné z chybových větví chybí mezera mezi jménem pseudo-typu a atributem type – vygenerovaný text je doslova <{pseudotyp}type="error" … bez mezery, tedy syntakticky nevalidní XML. Jde o reálné chování serveru, ne o překlep v této dokumentaci.
XML odpověď (syntax + popis)
<response>
<document-set
type="{string}"
>
<{pseudo-typ} ...>...</{pseudo-typ}> *
</document-set>
</response>
Obecný tvar document-set viz sdílený typ document-set – tato odpověď navíc oproti sdílenému popisu může nést atribut type (echo get-pseudo-document/@type), stejně jako u get-document. Přesný tvar potomka {pseudo-typ} (jeho jméno, atributy a obsah) na úspěšné cestě určuje XSLT šablona daného pseudo-typu, viz „Zpracování“ – u chybových větví je element vždy pojmenován podle document/@type z požadavku.
Příklady odpovědi
(Zatím bez ověřeného příkladu; viz příklad získání pseudo-dokumentu.)
Chyby a reakce
Chyby konkrétní položky (element pojmenovaný podle document/@type, atributy type="error" a detail):
detail="Nacteni XSLT sablony se nezdarilo."– pro daný pseudo-typ/roli neexistuje/nelze načíst čtecí XSLT šablona (self-closing).detail="Pri provadeni transformace doslo k chybe."– první nebo druhý průchod XSLT transformací selhal; obsahuje vnořené<error>s XML vstupem transformace a případně druhé<error>s chybovým popisem od XSLT procesoru. (U prvního průchodu chybí mezera předtype=– viz „Zpracování“.)detail="Vysledne XML se nepodarilo nacist."– výstup první transformace nebyl platné XML; s vnořeným<error>obsahujícím tento výstup.detail="Pri provadeni sql dotazu doslo k chybe."– selhalo doplnění dat SQL dotazy v mezitímním XML; s vnořeným<error>.detail="XSLT procesor se nepodarilo vytvorit."– nepodařilo se vytvořit instanci XSLT procesoru (self-closing).
Požadavek jako celek nemá vlastní chybový atribut na úrovni document-set – neúspěch jednotlivé položky se projeví jen odpovídajícím chybovým elementem uvnitř document-set. Výraz pro identifikaci diagnostické chyby v odpovědi: document-set/*[@type='error'].
Související požadavky
- get-document – obdobné čtení pro běžné (netabulkové) dokumenty.
- save-pseudo-document – uložení pseudo-dokumentu.