miercuri, 26 noiembrie 2008

XSL(T)

Acest articol vine in ajutorul celor mai putin familiarizati cu utilizarea limbajului XML si posibilitatile sale, in special folosirea fisierelor de tip stylesheet XSL.


Scurta descriere:

XSL este o prescurtare a eXtensible Stylesheet Language si a fost creat pentru ca se dorea un limbaj care sa descrie un fisier de stil pentru paginile xml.
Daca pentru HTML stylesheet-urile se realizeaza folosind CSS (Cascading StyleSheet), aceste fisiere insotind fisierele HTML, pentru fisierele XML nu exista un limbaj care sa permita definirea unui stil.

In HTML tagurile sunt fixe si fiecare browser stie sa afiseze aceste taguri, pe cand in XML se pot folosi orice taguri, iar browserele nu mai stiu cum trebuie afisata informatia, prin urmare se introduc fisierele XSL, care ajuta la descriea modului in care urmeaza sa fie afisate datele.

XSL este reprezentat de fapt prin 3 limbaje:
- XSLT(XSL Transforms) – un limbaj de transformare a documentelor XML
- XPath – un limbaj de descriere a structurii documentelor XML (de navigare in aceste documente)
- XSL-FO (XSL Formating Objects, numit astazi XSL) – un limbaj de formatare a documentelor XML


Cum se foloseste?

Pentru ca browserul sa stie ca afisarea xml-ului se face folosind un stylesheet de tip XSL in fisierul XML trebuie adaugate urmatoarele linii la inceput, inainte de continutul de date al fisierului:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml:stylesheet type="text/xsl" href="studenti.xsl" ?>

Fisierul XSL va contine urmatoarele randuri:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
........
</xsl:template>
</xsl:stylesheet>

Cel mai important element intr-un document XSLT este elementul <template>, care reprezinta o regula folosita in pattern matching. Acest element are urmatoarea forma generala:
<xsl:template match=”expresie XPath”>
continut dupa transformare
</xsl:template>
Aceasta formulare cauta elementele ce fac match pe expresia XPath data si inlocuiesc rezultatul intors in expresia dintre taguri, modificandu-i astfel modul de afisare (se pot afisa doar anumite campuri/atribute, se poate face un tabel, o lista, etc)

In cadrul tagului template se poate face selectarea mai multor elemente ale fisierului folosind o bucla for-each:
<xsl:for-each select="expresie XPah">
In plus, in interiorul acestei bucle se poate face o sortare de elemente folosind elementul <xsl:sort order="ascending/descending" select="expresie XPath" />, unde expresie XPath selecteaza campul/atributul dupa care se va face sortarea elementelor obtinute.
Un alt element ce merita precizat este <xsl:if>, care va permite executarea actiunilor din interiorul tagului doar in cazul indeplinirii conditiei continute. Un exemplu de folosire:
<xsl:for-each select="grupa/student">
<xsl:if test="varsta!='2 ani'">
actiuni
</xsl:if>
</xsl:for-each>
O alternativa pentru aceasta constructie este elementul <xsl:choose>, similar cu "switch" din limbajele de programare. Exemplu:
<xsl:for-each select="grupa/student">
...
<xsl:choose>
<xsl:when test!='2 ani'>
<B><xsl:value-of select="varsta"/></B>
</xsl:when>
<xsl:otherwise>
<I><xsl:value-of select="varsta"/></I>
</xsl:otherwise>
</xsl:choose>
Acest fragment va face ca studentii selectati sa fie afisati fie cu bold, fie cu italics, in functie de varsta lor.

Indicatii pentru laborator:
- folositi Mozilla; Internet Explorer nu vede corect fisierele transformate prin metoda XSL
- incadrati rezultatul intors de fisierul XSL de tagurile <HTML><BODY>...</BODY></HTML>, pentru a se crea un fisier ce poate fi vizualizat de browser


Sa parcurgem acum si laboratorul, pentru cateva observatii:
1. Afisati sub forma xHTML tabelat, continutul librariei. Capul de tabel trebuie sa contina campurile: ID | URL | Title | Authors | ISBN | Labels
Dupa cum se stie, pentru a crea in HTML o tabela se folosesc tagurile <TR></TR> (table row) ptr un rand si <TD></TD> (table data cell) pentru o celula in cadrul randului.
2. Aceeasi cerinta ca la 1) doar ca se cere sortari dupa anumite coloane (title, isbn,etc)
Aici se va folosi elementul de sortare prezentat mai sus.
3. Pentru importul de carti de la prieteni, avem nevoie de o lista de ISBN-uri:
- listati doar ISBN-urile pentru a putea fi usor introduse pe site
Se poate construi o singura coloana de tabela, sau o lista de elemente:
- <OL> ordered list
- <UL> unoredered list
, fiecare continand elemente de tip <LI> (list element).
4. Transformati fisierul sursa xml intr-un alt fisier xml cu unele modificari:
adaugati la fisierul xml doar anumite carti
Se va folosi constructia <xsl:if>, pentru care aveti si un exemplu mai sus.


Succes...

Niciun comentariu:

Trimiteți un comentariu