ZÁKLADY XML JMENNÉ PROSTORY při spjení XML dat z různých zdrjů může djít ke knfliktu v názvech elementů a atributů elementy mhu přidělit k různým jmenným prstrům, a tak je rzliším jmenný prstr musíme deklarvat v subru XML deklarujeme h v pčáteční značce elementu pmcí předpny xmlns kniha a cd jsu pak předpnami jmennéh prstru jmenné prstry <clanek xmlns:kniha= http://www.mje_stranka.cz/knihy" xmlns:cd= http://www.mje_stranka.cz/cd"> deklarace jm.p. jmenný prstr je identifikván pmcí URI prt, že je tak zaručena glbální jedinečnst jm.p. pak bude vnřený element elementu <clanek> jednznačně určen jménem (předpnu a lkální částí), např. <kniha:autr> a <cd:autr> předpnu lze pužít už v elementu, kde je jm.p. deklarván <knihy:clanek xmlns:kniha= http://www.mje_stranka.cz/knihy"> mhu také deklarvat defaultní jmenný prstr: <clanek xmlns= http://www.mje_stranka.cz/knihy"> všechny vnřené elementy bez předpny pak patří tmut jmennému prstru defaultní jmenný prstr mhu přepsat předpnu jinéh jmennéh prstru předpna se autmaticky nevztahuje na atributy, těm musím předpnu explicitně přidat předpna xml: je definvána specifikací XML d dkumentu XML můžeme vkládat elementy HTML, ty pak začínají předpnu html: defaultní jm.p. <html:img xmlns:html= http://www.w3c.rg/tr/rec-html40/" SRC="Raven.bmp"> html: pkud chceme takt nazvané elementy stylvat pmcí CSS, musíme uvést celý název elementu ve tvaru: kniha\:autr { fnt-size: 10pt; } css a jm.p. 1
ZOBRAZENÍ XML POMOCÍ STYLU XSLT XSLT XSLT = Extensible Stylesheet Language Transfrmatins je spjen se styly, říká, jak data zbrazvat transfrmuje XML na HTML umžňuje data vybírat, upravvat, řadit, mít pdmínky i cykly styly pmcí CSS subrů je aplikací XML d XML subru přidáme hned za deklaraci dkaz na XSLT subr, pmcí něhž chceme xml subr zpracvávat: <?xml versin="1.0" encding="windws-1250"?> <?xml-stylesheet type="text/xsl" href=""?>... instrukce pr zpracvání xml dkumenti subr XSLT () musí začínat (pdbně jak XML dkument): <?xml versin="1.0" encding="windws-1250"?> <xsl:stylesheet versin="1.0" xmlns:xsl="http://www.w3.rg/1999/xsl/transfrm"> // bsah </xsl:stylesheet> křenvým elementem musí být stylesheet, xsl: deklaruje jmenný prstr dkaz v XML subr XSLT <stylesheet> XPath XML subr má strmvu strukturu s hranami a uzly XPath... jazyk pr phyb ve strmvé struktuře, vrací uzly dpvídající danému kritériu je 7 typů uzlů, uzlem je křenvý uzel, elementy, atributy, kmentáře, jmenné prstry, instrukce pr zpracvání, text / křenvý uzel (celý dkument XML = instrukce zpracvání, kmentář, křenvý element) * uzel typu element. aktuální uzel jak textvý uzel jsu brána i "bílá místa": mezery, knec řádku, psun řádku, tabulátr přímí ptmci elementu <xsl:stylesheet> <xsl:attribute-set> <xsl:decimal-frmat> <xsl:imprt> <xsl:include> <xsl:key> <xsl:namespace-alias> <xsl:utput> <xsl:param> <xsl:preserve-space> <xsl:strip-space> <xsl:template>... nejpužívanějším elementem <xsl:variable> <xsl:script> XPath ptmci <stylesheet> 2
ŠABLONY <xsl:template> <xsl:template> určují výsledek celé transfrmace dpvídají určitému uzlu neb skupině uzlů zdrjvéh dkumentu šablna říká prhlížeči, jak zbrazit XML pmcí instrukcí pr transfrmaci kmpnent XML atributy šablny: match... jmén elementu, na nějž se aplikují příkazy uvnitř šablny name... uchvává jmén šablny pr další pužití pririty... určuje přadí, když lze pužít více šabln mde... pr skupinu uzlů a instrukci <xsl:apply-templates> budu pužity jen šablny se stejnu hdntu mde atributy šablny <xsl:template match="lkace"> // těl šablny pužití šablny v těle šabln mhu být: data typu PCDATA rzšiřvací elementy - definvány uživatelem neb prcesrem XCLT dslvné elementy - není ani instrukcí XSL ani rzšiřvacím elementem, kpírují se bez jakékliv změny instrukce XSLT <xsl:apply-imprts> <xsl:apply-templates> <xsl:attribute> <xsl:call-templates> <xsl:chse> <xsl:cmment> <xsl:cpy> <xsl:cpy-f> <xsl:element> <xsl:fallback> <xsl:fr-each> <xsl:if> <xsl:message> <xsl:number> <xsl:prcessing-instructin> <xsl:text> <xsl:value-f> <xsl:variable> těl šablny instrukce XSLT 3
INSTRUKCE <xsl:apply-templates/> umžňuje rekurzivní aplikvání šablny, hledá rekurzivně další vnřené šablny a vypíše jejich bsah nepvinný atribut select... značuje jmén uzlu, který má být zpracván, jinak jsu zpracvány všechny následující uzly <xsl:apply-templates select="prvek"/> <apply-templates> knihy.xml <?xml versin="1.0" encding="windws-1250"?> <?xml-stylesheet type="text/xsl" href=""?> <seznam> <kniha> <nazev>pvídky z jedné kapsy</nazev> <autr>karel Čapek</autr> <nakladatelstvi>melantrich</nakladatelstvi> <naklad jedntka="tis.">100</naklad> <rk zeme="(cz)">1968</rk> </kniha> <kniha> <nazev>světvá revluce</nazev> <autr>tmáš G. Masaryk</autr> <nakladatelstvi>orbis</nakladatelstvi> <naklad jedntka="tis.">50</naklad> <rk zeme="(cz)">1925</rk> </kniha> <kniha> <nazev>the Feynman lectures n physics</nazev> <autr>richard Feynman</autr> <nakladatelstvi>addisn-wesley publishing Cmpany</nakladatelstvi> <naklad jedntka="tis.">20</naklad> <rk zeme="(usa)">1966</rk> </kniha> <kniha> <nazev>java pr zelenáče</nazev> <autr>mirslav Virius</autr> <nakladatelstvi>necrtex</nakladatelstvi> <naklad jedntka="tis.">10</naklad> <rk zeme="(cz)">2005</rk> </kniha> </seznam> 1. příklad: knihy.xml <?xml versin="1.0" encding="windws-1250"?> <xsl:stylesheet versin="1.0" xmlns:xsl="http://www.w3.rg/1999/xsl/transfrm"> <xsl:template match="/"> <html> <head></head> <bdy> <xsl:apply-templates/> </bdy> </html> </xsl:stylesheet> 4
Prhlížeč začíná aplikvat šablnu (rekurzivně) na křenvý uzel XML (neb nějaký další uzel): 1. hledá šablnu definující styl, který dpvídá uzlu 2. pkud najde dpvídající šablnu, vykná instrukce bsažené v šablně (spustí transfrmaci uzlu šablny) 3. pkud nenajde, pužije vhdnu vestavěnu šablnu = šablna definvaná specifikací XSLT vestavěná šablna pr křenvý uzel XSLT aplikuje šablnu pr všechny ptmky křenvéh uzlu (pr každý uzel ptmka prvede krky 1. -3.) pr uzel element aplikuje šablnu pr všechny ptmky uzlu (pr každý uzel ptmka prvede krky 1. -3.) pr uzel text zbrazí text, pr uzel atribut zbrazí hdntu atributu, atribut není ptmkem uzlu element pr uzel kmentáře neudělá nic aplikace šablny vestavěné šablny Pr náš případ se začne aplikvat šablna pr křenvá uzel, hledá šablny pr ptmky uzlů a pak zase pr jejich ptmky, nic nenajde, až djde k textu, ten vypíše: Pvídky z jedné kapsykarel ČapekMelantrich1001968Světvá revlucetmáš G. MasarykOrbis501925The Feynman lectures n physicsrichard FeynmanAddisn-Wesley publishing Cmpany201966Java pr zelenáčemirslav ViriusNecrtex102005 zbrazení 1.příkladu INSTRUKCE <xsl:value-f select="prvek"/> text bsažený v daném uzlu vlží na výstup HTML, ten text zbrazí zbrazí i znakvá data ptmků <value-f> <?xml versin="1.0" encding="windws-1250"?> <xsl:stylesheet versin="1.0" xmlns:xsl="http://www.w3.rg/1999/xsl/transfrm"> 2. příklad: <xsl:template match="/seznam"> <html> <xsl:apply-templates/> </html> <p> <xsl:value-f select="autr"/> <xsl:value-f select="nazev"/> </p> </xsl:stylesheet> 5
1. pr uzel <seznam> začne aplikvat šablnu, hledá šablny pr uzly ptmků 2. najde šablnu pr uzel-element <kniha> 3. šablna říká, že se má d dstavce vypsat text elementů <autr> a <název > zbrazení v prhlížeči: Karel ČapekPvídky z jedné kapsy Tmáš G. MasarykSvětvá revluce Richard FeynmanThe Feynman lectures n physics Mirslav ViriusJava pr zelenáče Mhu se také pkusit zbrazení dat v tabulce: <xsl:template match="/seznam"> <html> <head> <title>seznam knih</title> </head> <bdy> zpracvání šablny zbrazení 2.příkladu 3. příklad: <h1>seznam knih</h1> <table brder="1"> <tr> <th>název</th> <th>autr</th> <th>nakladatelství</th> <th>náklad</th> <th>rk</th> </tr> <xsl:apply-templates/> </table> </bdy> </html> <tr> <td><xsl:value-f select="nazev"/></td> <td><xsl:value-f select="autr"/></td> <td><xsl:value-f select="nakladatelstvi"/></td> <td><xsl:value-f select="naklad"/></td> <td><xsl:value-f select="rk"/></td> </tr> Seznam knih zbrazení 3.příkladu Název Autr Nakladatelství Náklad Rk Pvídky z jedné kapsy Karel Čapek Melantrich 100 1968 Světvá revluce Tmáš G. Masaryk Orbis 50 1925 The Feynman lectures n physics Richard Feynman Addisn-Wesley publishing Cmpany 20 1966 Java pr zelenáče Mirslav Virius Necrtex 10 2005 6
Pkud budeme chtít vypsat i hdnty atributů, můžeme pužít instrukci: <xsl:apply-templates select="element"/> zbrazení atributů Vytvříme pak pr dané elementy vlastní šablny: <xsl:template match="element"> <xsl:value-f select="."/> <xsl:text> </xsl:text> <xsl:value-f select="@jedntka"/> // šablna pr element // data aktuálníh uzlu // zbrazení mezery // výpis hdnty atributu se jménem jedntka šablna pr atribut clanek.xsl- dplnění: <tr> <td><xsl:value-f select="nazev"/></td> <td><xsl:value-f select="autr"/></td> <td><xsl:value-f select="nakladatelstvi"/></td> <td><xsl:apply-templates select="naklad"/></td> <td><xsl:apply-templates select="rk"/></td> </tr> 4. příklad: <xsl:template match="naklad"> <xsl:value-f select="."/> <xsl:text> </xsl:text> <xsl:value-f select="@jedntka"/> <xsl:template match="rk"> <xsl:value-f select="."/> <xsl:text> </xsl:text> <xsl:value-f select="@zeme"/> u elementů nazev, autr a nakladatelstvi budeme uz jenm vypisvat bsah, prt pužijeme instrukci <xsl:value-f select="nazev"/> u elementů naklad a rk chceme vypsat i hdntu atributu, prt užijeme instrukci <xsl:apply-templates select="rk"/> a napíšeme pr ně vlastní šablnu Název Autr Nakladatelství Náklad Rk Pvídky z jedné kapsy Karel Čapek Melantrich 100 tis. 1968 (CZ) Světvá revluce Tmáš G. Masaryk Orbis 50 tis. 1925 (CZ) The Feynman lectures n physics Richard Feynman Addisn-Wesley publishing Cmpany 20 tis. 1966 (USA) Java pr zelenáče Mirslav Virius Necrtex 10 tis. 2005 (CZ) zbrazení 4. příkladu 7
INSTRUKCE <xsl:text> s její pmcí můžeme vlžit text INSTRUKCE <xsl:fr-each> s její pmcí můžeme cyklicky prcházet těl šablny: <xsl:fr-each select="kniha"> <p> <xsl:value-f select="nazev"/> </p> </xsl:fr-each> INSTRUKCE <xsl:cpy-f> kpírvání ze zdrjvéh uzlu d výstupníh strmu kpie bsahuje i atributy a ptmky vhdné pr kpii z jednh XML d druhéh <xsl:template match="/"> <xsl:cpy> <xsl:cpy-f select="*"/> </xsl:cpy> INSTRUKCE <xsl:if> pdbně jak v prgramvacích jazycích <xsl:if test="naklad>10"> <p><xsl:value-f select="nazev"/></p> </xsl:if> <text> <fr-each> <cpy> <cpy-f> <if> PREDIKÁTY = výsledek psuzení můžeme zjistit hdntu elementu, atributu, zjistit ptmky elementu,... pr manipulaci s uzly služí funkce: last()... vrací přadvé čísl psledníh uzlu psitin()... vrací pzici kntextvéh uzlu cunt(sada-uzlů)... vrací pčet uzlů id(řetězec ID)... vrací sadu uzlů name(sada-uzlů)... vrací sadu uzlů predikáty Pmcí psitin() můžeme vytvřit výčet elementů kniha číslvaný seznam: <p> <xsl:value-f select="psitin()"/> <xsl:text>. </xsl:text> <xsl:value-f select="nazev"/> </p> 8
Jedna xml data tak mhu zbrazit vícekrát: <xsl:template match="/seznam"> <html> <head> <title>seznam knih</title> </head> <bdy> <h3>číslvaný seznam knih</h3> <xsl:fr-each select="kniha"> <p> <xsl:value-f select="psitin()"/> <xsl:text>. </xsl:text> <xsl:value-f select="nazev"/> </p> </xsl:fr-each> cyklus fr-each <h3>knihy s větším pčtem výtisků</h3> <ul><xsl:apply-templates/></ul> </bdy> </html> <xsl:if test="naklad>10"> <li><xsl:value-f select="nazev"/></li> </xsl:if> <xsl:template match="kniha[autr!='karel Čapek']"> <li><xsl:value-f select="nazev"/></li> </xsl:stylesheet> větvení if šablna jen pr některé hdnty elementů Seznam jak dkaz na zálžku vytvření atributu: 1. Vlžení dkazu na zálžku - v kódu t vypadá takt: <a href="#jmen_zalzky">text dkazu</a> <xsl:fr-each select="kapitla"> <a> <xsl:attribute name="href"># <xsl:value-f select="psitin()"/> </xsl:attribute> <xsl:value-f select="psitin()"/><xsl:text>. </xsl:text> <xsl:value-f select="nadpis2"/> </a> </xsl:fr-each> 2. Zálžka pak může vypadat třeba takt: <a name="jmen_zalzky"></a> <h2 id="jmen_zalzky">nadpis</h2> <span id=" jmen_zalzky ">nějaká ukázka</span> <h2> <xsl:attribute name="id"><xsl:value-f select="psitin()"/> </xsl:attribute> <xsl:value-f select="psitin()"/><xsl:text>. </xsl:text> <xsl:value-f select="nadpis"/> </h2> vytvření atributu - dkazu na zálžku vytvření atributu zálžky 9
SHRNUTÍ PŘEHLED ŠABLON A INSTRUKCÍ křenvý element subru XSLT <xsl:stylesheet>... </xsl:stylesheet> id... (nepvinný) versin... (pvinný)... bvykle "1.0" xmlns... xmlns:xsl="http://www.w3.rg/1999/xsl/transfrm"... určení jmennéh prstru šablna XSL pr určitý uzel neb skupinu uzlů <xsl:template>... match... (nepvinný)..."lkace" uzlu name... (nepvinný)... uchvává název šablny pr další její vlání pririty... (nepvinný)... čísl určující přadí šablny mde... (nepvinný Pkud není element v těle šablny instrukcí neb rzšiřvacím elementem, bude dslvně zkpírván d výsledku těla šabln instrukce XSLT <xsl:apply-templates /> vyhledá patřičný uzel a nahradí h bsahem šablny select... (nepvinný)... značuje jmén uzlu, který má být zpracván, jinak jsu zpracvány všechny následující uzly hledá rekurzivně další vnřené šablny, když je nenajde, vypíše puze bsah elem. <xsl:value-f /> text bsažený v daném uzlu vlží na výstup HTML, ten text zbrazí select... (nepvinný)... značuje jmén uzlu, který má být zpracván <xsl:text>... </xsl:text> vkládání dslvnéh textu <xsl:attribute>... </xsl:attribute> vytvření atributu name... (pvinný)... jmén atributu <xsl:fr-each>... </xsl:fr-each> select... (nepvinný)... značuje jmén uzlu, který má být zpracván 10