XML fomátování

U XML formátování je také práce s kmenovou strukturou, tj. uzel xml:root a to v případech, kdy nejde o soap:Envelope, tj. pokud jde o volný formát, kdy na vstupu či výstupu akce očekáváme "nějaké" XML, které není zabaleno do protokolového standardu.

Rozdíl oproti JSON je v tom, že zde není třeba provádět předřazený (vstupní) nebo dodatečný (výstupní) pars, abychom získali validní XML, validní XML by mělo být POST obsahem. Předpokládáme ovšem také potřebu zaslání či odeslání více XML v jednom POST obsahu (tj. více než jeden kmenový uzel, byť to není obvyklé). No a protože při "volném" formátu není obálka zajištěna protokolem, zajistí server na vstupu a koncová (poslední, finální) transfomrace na výsutpu oblálku vlastní.

Pokud tedy na vstup přijde požadavek:
<request>
<get-contacts>
<name type="string">Novák<name>
<email type="string">novak@email.cz<email>
</get-contacts>
</request>

Je převeden do obálky takto:

<http:root xmlns:http="http://www.flexideo.com/actions/http">
<xm:root xmlns:xm="http://www.flexideo.com/actions/xml">
<request>
<get-contacts>
<name type="string">Novák<name>
<email type="string">novak@email.cz<email>
</get-contacts>
</request>
</xm:root>
</http:root>

Takto dochází k hlubší struktuře, defakto tu vznikají dvě obálky. To však umožňuje poslat i zjednodušené XML nebo jejich seznam. Zjednodušený seznam XML na POST vstupu (pro ilustraci budeme posílat dotazy na 2 různé emaily) by pak mohl vypadat např. takto:

<get-contacts>
<name type="string">Novák<name>
<email type="string">novak@email.cz<email>
</get-contacts>
<get-contacts>
<name type="string">Novák<name>
<email type="string">novak@email.eu<email>
</get-contacts>

Více XML obsahů v POST je validní, při převodu na vstup akce je však třeba s ním pacovat jako s jedním uzlem. Byl by tedy převeden do obálky takto:

<http:root xmlns:http="http://www.flexideo.com/actions/http">
<xm:root xmlns:xm="http://www.flexideo.com/actions/xml">
<get-contacts>
<name type="string">Novák<name>
<email type="string">novak@email.cz<email>
</get-contacts>
<get-contacts>
<name type="string">Novák<name>
<email type="string">novak@email.eu<email>
</get-contacts>
</xm:root>
</http:root>

Základní obálka http:root identifikuje kmenovou POST obálku, xml pak plní funkci wrapperu xml obsahu. Bylo by tak možné posílat zároveň i jiná než XML data.


Koncept práce s formátyPříklad službyKmenový uzel datJSON fomátováníXML fomátování