Transformace dle substepů

Interní transformace mají zaručeny opět jednotné kódování v utf-8, jako nultá transformace. Vstupy do transformace byly již popsány výše. Základem transformace je následující XML text:

"<?xml version='1.0' encoding='utf-8'?><input>"

Za tento řetězec se vloží texty dle definovaných vstupů. Výstupy z transformací, krom té finální (viz. dále), negenerují xml hlavičky. Každá šablona vč. té nulté a krom finální obsahuje následující instrukci:

<xsl:output method="xml" encoding="utf-8" omit-xml-declaration="yes"/>

(tj. výstup do platného xml v utf-8, ale bez instrukce <?xml version="1.0"?>)

Výše uvedený výchozí text tak je prostým spojováním doplněn o další obsah a na konec je opět uzavřen řetězcem:

"</input>"

Tento sestavený vstupní řetězec je po průchodu transformace zapomenut. Již jej není nikde třeba.

Po úspěšném průchodu transformací, první co je ověřováno, je existence obsahu. Pokud proběhla úspěšně transformace XML to XML (všechny jsou takové), mělo by na výsledku být platné XML, tedy minimálně kmenový uzel. Pokud je tento uzel prázdný a není v definici substepu uvedeno @skip-empty=true, musí server vrátit chybu - je to považováno za chybu serveru (viz. kategorizace v řešení chyb).

Pokud je výsledek prázdný a je to pomocí @skip-empty=true umožněno, pak je již ignorován případný požadavek na odeslání na server a do výstupního textu je na místo odeslání a uložení výsledku vložen text:

"<response/>"

Bez ohledu na to, zda je výsledek prázdný či nikoli a pokud nebyl dosud vyvolán error, je třeba ještě ověřit kontrolu statusu. Ta se provádí právě po testu na existenci obsahu a to pouze v případě, že v nastavení substep je uveden @status=true. Statusová kontrola pak spočívá v ověření obsahu atributu @status v kmenovém uzlu výstupního XML. Status může obsahovat hodnoty ok (nebo neuvedeno) nebo error. V případě statusu error je třeba, aby server vrátil soap:fault s nastavením patřičného kódu (viz. kategorizace v řešení chyb).

Pokud dosud nevznikla chyba a je nastaveno @send = true, pak výstup z transformace má být odeslán na server. Výstup v takovém již obsahuje obálku request. Výstup serveru je třeba pak opět testovat na existenci obsahu, není li uvedeno @skip-empty=true. Případné chyby indikované serverem (chyba v dotazu apod.) budou kontrolovány šablonou v dalším či finálním kroku.


Rozšíření o substepyZajištění vstupního XMLNultá transformaceTransformace dle substepůFinální transformace