Příklad transform

Upravit obsah stránky

V příkladu nakombinujeme použití dvou požadavků, jeden sql-query na podávání SQL SELECT dotazů do databáze a druhý get-documentna získávání instancí strukturovaných xml dokumentů. V příkladu půjde o to, dotázat se na dokumenty vložené do evidence za poslední týden a tyto dokumenty poskládané vrátit v odpovědi.

Požadavek odesílaný na server bude vypadat takto:

Vstupní dotaz využívá obecné vlastnosti dostupné automaticky v každém flexideo dokumentu, konkrétně datum vytvoření provýběr týden starých položek. Výsledkem dotazu je pak seznam pdk, tedy primárních klíčů dokumentů, které byly v uplnulém týdnu změněny. V atributu type v obálce dotazu je pak uveden požadovaný typ dokumentu, v našem případě dokument typukontakt.

Protože byl do vstupního uzlu input vložen požadavek s dotazem, který má být před první transformací vykonán, je třeba, aby prvním krokem, tedy prvním potomkem uzlu steps byl příkazperform-request. Kdybychom do vstupního input uzlu umístili xml určené k transformaci, byl byl prvním (a možná i jediným) krokem v uzlu steps příkaz perform-transform. Ale v příkladu jde o to,nejprve zpracovat dotaz.

Výstup z dotazu, který bude v druhém kroku sekvenčního požadavku transform zpracováván šablonou a bude tedy pro tento krok vstupním xml, může vypadat nějak takto:

Tento obsah by mohl takto vypadat po několika dnech od zavedení typu kontakt, kde se v této době zavedlo zatím jen pět kontaktů.

Jako druhým krokem je příkaz perform-transform s šablonou umístěnou pro tento účelem do složky examples, která nemusí být fyzicky na webovém sídle, ale může být nastavena jako takzvaná virtuální (viz. složky serveru).

Obsah souboru se šablonou transform-request.xsl může vypadat například takto:

          

Po provedení prvního kroku, kterým je předání požadavku s dotazem pro získání seznamu primárních klíčů, je v druhém kroku realizována transformace, na jejímž výstupu jeopět požadavek. Tentokrát je to seznam uzlů get-document pro získání celých instancí kontaktů zavedených v uplynulém týdnu.

Ze vstupních dat uvedených výše tedy díky zobrazené šabloně vznikne následující výstupní XML:

Díky třetí instrukci, kterou je stejně jako u první, perform-request, bude toto xml předáno serveru jako požadavek. Při tvorběšablon nebo i vkládání obsahu hlavního vstupního uzlu input je třeba dbát na to, aby byly požadavky baleny do uzlu request, tak, jako je to uváděno zde v příkladu.

S šablonou je spojena ještě jeden nástroj, v příkladurovněž zobrazený a tím je možnost parametrizace použité šablony. V příkladu je použito parametru max-count, který v uvedeném příkadu zajšťuje, je-li uveden, maximální počet požadavků v get-document, není-li uveden, pak se použije výchozí hodnotazadaná v šabloně, kterou je 0 (nula) a v případě nuly není počet požadavků omezován. Aby vše fungovalo jak má, je třeba dodržet při parametrizaci především dvě věci:

bullet

pro definici parametrů v šabloně používejte uzly xsl:param a nikolixsl:variable;

bullet

hodnoty parametrů uváděné jako potomky perform-transform nezabalujte nikdy do pomocných apostrofů, jež se v šablonách používají pro vkládání textových hodnot v atributech select atest, zde není třeba texty a čísla odlišovat, XSLT procesor se o správné předání hodnot postará sám;

Po provedení třetího a posledního příkazu (kroku) v požadavku server vrátí výsledek v elementu transform, který sám osobě je již, stejně jako všechny ostatní odpovědi serveru balen do obálky response. Byl-li posledním příkazem (krokem) příkaz perform-request, je ve výsledném elementu transform uveden další uzelrespnse. Byla-li posledním krokem transformace, záleží na výstupu z transformace.