Documente Academic
Documente Profesional
Documente Cultură
J2EE - Curs 02 - Java Si XSL
J2EE - Curs 02 - Java Si XSL
Sectiunea 2. XSLT
Ce este XSLT ?
XSLT (Extensible Stylesheet Language Transformation) este un limbaj functional definit de W3C, folosit pentru a procesa informatii structurate. Rolul sau principal este acela de a oferi o modalitate concreta de separare a continutului de prezentare. Functionalitatea sa este mai complexa, putand fi impartita in doua categorii: 1. de transformare a informatiei (XML - XML), respectiv 2. de prezentare (XML - HTML) Transformarea este de fapt transformarea uni arbore sursa intr-un arbore destinatie. Combinatia XSLT si XML poate fi asemanata cu cea dintre SQL si bazele de date relationale. Mai mult, XSLT este si un limbaj de programare. Permite efectuarea de calcule, rearanjarea sau sortarea datelor, combinarea datelor din surse multiple, personalizarea afisarii, etc.
Caracteristici de baza
1. Un stylesheet XSLT este un document XML Structura generala a unui document este:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!-- Sabloane --> </xsl:transform>
Asadar radacina unui document XSLT este <xsl:transform> sau <xsl:stylesheet>, cele doua fiind sinonime. Unui fisier XML ii poate fi asociat un stylesheet XSLT astfel:
<?xml-stylesheet type="text/xsl" href="fisier.xsl"?>
2. Paradigma de baza in procesare este "pattern matching" Un document XSLT este format dintr-o multime de reguli de potrivire (sabloane, template-uri) de forma "daca intrarea este de forma - genereaza urmatorul rezultat". Ordinea de aplicare a regulilor depinde de implementare, iar daca mai multe reguli pot fi aplicate pentru o anumita intrare, exista un algoritm pentru rezolvarea conflictelor. Procesarea nu se face linie cu linie, ca in cazul procesoarelor de texte, ci la nivel de nod, deoarece intrarea este un document XML, care are o structura arborescenta.
Procesoare XSLT
Arbore de intrare -> procesor XSLT -> Arbore de iesire O operatie atomica a parserului este procesarea unui nod. Exemple de parsere: MSXML folosit de IE6, XT Processor (Jamesc Clark), etc. Locul procesarii poat fi atat nivelul clientului sau la nivelul serverului.
* <xsl:apply-templates/> * <xsl:value-of select="nod_expr_XPath" /> * <xsl:for-each select="nod_expr_XPath"> ... * <xsl:sort select="element" /> * <xsl:if test="conditie"> ... * <xsl:choose>
<xsl:when test="conditie" > ... <xsl:otherwise > ... </xsl:choose >
Sectiunea 3. XPath
Ce este XPath ?
XSLT foloseste un sub-limbaj numit XPath pentru referirea nodurilor din arborele de intrare. XPath este un limbaj de interogare conceput special pentru modelul ierarhic al unui document XML. Este capabil sa selecteze noduri prin navigarea in orice directie si aplicarea de predicate bazate pe valorile si pozitia nodurilor. Include facilitati pentru lucrul cu siruri, calcule numerice si operatii booleene. De exemplu, /@titlu selecteaza atributul 'titlu' al parintelui nodului curent. Expresiile XPath sunt folosite pentru: * selectarea nodurilor ce vor fi procesate * testarea unor conditii pe parcursul procesarii * calcularea valorilor ce vor fi inserate in arborele rezultat
Sintaxa
XPath foloseste expresii pentru localizarea nodurilor in cadrul unui document XML. Simbolurile de baza pentru constructia acestor expresii sunt: / // * [conditie] | @atribut Specificarea locatiilor O locatie XPath defineste o multime de noduri. Locatiile pot fi: absolute (/pas1/pas2) sau relative (pas1/pas2) Structura unui pas este directie::nod[predicat], unde * directie: defineste relatia dintre nodul curent si nodurile selectate de locatie si poate avea una din valorile parent, child, ancestor, descendant, self, etc. * nod: reprezinta nodurile ce vor fi selectate din directia aleasa * predicat: o conditie pentru filtrarea nodurilor rezultat, este cuprinsa intre paranteze patrate - [predicat] Sunt permise urmatoarele abrevieri * nod = child::nod * @ = attribute * . = self::node() * .. = parent::node() * // = descendant-or-self::node() Expresii XPath ofera suport pentru expresii numerice, relationale si booleene. Acestea sunt formate folosind urmatorii operatori: + - * div mod = != < <= > >= or and. In cazul testarii egalitatii se deosebeste situatia in care unul din argumente este o multime de noduri. Atunci, rezultatul va fi true daca exista valoarea testata macar in unul din nodurile din multimea respectiva, iar
Fisiere XSLT
Varianta 1
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="note"> <html> <body> <h1>Note anul <xsl:value-of select="@an"/></h1> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="student"> <p> <xsl:value-of select="nume"/> : <xsl:value-of select="nota[1]/@disciplina"/> <xsl:value-of select="nota[1]"/> , <xsl:value-of select="nota[2]/@disciplina"/> <xsl:value-of select="nota[2]"/> , Media: <xsl:value-of select="(nota[1] + nota[2]) div 2"/> </p> </xsl:template> </xsl:transform>
Varianta 2
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="note"> <html> <body> <h1>Statistica anul <xsl:value-of select="@an"/></h1> <xsl:variable name="tot" select="//student/nota/@disciplina" />
Etapele transformarii
Procesul transformarii datelor folosind TrAX este extrem de simplu si consta in urmatoarele etape: Crearea arborelui DOM sursa si celui rezultat
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document sourceDoc = db.parse(new File(filename)); Document resultDoc = db.newDocument();
Stabilirea sursei si a rezultatului Acestea pot fi fisiere, arbori in memorie sau chiar fluxuri de date cum ar fi un flux SAX sau un flux de iesire catre ecran.
Source source = new DOMSource(sourceDoc); Result result = new DOMResult(resultDoc);
Transformarea propriu-zisa
//Transformarea documentului transformer.transform(source, result);