Autor Zpráva
ronnie
Profil
Zdravím vás,

mám pár dotazů k používání XSLT.

1. Vygeneruji si XML, přidám šablony a vygeneruji HTML. Vygenerované XML někde ukládám? Pokud ne, tak jak pozná kodér, jak má šablonu napsat, když neví, jakou strukturu XML má? Musím k tomu vytvořit DTD, ze kterého by to pochopil? Nebo jak se to řeší? Když XML uložím, tak to zase zabere mnohem více času - vytvořit XML, uložit, načíst XSLT, vytvořit HTML a vyplivnout do prohlížeče.

2. Jak řešit cachování? Ve Smarty se mi ukládá čisté html do souboru a když potřebuji určitou část necachovat, jednoduše na to použiju plugin, který uloží do vygenerovaného html podmínku v PHP. Pak je to velmi rychlé. V XSLT budu muset pokaždé vygenerovat celou stránku? Nebo vygenerované části stránky ukládat v samostatných souborech? Ať tak či tak, vždy bude třeba xml parsovat, ne? Neřeším teď HTTP cachování.
Oswald
Profil
1. Když to XML generuješ, tak asi víš, jakou má strukturu. Pro stejná data (typ dat) je ta struktura vždycky stejná. DTD ani ukládání není potřeba, stačí vytvořit v paměti DOMDocument a ten prohnat XSL šablonou, např:

$article = Article::findById(5);

$articleDoc = $article->toXmlDoc();
/*
$articleDoc->saveXml():
<?xml version="1.0" encoding="utf-8"?>
<article id="5">
<header>...</header>
<date>...</date>
</article>
*/
$style = new DOMDocument();
$style->load( 'transform.xsl');
$proc = new XSLTProcessor();
$proc->importStylesheet($style)
echo $proc->transformToXml($articleDoc);
ronnie
Profil
Ano, já vím, jakou to má strukturu, ale neví to externí kodér, který ze Smarty dostává migrénu:) Navíc jde o poměrně rozsáhlý web...
Joker
Profil
ronnie
jak pozná kodér, jak má šablonu napsat, když neví, jakou strukturu XML má?
XML má jazyk na definici XML struktury, který se jmenuje XSD.

Takže "čistě XML cesta" by vypadala asi takhle:
Analytik určí strukturu dat a navrhne strukturu, kterou popíše pomocí XSD. Podle XSD je potom kodér schopný vytvořit odpovídající XML strukturu a designer XSL šablonu. V reálu je většinou kromě XSD teda potřeba ještě nějaký "lidský" popis, co vlastně která XML značka znamená. Klientská část pak podle XML a XSL zobrazí příslušný výstup.

Jak řešit cachování?
Záleží na tom, co má smysl ukládat. Pokud jde o víceméně statické stránky, stačilo by mít cache přímo na ten HTML výstup?
Joker
Profil
Jo, ještě dodám, že to byla teorie a teď praxe:
To XSD je bezva v tom, že je to formální zápis a automatický nástroj podle něj může zvalidovat kód, jestli dané XSD odpovídá nebo neodpovídá.
Kdyby zákazník dostal popis XML struktury typu "Kořenová značka se jmenuje <koren> a musí obsahovat značky <jednicka> a <dvojka>, obě právě jednou. Dál může volitelně obsahovat značku <trojka>, která musí povinně obsahovat parametr "param", jehož hodnota musí být číslo. Značka <jednicka> musí obsahovat..." a následně chtěl ověřit, jestli dodaný kód odpovídá té struktuře, asi by se z toho zbláznil :-)

Ale jinak já osobně tu XML strukturu tvořím podle Excelské tabulky :-)
ronnie
Profil
O XSD slyším poprvé, podívám se na to, mohlo by to být řešení prvního problému, díky.

U cachování je to problém, protože máš např. eshop, kde budeš chtít zobrazovat naposledy navštívené stránky, obsah košíku s titulkem ve stylu cotojátky ap., jsou to dynamické části rozmístěné po celé stránce, muselo by se ukládat několik souborů a pak se pospojovat v XML atd.:/
Toto téma je uzamčeno. Odpověď nelze zaslat.