Přejít na obsah
Skip to main content

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_admin apod.) – 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 atributu type odpovídajícího uzlu document-set v odpovědi; na zpracování jednotlivých potomků document nemá žádný vliv – pseudo-typ každého dokumentu se čte samostatně z document/@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 tento document roli zděděnou z get-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:

  1. 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.
  2. 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.
  3. Vložené SQL dotazy se v tomto mezitímním XML doplní o skutečná data z databáze (sqlQueryCapsule).
  4. 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.
  5. 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řed type= – 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​