250 likes | 385 Views
METAJĘZYKI 5. dr inż. Robert Berezowski e-mail: robert.berezowski@ie.tu.koszalin.pl Ul. Śniadeckich 2 Pokój 223A. Politechnika Koszalińska Wydział Elektroniki i Informatyki Katedra Inżynierii Komputerowej. kantor. notowanie. notowanie. wydarzenie. data. kursy. dzien. rok. korona.
E N D
METAJĘZYKI5 dr inż. Robert Berezowski e-mail: robert.berezowski@ie.tu.koszalin.pl Ul. Śniadeckich 2 Pokój 223A Politechnika Koszalińska Wydział Elektroniki i Informatyki Katedra Inżynierii Komputerowej METAJĘZYKI
kantor notowanie notowanie wydarzenie data kursy dzien rok korona miesiac hrywna dolar euro funt Dokument kantor.xml METAJĘZYKI
Zmienne - xsl:variable • Deklaracja zmiennych • <xsl:variable name=„xx” select=”wartość”/> • <xsl:variable name=„xx”>wartość</xsl:variable> • Użycie: • <xsl:value-of select=„$xx”/> • Zmienna w XML – • raz zapisać, wielokrotnie odczytać. • nie ma możliwości modyfikacji • żywotność ograniczona do elementu wewnątrz którego została zadeklarowana <xsl:template match="/"> <HTML><BODY> <H1>Kantorek! </H1> <xsl:for-each select="kantor/notowanie[1]/kursy/*"> <xsl:variable name="nazwa"> <xsl:value-of select="name()"/> </xsl:variable> <xsl:value-of select="$nazwa"/><BR/> </xsl:for-each> </BODY></HTML> </xsl:template> METAJĘZYKI
Zmienne - xsl:variable • Przykład <xsl:variable name="data"> <xsl:value-of select="data/dzien"/>/ <xsl:value-of select="data/miesiac"/>/ <xsl:value-of select="data/rok"/> </xsl:variable> . . . <td><xsl:value-of select="$data"/></td> METAJĘZYKI
Zmienne – przykłady tekstów <xsl:value-of select=„text()"/> <xsl:value-of select="substring(name(),1,3)"/> <xsl:value-of select="substring-after(text(),'.')"/> <xsl:value-of select="translate(text(),'.',',')"/> METAJĘZYKI
<xsl:template match="/"> <HTML> <BODY bgcolor="lime"> <H1>Kantorek! </H1> <xsl:for-each select="kantor/notowanie"> <xsl:variable name="nazwa" select="."/> ... <xsl:value-of select="$nazwa/kursy/funt"/> ... <BR/> </xsl:for-each> </BODY></HTML> </xsl:template> Zmienne – przykłady drzew <xsl:template match="/"> <HTML> <BODY bgcolor="lime"> <H1>Kantorek! </H1> <xsl:for-each select="kantor/notowanie"> <xsl:variable name="nazwa" select="."/> ... <xsl:value-of select="$nazwa/data[rok=2004]"/> ... <BR/> </xsl:for-each> </BODY></HTML> </xsl:template> METAJĘZYKI
Zmienna globalna i lokalna <xsl:template match="/"> <HTML> <BODY bgcolor="lime"> <H1>Kantorek! </H1> <xsl:variable name="nazwa">... <xsl:for-each select="kantor/notowanie"> <xsl:value-of select="data/miesiac"/>, </xsl:for-each>... </xsl:variable> <xsl:value-of select="$nazwa"/> </BODY></HTML> </xsl:template> Zmienna lokalna wewnątrz reguły „/” <xsl:variable name="nazwa">... <xsl:for-each select="/kantor/notowanie"> <xsl:value-of select="data/miesiac"/>, </xsl:for-each>... </xsl:variable> <xsl:template match="/"> <HTML> <BODY bgcolor="lime"> <H1>Kantorek! </H1> <xsl:value-of select="$nazwa"/> </BODY></HTML> </xsl:template> Zmienna globalna wewnątrz elementu <xsl:stylesheet...> METAJĘZYKI
<xsl:variablename="imie">Jacek</xsl:variable> <xsl:templatematch="audycja"> <xsl:iftest="@osoba=$imie"> <table border="1" width="100%"> <tr> <td width="60"><xsl:value-of select="@osoba"/></td> <td width="80"><xsl:value-of select="text()"/></td> <td width="50"><xsl:value-of select="@data"/></td> <td width="40"><xsl:value-of select="@godz"/></td> <td width="30"><xsl:value-of select="@czas"/></td> </tr> </table> </xsl:if> </xsl:template> METAJĘZYKI
<xsl:templatematch="/program"> <html><body> <table border="1"> <xsl:for-eachselect="//audycja[not(@osoba=preceding::*/@osoba)]"> <xsl:variablename="kto" select="@osoba"/> <tr> <td><xsl:value-ofselect="$kto"/></td> <td> <table border="1" width="100%"> <xsl:for-eachselect="//audycja[@osoba=$kto]"> <tr> <td><xsl:value-ofselect="../@nazwa"/></td> <td><xsl:value-ofselect="text()"/></td> <td><xsl:value-ofselect="@data"/></td> </tr> </xsl:for-each> </table> </td> </tr> </xsl:for-each> </table> </body></html> </xsl:template> METAJĘZYKI
document() • Funkcja document() • pozwala pobierać dane z innych źródeł XML, zamiast ze źródła podanego w wywołaniu procesora. • Użycie: document(url), document(‘jakis_plik’) <xsl:variable name="kantor2" select="document('kantor2.xml')"/> <xsl:template match="/"> <table border="1"><tr><td>data</td><td>funt</td><td>euro</td></tr> <xsl:for-each select="kantor/notowanie"> <tr><td><xsl:value-of select="data"/></td> <td><xsl:value-of select="kursy/funt"/></td> <td><xsl:value-of select="kursy/euro"/></td></tr> </xsl:for-each> <tr><td>data</td><td>funt</td><td>euro</td></tr> <xsl:for-each select="$kantor2/kantor/notowanie"> <tr><td><xsl:value-of select="data"/></td> <td><xsl:value-of select="kursy/funt"/></td> <td><xsl:value-of select="kursy/euro"/></td></tr> </xsl:for-each></table></xsl:template> METAJĘZYKI
Parametry – xsl:param • Parametry pozwalają dynamicznie zmienić postać wyniku • Rodzaje: • Globalne – pobierające dane z poza arkusza, deklarowane w elemencie <xsl:stylesheet...> • Lokalne – używane wewnątrz reguł do pobierania danych z reguły wywołującej. • Deklaracja: • <xsl:param name=„nazwa” select=„wartość”/> • <xsl:param name=„nazwa”>wartość</xsl:param> • Wywołanie reguły z parametrami: <xsl:call-template name=„max”> <xsl:with-param name=„liczba1” select=„notowanie[1]/kursy/funt”/> <xsl:with-param name=„liczba2” select=„notowanie[2]/kursy/funt”/> </xsl:call-template> METAJĘZYKI
<xsl:templatematch="/program"> <h1> <xsl:call-templatename="naglowek"/> <xsl:call-templatename="spis"> <xsl:with-paramname="drzewo" select="."/> </xsl:call-template> <xsl:apply-templates/> </h1> </xsl:template> <xsl:templatematch="kanal"> <a name="{@nazwa}"> <h2> <xsl:value-ofselect="@nazwa"/> </h2></a> <table border=„1”><tr><td> <xsl:apply-templates/> </td></tr></table> </xsl:template> <xsl:templatename="spis"> <xsl:paramname="drzewo"/> <xsl:for-eachselect="$drzewo/kanal"> --| <a href="#{@nazwa}"><xsl:value-ofselect="@nazwa"/></a> |-- </xsl:for-each> </xsl:template> METAJĘZYKI
<xsl:template match="/"> <HTML><BODY bgcolor="lime"> <TABLE border="1"> <xsl:call-template name="tabela"> <xsl:with-param name="plik" select="."/> </xsl:call-template> <xsl:call-template name="tabela"> <xsl:with-param name="plik" select="document('kantor2.xml')"/> </xsl:call-template> </TABLE></BODY></HTML> </xsl:template> Przykład użycia parametrów lokalnych <xsl:template name="tabela"> <xsl:param name="plik"/> <tr><td>data</td><td>funt</td><td>euro</td></tr> <xsl:for-each select="$plik/kantor/notowanie"> <tr><td><xsl:value-of select="data"/></td> <td><xsl:value-of select="kursy/funt"/></td> <td><xsl:value-of select="kursy/euro"/></td></tr> </xsl:for-each> </xsl:template> METAJĘZYKI
<xsl:param name="waluta”>euro</xsl:param> <xsl:template match="/"> <HTML><BODY bgcolor="lime"><H1>Kantorek! </H1> <TABLE border="1"> <xsl:call-template name="tabela"> <xsl:with-param name="plik" select="."/> </xsl:call-template> <xsl:call-template name="tabela"> <xsl:with-param name="plik" select="document('kantor2.xml')"/> </xsl:call-template></TABLE></BODY></HTML> </xsl:template> Przykład użycia parametrów globalnych <xsl:template name="tabela"> <xsl:param name="plik"/> <tr><td>data</td><td>cena</td></tr> <xsl:for-each select="$plik/kantor/notowanie"> <tr><td><xsl:value-of select="data"/></td> <td><xsl:value-of select="kursy/*[name()=$waluta]"/></td></tr> </xsl:for-each> </xsl:template> METAJĘZYKI
Wywołanie parametrów globalnych Plik kantor.html część body <BODY onload="init();" style="margin-top: '0'"> <button onclick="show('funt')">funty</button> <button onclick="show('dolar')">dolary</button> <button onclick="show('euro')">euro</button> <button onclick="show('hrywna')">hrywna</button> <button onclick="show('korona')">korona</button> <div id="ekran">wyniki</div> </BODY> METAJĘZYKI
Plik kantor.html część head <SCRIPT language="jscript"> Wywołanie parametrów globalnych var xml, xsl, xsltmp; function init() {xml = new ActiveXObject('MSXML2.DOMDocument.4.0'); xml.async = false; xml.load('kantor.xml'); xsl=new ActiveXObject('MSXML2.FreeThreadedDOMDocument.4.0'); xsl.async = false; xsl.load('kantor-5.xsl'); xsltmp = new ActiveXObject("Msxml2.XSLTemplate.4.0"); xsltmp.stylesheet = xsl; } Wczytanie pliku xml Wczytanie pliku xsl function show(waluta) { var xslProc = xsltmp.createProcessor(); xslProc.input = xml; xslProc.addParameter("waluta", waluta, ""); xslProc.transform(); ekran.innerHTML = xslProc.output; } </SCRIPT> Dodanie parametru do pliku xsl Umieszczenie rezultatu w obiekcie ‘ekran’ METAJĘZYKI
<xsl:template match="/program"> <xsl:call-template name="naglowek"/> <xsl:call-template name="spis"> <xsl:with-param name="drzewo" select="."/> </xsl:call-template> <xsl:apply-templates/> <xsl:call-template name="stopka"/> </xsl:template> <xsl:template match="kanal"> <a name="{@nazwa}"> <xsl:value-of select="@nazwa"/> </a> </xsl:template> <xsl:template name="naglowek"> <br/>Program telewizyjny - wybrane audycje<br/> </xsl:template> <xsl:template name="spis"> <xsl:param name="drzewo"/> <xsl:for-each select="$drzewo/kanal"> --| <a href="#{@nazwa}"> <xsl:value-of select="@nazwa"/></a> |-- </xsl:for-each> </xsl:template> Parametry i hiperłącza METAJĘZYKI
function tr(program){ xmlFile = "tv.xml”; xslFile = "1x.xsl"; … objXSLTProc.addParameter("data", program, ""); … parent.pl1.innerHTML = objXSLTProc.output;} … <FORM> <INPUT TYPE="button" VALUE="TVP1" onClick="tr('TVP1');"> <INPUT TYPE="button" VALUE="TVP2" onClick="tr('TVP2');"> <INPUT TYPE="button" VALUE="TVN" onClick="tr('TVN');"> <INPUT TYPE="button" VALUE="POLSAT" onClick="tr('POLSAT');"> </FORM><hr> <div ID="pl1">pokaz</div> <xsl:paramname="data">*</xsl:param> <xsl:templatematch="/program"> <xsl:apply-templatesselect="kanal[@nazwa=$data]"/> </xsl:template> <xsl:templatematch="kanal"> <xsl:variablename="opis" select="document('tvopis.xml')"/> … <xsl:apply-templates> <xsl:sortselect="@osoba"/> </xsl:apply-templates> </xsl:template> METAJĘZYKI
function tr(program){ xmlFile = "tv.xml”; xslFile = "2x.xsl"; … objXSLTProc.addParameter("data", program, ""); … parent.pl1.innerHTML = objXSLTProc.output;} <FORM> <INPUT TYPE="button" VALUE="Justyna" onClick="tr('Justyna');"> <INPUT TYPE="button" VALUE="Jacek" onClick="tr('Jacek');"> <INPUT TYPE="button" VALUE="Grzesiek" onClick="tr('Grzesiek');"> </FORM> <hr> <div ID="pl1">pokaz</div> <xsl:paramname="data">*</xsl:param> <xsl:templatematch="/program"> <xsl:apply-templatesselect="kanal"/> </xsl:template> <xsl:templatematch="kanal"> <xsl:apply-templatesselect="audycja[@osoba=$data]"> <xsl:sortselect="@osoba"/> </xsl:apply-templates> </xsl:template> <xsl:templatematch="audycja"> <table border="1" width="100%„> METAJĘZYKI
<xsl:param name="obiekt1">*</xsl:param> <xsl:param name="obiekt2">*</xsl:param> <xsl:template match="/program"> function tr(pr1,pr2){ xmlFile = "tv.xml”; xslFile = "tv.xsl"; objXSLTProc.addParameter("obiekt1", pr1, ""); objXSLTProc.addParameter("obiekt2", pr2, ""); document.body.innerHTML = objXSLTProc.output;} … <FORM> <INPUT TYPE="text" id="pole1" /> <INPUT TYPE="text" id="pole2" /> <INPUT TYPE="button" value="szukaj" onClick="tr(document.getElementById('pole1').value, document.getElementById('pole2').value)"/> </FORM><hr/> szukane: <div id=„pokaz">brak</div> <xsl:apply-templates select="kanal"> <xsl:sort select="audycja/@czas"/> </xsl:apply-templates> </xsl:template> <xsl:template match="kanal"> <xsl:apply-templates select="audycja[(@*=$obiekt1) or (@*=$obiekt2) or (.=$obiekt1) or (.=$obiekt2)]"> </xsl:apply-templates> </xsl:template> METAJĘZYKI
<xsl:stylesheet … xmlns:msxsl="urn:schemas-microsoft-com:xslt"> <xsl:param name="sort1">osoba</xsl:param> <xsl:variable name="tylko.audycje"> <element> <xsl:for-each select="/program/kanal„> <xsl:for-each select="audycja"> <xsl:copy-of select="."/> </xsl:for-each> </xsl:for-each> </element> </xsl:variable> <xsl:template match="/program"> function tr(pr3){xmlFile = "tv.xml”; xslFile = "tv.xsl"; objXSLTProc.addParameter("sort1", pr3, ""); document.body.innerHTML = objXSLTProc.output; parent.pokaz.innerHTML= " sort: "+pr3;} … <FORM><INPUT TYPE="text" id="pole3" /> <INPUT TYPE="button" value="szukaj" onClick="tr(document.getElementById('pole3').value)"/> </FORM><hr/> szukane: <div id="pokaz">brak</div> <xsl:call-template name="wypisz"> <xsl:with-param name="wszystkie" select="$tylko.audycje"/> </xsl:call-template> … <xsl:template name="wypisz„> <xsl:param name="wszystkie"/> <xsl:for-each select="msxsl:node-set($wszystkie)/element/audycja"> <xsl:sort select="@*[name()=$sort1]"/> <table border="1" width="100%„><tr> <td width="60"><xsl:value-of select="@osoba"/></td> </xsl:template> METAJĘZYKI
WYSPY XML w HTML • Pozwalają umieścić treści z dokumentu xml wewnątrz dokumentu html <HTML><BODY bgcolor=„lime”> <XML ID="wyspa" src="kantor3.xml"></XML> <table border="1" datasrc="#wyspa"> <thead><th colspan="3">data</th><th>euro</th> <th>dolar</th><th>funt</th><th>hrywna</th> <th>korona</th></thead> <tr><td><span datafld="dzien"/></td><td> <span datafld="miesiac"/></td><td> <span datafld="rok"/></td> <td><span datafld="dolar"/></td> <td><span datafld="euro"/></td> <td><span datafld="funt"/></td> <td><span datafld="hrywna"/></td> <td><span datafld="korona"/></td> </tr></table></BODY></HTML> METAJĘZYKI
SVG – Scalable Vector Graphics • Język opisu grafiki dwuwymiarowej • Grafika jest opisywana za pomocą równań matematycznych przez co zajmuje mniej pamięci niż pliki graficzne typu gif, jpg. • Kilka linków • www.w3.org/TR/SVG - specyfikacja SVG • www.w3.org/Graphics/SVG - strona domowa W3C SVG • www.irt.org/articles/js176 - troche linków i artykułów • www.adobe.com/svg - strona Adobe o SVG, kilka tutoriali METAJĘZYKI
Przykłady svg • Linia od punktu (x1=10,y1=100) do punktu (x2=222,y2=234) w kolorze czerwonym <line x1="10" y1="100" x2="222" y2="234" style="fill:red"/> • Prostokąt od punktu (x=0,y=0) o wysokości 10 (height) i długości 100 (width) w wypełniony kolorem czerwonym <rect x="0" y="0" height="10" width="100" style="fill:red"/> • Koło o środku w punkcie (cx=150,cy=150) i promieniu r=50 wypełniony kolorem zielonym, ze stopniem przeźroczystości 0.5 <circle cx="150" cy="150" r="50„ style="fill:green; fill-opacity: 0.5"/> • tekst z określonymi atrybutami: <text style = "fill: red; font-size: 24pt" x = "25" y = "250"> juz niedlugo majowka</text> • Animacja elementów – obrót o kąt od 0 do 360 stopni w czasie 4s nieskończoną ilość razy <animateTransform attributeName="transform" type="rotate" dur="4s" from="0" to="360„ repeatCount = "indefinite"/> METAJĘZYKI