Styl psaní XSLT

Pachollini, 10. července 2005, 11:08

Na serveru XML.com vyšel pěkný článek o stylu psaní XSLT Push, Pull, Next!. Pokud si s XSLT už trošku rozumíte, ale stále ještě to není každodenní důvěrné obcování, článek vás může postrčit správným směrem. Bob DuCharme v něm rozebírá výhody a nevýhody dvou způsobů zpracování dokumentu:

Metoda „pull“
zpracovává dokument pomocí jedné šablony s použitím <xsl:value-of>, <xsl:for-each> atp.
Metoda „push“
definuje samostatné šablony pro zpracování jednotlivých prvků zdrojového dokumentu.

Pokud při psaní XSLT váháte, kterou metodu použít, nebo jste si nikdy nevšimli, že tu tyhle dvě možnosti jsou, je pro vás Bobův článek to pravé ořechové. Pokud vůbec netušíte, o čem je řeč, doporučuji on-line knihu Jiřího Koska XSLT v příkladech.

Co vy na to?

[1]

Yuhů, 11. července 2005, 00:13 http://www.jakpsatweb.cz

To jsem nevěděl, že se to takhle jmenuje. V duchu jsem si tyhle dva přístupy odlišoval už dlouho. Navíc u sebe pozoruju docela posun. Začal jsem původně stylem push -- co nejvíce oddělených šablon a value-of použít jenom minimálně.

Časem jsem se překvapivě dopracoval k opaku -- mám jeden soubor a metodou pull do ní cpu, co mi přijde v xml pod ruku. Příkaz apply-templates naopak používám jenom, když už to nejde jinak.

[2] není to opačně?

Yuhů, 11. července 2005, 00:16

Teď jsem si všimnul, že žo možná máš v tomto článku opačně než je to v tom anglickém článku. Pokud čtu dobře, tak PUSH přístup používá více šablon a slepuje je přes apply-templates. Naopak PULL přístup má rád jednu šablonu a plní to přes value-of.

[3] :-)

Pachollini, 11. července 2005, 07:50

[2] Je to opačně, díky moc za upozornění, opravil jsem to. A to jsem si při psaní říkal, že musím zkontrolovat, jestli jsem to neprohodil...

[1] Já jsem naopak "pushista" – postupné zpracování je jedna z věcí, kvůli kterým mám XSLT rád. Hlavně proto, že:

1) Můžu navrhovat styl „shora dolů“ – od nejobecnější struktury po směrem k detailům a na každé úrovni se dá odladit výstup.

2) Připadá mi, že se snáz dělají změny – upravím jen příslušné šablony.

3) Je to šikovné pro „kaskádování“ – speciální pravidla mají přednost před zvláštními, často používám případ, kdy se prochází dokument a je definované obecné pravidlo, pak speciálnější, které ho přebije. (Např. vygenerování obsahu HTML dokumentu.) <apply-imports> je taky fajn.

4) Na druhou stranu, když je těch šablon moc, může v tom snadno vzniknout bordel.

Obecně bych řekl, že metoda pull může být užitečná spíš u dokumentů, kde očekáváme na vstupu nebo výstupu jednodužší (resp. předem očekávanou) strukturu a zpracování neprochází strom moc do hloubky, zatímco push je výhodná u sloužitějších dokumentů s volnou strukturou.

Aktuální Seky

.