1 / 47

C06. XSLT

C06. XSLT. Date Semistructurate, 2012-2013. C 06 . DS. XSLT. C06 - DS. XSL (eXtensible Style Sheet Language) = XSLT (transformarea documentelor XML), XPath (navigarea in documentele XML), XSL-FO (formatarea documentelor XML).

talia
Download Presentation

C06. XSLT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C06. XSLT Date Semistructurate, 2012-2013

  2. C06. DS • XSLT

  3. C06 - DS • XSL (eXtensible Style Sheet Language) = • XSLT (transformarea documentelor XML), • XPath (navigarea in documentele XML), • XSL-FO (formatarea documentelor XML). • XSLT este o aplicatie XML prin care se specifica reguli prin care un document XML este transformat intr-un alt document XML (sau alt format de document, de exemplu HTML). • O transformare XSLT nu schimba documentul sursa, ci se proceseaza un arbore (o ierarhie) din memorie (dat de structura documentului XML) si creeaza o structura de iesire (in generalun arbore) in memorie, bazat pe nodurile din arborele sursa si regulile de template continute in stylesheet. • Un XSLT document = XSLT stylesheet = contine reguli template. Fiecare regula template are un sablon (pattern) si un template.

  4. C06 - DS • Workflow in transformarea XSLT: • Documentul sursa XML (documentul de intrare) • -> arborele sursa (ierarhie de noduri) in memorie – (procesorul XSLT) arborele rezultat (ierarhie de noduri) in memorie • -> versiunea serializata a arborelui rezultat (documentul de iesire) • Cand un document XML este procesat, sunt doi arbori in memorie: sursa si rezultatul. • O transformare XSLT, in general folosind expresii XPath, creeaza un arbore rezultat, forma, de asemenea, din noduri (chiar daca e un singur nod pentru fisierele text). • In general, documentul rezultat este un alt document XML sau un document HTML, pentru care structura ierarhica este clara. Chiar daca rezultatul este un simplu fisier text, insusi XSLT-ul aplicat da o anumita structura ierarhica. Documentul final este obtinut prin serializarea arborelui de iesire.

  5. C06 - DS • xsl:stylesheet & xsl:transform • Fiind un document XML, un XSLT stylesheet ar trebui sa aiba o declaratie XML. • Elementul radacina este stylesheet sau transform: acestea sunt echivalente ca semnificatie, sub-elemente si atribute posibile. • Elementele stylesheet si transform, precum si celelalte elemente XSLT, sunt in s.n. http://www.w3.org/1999/XSL/Transform. Acest s.n. in general primeste prefixul xsl => elementele sunt folosite ca xsl:stylesheet & xsl:transform. • In elementul radacina se gaseste declaratia de s.n., precum si version=”1.0”.

  6. C06 - DS • xsl:stylesheet & xsl:transform • Exemplu – document minimal XSLT: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> </xsl:stylesheet> • Asocierea in doc XML: <?xml-stylesheet type="application/xsl" href="xslt_min.xsl"?> sau <?xml-stylesheet type="text/xsl" href="xslt_min.xsl"?> (pentru Microsoft)

  7. C06 - DS • Template-uri si reguli de template • Un stylesheet XSLT contine reguli de template pentru a controla modul de afisare al documentului XML dat ca intrare. • Fiecare regula de template este data ca element xsl:template. Acesta are un atribut match care contine un sablon XPath cu ajutorul caruia se aleg elementele pentru care sa se aplice regula data. • Acelasi element xsl:template contine un template care este instantiat si dat ca iesire atunci cand se gaseste un element al documentului care se potriveste sablonului XPath. • Observatie: Un element xsl:template contine un sablon si un template!!! • Observatie: Tot ceea ce apare intr-un stylesheet si nu este element XSLT (textul „in plus”, printre elementele XSLT), este pus in rezultat ca atare.

  8. C06 - DS • Sabloane • Cel mai simplu sablon este prin specificarea numelui de element XML. • Exemplu: <xsl:template match="person"> A Person </xsl:template> • => la intalnirea unui element “person”, se afiseaza textul „A Person”,iar pentru celelalte elemente din document nu se afiseaza nimic. • Textul dat in exemplul de mai sus este numit literal data characters (text oarecare). • Este posibil ca template-ul sa contina text cu marcaje (literal result elements), care, de asemenea, sunt date la iesire. • Exemplu: output HTML <xsl:template match="person"> <p>A Person</p> </xsl:template> Orice marcaj care este inclus intr-un template trebuie sa fie well-formed!!!

  9. C06 - DS • Continutul unui element • In general, un element nu se inlocuieste cu un text oarecare (constanta), ci se foloseste continutul sau:xsl:value-of. • Acest element calculeaza valoarea string a unei expresii XPath si o insereaza in rezultat. Valoarea elementului este considerata ca fiind continutul efectiv al sau (ceea ce ramane daca sunt eliminate tag-urile si s-au inlocuit referintele de caractere si entitati). • Elementul al carui valoare se considera este identificat prin atributul select, care contine o expresie XPath. • Exemplu: <xsl:template match="person"> <p> <xsl:value-of select="name"/> </p> </xsl:template> • => pentru un element “person” se ia continutul elementului “name”

  10. C06 - DS • Aplicarea template-urilor • Implicit, procesorul XSLT citeste documentul XML de intrare de sus in jos, de la radacina, in preordine. • Regulile de template sunt activate in ordinea in care se gasesc elemente care se potrivesc sablonului respectiv => o regula de template pentru un element parinte este activata inainte de regula de template pentru un element fiu al acestuia. • Aceasta ordine poate fi schimbata prin specificarea elementului (elementelor) care sa fie procesat in continuare. Sau – se poate mentiona ca un element sa fie procesat in timpul procesarii unui alt element sau sa nu fie procesat deloc. • In exemplele anterioare – s-a prevenit procesarea elementelor fii ale elementului person prin simplul fapt ca pentru acest element s-a dat textul cu care sa fie inlocuit. • Elementele xsl:apply-templates permit exprimarea ordinii de procesare a elementelor. Acestea au un atribut select al carui valoare este o expresie XPath care spune procesorului XSLT care nod sa fie procesat in acel moment.

  11. C06 - DS • Exemplu: sa se afiseze numele, apoi prenumele si nici o informatie despre profesie sau hobby: <xsl:template match="person"> <xsl:apply-templates select="name"/> </xsl:template> <xsl:template match="name"> <xsl:value-of select="last_name"/>, <xsl:value-of select="first_name"/> </xsl:template> => al doilea template este pentru person – sa se aplice template-ul numai pentru elementele fiu name, nu si pentru profession sau hobby • Observatie: Nu conteaza ordinea in care sunt date template-urile in stylesheet; conteaza ordinea elementelor in documentul XML de intrare.

  12. C06 - DS • Este important ca in aplicarea template-ului pentru un element sa se ia in considerare si template-urile elementelor fiu. • Exemplu: <xsl:template match="people"> <html> <head><title>Famous Scientists</title></head> <body> <xsl:apply-templates select="person"/> </body> </html> </xsl:template> • => Documentul XML de intrare are un singur element people, pentru care stabileste head-ul documentului HTML rezultat. • Pentru a include rezultatul pentru elementele person in interiorul documentului HTML, trebuie ca template-ul pentru people sa specifice acest lucru – elementul body contine element xsl:apply-templates prin care se indica procesorului XSLT sa proceseze toti fiii person ai elementului curent people si sa insereze textul de iesire in elementul body al documentului de iesire.

  13. C06 - DS • Pentru a aplica in sectiunea body template-urile tuturor elementelor fiu, nu se foloseste atributul select: <xsl:template match="people"> <html> <head> <title>Famous Scientists</title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> • Obs: Exemplele de mai sus au acelasi efect in VS.

  14. C06 - DS • Reguli de template built-in • 7 tipuri de noduri (vezi noduri XPath) • Daca nu se specifica un template pentru un anumit element, se pot stabili template-uri implicite • text() – nod text • comment() – nod comentariu • @* – orice nod atribut • * – orice nod element • / – nodul radacina • Exemple:

  15. C06 - DS <?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="..."> <xsl:template match="people"> <html> <head><title>Famous Scientists</title> </head> <body> <dl> <xsl:apply-templates/> </dl> </body> </html> </xsl:template> <xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template> <xsl:template match="person"> <dt><xsl:apply-templates select="name"/></dt> <dd><ul> <li>Born: <xsl:apply-templates select="@born"/></li> <li>Died: <xsl:apply-templates select="@died"/></li> </ul></dd> </xsl:template> </xsl:stylesheet>

  16. C06 - DS • Template valoare de atribut • Un template valoare de atribut este o expresie XPath, intre acolade, data ca valoare a unui atribut in stylesheet. • Exemplu: in loc de elementele “name”, sa se afiseze elemente “name” goale, unde numele, initiala si prenumele sunt date ca atribute <xsl:template match="name"> <name first="{first_name}" initial="{middle_initial}" last="{last_name}" /> </xsl:template> => <name first="Richard" initial="P" last="Feynman"/> • => valoarea atributului “first” din rezultat este inlocuita cu valoarea elementului “first_name” din documentul de intrare, s.a.m.d.

  17. C06 - DS • Template valoare de atribut <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml"/> <xsl:template match="facultate"> <f> <xsl:apply-templates select="studenti"/> </f> </xsl:template> <xsl:template match="studenti"> <studenti nrmatr="{@NrMatricol}" nume="{Nume}"></studenti> </xsl:template> </xsl:stylesheet> • => se obtin elemente “studenti” care au atributul “nrmatr” egal cu valoarea atributului “NrMatricol” din input

  18. C06 - DS • Elemente XSLT • Pentru XSLT sunt definite cateva elemente top-level – care pot sa apara ca element fiu imediat al elementului radacina. • <xsl:import> • Daca se foloseste elementul <xsl:import>, atunci acesta trebuie sa se gaseasca inaintea tuturor celorlalte elemente top-level. • Exemplu: <xsl:import href="ToBeImported.xsl"/> • Documentul care se importa trebuie sa fie un document XSLT complet / corect.Calea data poate fi absoluta sau relativa, pe masina locala sau la o adresa Web. • In momentul in care se importa documentul mentionat, i se elimina elementul radacina <xsl:stylesheet> si inlocuieste in documentul curent elementul de import. • (permite redefinire de template in XSLT curent)

  19. C06 - DS • <xsl:include> - permite includerea unui modul XSLT in documentul curent. • Exemplu: <xsl:include href="ModuleToBeIncluded.xsl"/> • Diferenta fata de <xsl:import> este ca semnificatia”” stylesheet-ului inclus nu este modificat de includere (la import – un template cu un nume care este definit si in document, este suprascris de acesta). • (nu permite redefinire de template in XSLT curent)

  20. C06 - DS • <xsl:attribute-set> - este folosit pentru definirea unui set de atribute si valori. • Acest set de atribute are un nume, a.i. este suficient sa fie definit o data si sa fie folosit ca un grup in oricare element de iesire. <xsl:attribute-set name="ats1"> <xsl:attribute name="a1">1</xsl:attribute> <xsl:attribute name="a2">2</xsl:attribute> </xsl:attribute-set> <xsl:template match="facultate"> <f> <xsl:apply-templates select="sectii"/> <xsl:apply-templates select="studenti"/> </f> </xsl:template> <xsl:template match="sectii"> <sectie xsl:use-attribute-sets="ats1"></sectie> </xsl:template> <xsl:template match="studenti">...</xsl:template> <?xml version=“1.0”?> <f> <sectie a1=“1” a2=“2” /> <sectie a1=“1” a2=“2” /> <sectie a1=“1” a2=“2” /> … </f>

  21. C06 - DS • <xsl:decimal-format> - este folosit impreuna cu functia XSLT format-number(); cand un numar este convertit la string folosind aceasta functie, elementul defineste caracterele si simbolurile care sa fie folosite. • Acest element este intotdeauna gol, toate specificatiile necesare fiind date prin valori de atribute (optionale) (name, decimal-separator, grouping-separator, infinity, minus-sign, NaN, percent, per-mille, zero-digit, digit, and pattern-separator).

  22. C06 - DS • <xsl:output> - este folosit pentru a determina formatul de iesire al unei transformari XSLT. • In timpul unei transformari XSLT se creeaza mai intai arborele rezultat, apoi acest rezultat este serializat pentru a obtine documentul final (XML, HTML, etc.). Acest element actioneaza in procesul de serializare, si nu la crearea arborelui rezultat. Practic, acest element se poate folosi pentru a specifica explicit, fara ambuguitati, tipul rezultatului. • Exemplu: <xsl:output method="html"/> • Implicit, method are valoarea „xml” (mai poate fi „html” sau „text”). Daca oricum elementul radacina al rezultatului este <html>, este clar tipul rezultatului. • Acest element mai are 9 atribute, printre care – de specificare de encoding, de indentare (daca rezultatul sa fie indentat conform structurii arborescente rezultate; yes/no), etc.

  23. C06 - DS • <xsl:param> - folosit in top-level – defineste un parametru global; daca apare intr-un element <xsl:template>, trebuie sa fie primul element fiu al acestuia si atunci defineste un parametru local. • Atributul name contine numele parametrului (obligatoriu), si atributul select contine valoarea implicita a acestuia (optional). Daca acest element are atributul select, atunci trebuie sa fie un element gol; altfel – ar putea sa contina un corp de element <xsl:template>, sau direct valoarea dorita. • Pentru un parametru local se poate da o valoare explicita folosind elementul <xsl:with-param> ca si fiu al unui element <xsl:apply-templates> sau <xsl:call-template>. • Se foloseste: $nume_param. • <xsl:preserve-space> - controleaza cum sunt gestionate whitespace-urile din documentul sursa (tab, newline, CR, space character) – se da o lista de elemente din documentul XML pentru care „spatiile” sa fie pastrate.

  24. C06 - DS • <xsl:template> - defineste un template care e folosit sa creeze o parte din (sau chiar tot) arborele rezultat. Un asemenea element este instantiat atunci cand se intalneste un nod care se potriveste sablonului specificat sau cand este „apelat” prin numele sau. • Potrivirea elementelor – cu ajutorul atributului „match” care contine o expresie XPath de selectie a nodurilor. • Numirea template-urilor: <xsl:template name="myTemplate"> • Apelul template-urilor cu nume: <xsl:call-template name="myTemplate"/> • Daca un template are si „name”, si „match”, acesta se poate folosi cu ajutorul <xsl:apply-template> sau <xsl:call-template>.

  25. C06 - DS • <xsl:variable> - este folosit pentru a declara o variabila locala sau globala in stylesheet. Daca este folosit la top-level, atunci se declara o variabila globala, iar in interiorul unui element <xsl:template> se declara o variabila locala. • Exemplu: <xsl:variable name="CurrentPrice" select="//Stocks/MyStock/CurrentPrice"/> • => declara o variabila care se poate referi in interiorul stylesheet-ului prin $CurrentPrice. <elementatribut="{$CurrentPrice}"/> • In atributul „select” se da o expresie XPath care este evaluata pentru a da o valoare variabilei. Daca exista acest atribut, elementul trebuie sa fie gol. Altfel, valoarea variabilei este determinata de continutul elementului. • Exemplu: <xsl:variable name="Capital">Washington</xsl:variable> • Echivalent cu... <xsl:variable name="Capital" select="Washington"/> • Observatie: O variabila XSLT este mai degraba o constanta – nu exista o „instructiune” pentru atribuirea unei valori unei variabile deja declarate.

  26. C06 - DS • Alte elemente XSLT – care pot sa apara in interiorul elementelor de top-level • <xsl:apply-imports> - este folosit in interiorul unui template; se foloseste pentru aplicarea unui template care este definit intr-un modul care se importa (<xsl:import>) • Daca in stylesheet-ul curent este definit un template cu un acelasi nume ca al unui element din modulul importat, template-ul intern are prioritate fata de template-ul importat • => se foloseste <xsl:apply-imports> pentru a folosi explicit template-ul importat.

  27. C06 - DS • <xsl:apply-templates> - defineste un set de noduri pentru a fi procesat; este o instructiune care este intotdeauna folosita intr-un template si selecteaza setul de noduri din arborele de intrare si initiaza procesarea fiecarui nod din set prin determinarea template-ului corespunzator. • Daca <xsl:apply-templates> contine imbricat un element <xsl:sort>, atunci acesta determina ordinea in care nodurile din setul determinat sunt procesate. Un alt element care poate sa apara in interiorul <xsl:apply-templates> este <xsl:with-param>. • Elementul <xsl:apply-templates> poate sa aiba atributul „select” – selecteaza setul de noduri care urmeaza sa fie procesate. • Exemplu: <xsl:apply-templates select="person"/> ...are ca efect instantierea template-ului: <xsl:template match="person"> <!– Definitia de template. --> </xsl:template>

  28. C06 - DS • <xsl:attribute> - este folosit pentru a adauga un nod de tip atribut in arborele de iesire. • Un asemenea nod atribut poate fi „scris” doar in anumite conditii • un nod element corespunzator trebuie sa fi fost scris in arborele de iesire • si nici un alt tip de nod in afara de un nod de tip atribut nu a fost adaugat inainte in arborele de iesire inainte de acest nod atribut. • Practic, un element <xsl:attribute> este folosit impreuna cu <xsl:element> sau <xsl:copy> sau cu un „literal result element”.

  29. C06 - DS • <xsl:attribute> • Exemplu: scrierea in rezultat al unui element <div>, cu un atribut „align” <div><xsl:attribute name="align">left</xsl:attribute></div> • ...sau: <xsl:element name="person"> <xsl:attribute name="idPerson">123</xsl:attribute> </xsl:element> • Un element <xsl:attribute> poate sa apara intre tagurile unui element, intr-un element <xsl:element> sau <xsl:attribute-set>. • Un element <xsl:attribute> poate sa aiba doua atribute: „name” este obligatoriu – poate fi de forma unui „attribute value template”; „namespace” este optional. Valoarea atributului creat este data de continutul elementului (trebuie sa fie un string – e interpretat ca string).

  30. C06 - DS • <xsl:call-template> • se foloseste pentru apelul explicit al unui template cu nume; • are un singur atribut obligatoriu, care reprezinta numele template-ului care se apeleaza. • Numele template-ului nu se poate specifica printr-o variabila – se poate face mai flexibila alegerea template-ului daca <xsl:call-template> se include intr-un element <xsl:choose>. • Intr-un element <xsl:call-template> se poate folosi <xsl:with-param>.

  31. C06 - DS • <xsl:call-template> • Exemplu: <xsl:template name="myTemplate"> <!– template-ul --> </xsl:template> <xsl:call-template name="myTemplate"/> • Pentru a transmite un parametru: <xsl:call-template name="myTemplate"> <xsl:with-param name="myParam" select="myExpression"/> </xsl:call-template> • ... si pentru ca acest parametru transmis sa fie evaluat in template-ul apelat: <xsl:template name="myTemplate"> <xsl:param name="myParam"/> <!--restul template-ului --> </xsl:template>

  32. C06 - DS • <xsl:choose> - folosit pentru a face o alegere dintr-un set de optiuni; nu are atribute; continutul este stabilit prin unul sau mai multe elemente <xsl:when> si un element optional <xsl:otherwise>. • Exemplu: <xsl:choose> <xsl:when test="Expresie1"> <!-- Actiune caz 1 --> </xsl:when> <xsl:when test="Expresie2"> <!--Actiune caz 2 --> </xsl:when> <xsl:otherwise> <!--Actiune alt caz --> </xsl:otherwise> </xsl:choose>

  33. C06 - DS • <xsl:choose> • Daca, de exemplu, primul <xsl:when> al carui atribut se evalueaza la „true” este primul din lista, atunci toate restul, inclusiv <xsl:otherwise>, sunt ignorate (se opreste la primul care este „true”). • Daca nici un <xsl:when> nu are un atribut „true”, atunci se instantiaza elementul <xsl:otherwise>, daca exista. • Observatie: <xsl:choose> cu un singur element <xsl:when> si fara element <xsl:otherwise> este echivalent cu <xsl:if>.

  34. C06 - DS • <xsl:comment> - este folosit pentru a scrie un comentariu in arborele rezultat; nu are atribute. • Exemplu: <xsl:comment> Acesta este un comentariu. </xsl:comment> • => va scrie in documentul rezultat: <!-- Acesta este un comentariu. -->

  35. C06 - DS • <xsl:copy> - copiaza nodul curent din documentul sursa in arborele rezultat; doar nodul este copiat, nu si atributele sau nodurile descendente (shallow copy). Are un atribut optional „use-attribute-sets”. • Efectul lui <xsl:copy> difera, in functie de tipul nodului curent din document, in momentul in care <xsl:copy> este instantiat. • Daca nodul curent este un nod element, este ca si cum s-ar fi utilizat elementul <xsl:element> cu atributul „name” setat cu numele tipului de element al nodului curent. Daca se specifica atributul „use-attribute-sets”, atunci sunt copiate si atributele specificate. Daca nodul curent este un nod de tip atribut, este ca si cum elementul <xsl:attribute> ar fi folosit, cu „name” setat cu numele atributului = nod curent. Daca nodul curent este de tip text, se copiaza pur si simplu in rezultat. • In general, <xsl:copy> este folosit cand un document XML se transforma intr-un alt document XML.

  36. C06 - DS • <xsl:copy-of> - copiaza un set de noduri in rezultat; are un atribut „select” obligatoriu, cu o valoare daca ca expresie XPath; este un element gol; copiaza si nodurile descendente nodurilor care se potrivesc sablonului dat (deep copy). • Exemplu: copiaza in arborele rezultat toate nodurile „Stocuri”, plus continutul lor <xsl:copy-of select="//Stocuri"/> • Este util mai ales in transformarea unui document XML in alt document XML, unde se poate copia complet un subarbore.

  37. C06 - DS • <xsl:element> - cauzeaza crearea unui nod element in rezultat; poate avea trei atribute: „name” – obligatoriu (valoarea este un „attribute value template”); „namespace” si „use-attribute-sets” sunt optionale. • Pentru a adauga atribute pentru acest nou alement poate fi folosit atributul „use-attribute-sets”, sau elemente <xsl:attribute>, elemente <xsl:copy>, sau element <xsl:copy-of>. • Exemplu: transformare din XML sursa in XML rezultat; se ia fiecare nod atribut al elementului „Carte” si creeaza un element corespunzator in rezultat. <Cartetitlu="XPath si XSLT" autor="Ionel" editura="Studia"/> • ... foloseste:

  38. C06 - DS <?xml version='1.0'?><xsl:stylesheet version="1.0" xmlns:xsl="..."> <xsl:template match="/"> <Carte> <xsl:for-each select="Carte/@*"> <xsl:element name="{name()}"> <xsl:value-of select="."/> </xsl:element> </xsl:for-each> </Carte> </xsl:template> </xsl:stylesheet> • ... are ca rezultat: <?xml version="1.0" encoding="utf-8" ?> <Carte> <titlu>XPath si XSLT</titlu> <autor>Ionel</autor> <editura>Studia</editura> </Carte>

  39. C06 - DS • <xsl:for-each> • aplica aceeasi procesare pe fiecare nod dintr-un set de noduri, definit de o expresie XPath in atributul „select”; are un singur atribut „select”, obligatoriu. • Continutul este un template body, in care unul sau mai multe elemente <xsl:sort> sunt optionale, urmate de o alta parte a template body. • <xsl:sort> se foloseste daca expresia XPath nu intoarce nodurile care sa fie procesate in ordinea dorita; <xsl:sort> poate fi folosit ca element fiu imediat al elementului <xsl:for-each>.

  40. C06 - DS • <xsl:for-each> • Exemplu: ordonarea cartilor dupa primul autor, crescator <?xml version='1.0'?> <carti> <carte titlu="AC" autor1="Al. Vancea" autor2="A. Gog" editura="Risoprint"/> <carte titlu="BD" autor1="L. Tambulea" autor2="A. Campan" editura="Studia"/> <carte titlu="SO" autor1="F. Boian" editura="StudioGraph"/> <carte titlu="Retele" autor1="D. Bufnea" editura="Studia"/> </carti>

  41. C06 - DS <?xml version='1.0'?><xsl:stylesheet version="1.0" xmlns:xsl="..."> <xsl:template match="/"> <carti> <xsl:for-each select="/carti/carte"> <xsl:sort select="@autor1" order="ascending" data-type="text"/> <xsl:copy-of select="." /> </xsl:for-each> </carti> </xsl:template> </xsl:stylesheet> => <?xml version='1.0'?> <carti> <carte titlu="AC" autor1="Al. Vancea" autor2="A. Gog" editura="Risoprint"/> <carte titlu="Retele" autor1="D. Bufnea" editura="Studia"/> <carte titlu="SO" autor1="F. Boian" editura="StudioGraph"/> <carte titlu="BD" autor1="L. Tambulea" autor2="A. Campan" editura="Studia"/> </carti>

  42. C06 - DS • <xsl:if> - un template se instanteaza numai daca se indeplineste o anumita conditie; primeste un atribut „test”, obligatoriu. • Exemplu: afisarea informatiei non-confidentiale <?xml version='1.0'?> <bazaDeDate> <Informatietip="Public">Info publica 1.</Informatie> <Informatietip="Public">Info publica 2.</Informatie> <Informatietip="Confidential">Info confidentiala 1.</Informatie> <Informatietip="Confidential">Info confidentiala 2.</Informatie> </bazaDeDate>

  43. C06 - DS <?xml version='1.0'?><xsl:stylesheet version="1.0" xmlns:xsl="..."> <xsl:template match="/"> <html> <head> <title>Informatii cu caracter public.</title> </head> <body> <h3>Informatii disponibile:</h3> <xsl:apply-templates select="/bazaDeDate/Informatie"/> </body> </html> </xsl:template> <xsl:template match="Informatie"> <xsl:if test="@tip='Public'"> <p><xsl:value-of select="."/></p> </xsl:if> </xsl:template> </xsl:stylesheet>

  44. C06 - DS • <xsl:otherwise> - in <xsl:choose> • <xsl:sort> - sortare, in elemente <xsl:apply-templates> sau <xsl:for-each>; poate sa aiba 5 atribute optionale: „select” – cheia de sortare (implicit, este valoarea string a nodului de context; „order” = ascending / descending; „data-type” – daca valorile sa fie tratate ca string sau numar (atunci cand e cazul) = text / number s.a. • <xsl:text> - scrie un text in rezultat; poate avea un atribut „disable-output-escaping” = yes / no – daca continutul elementului sa fie scris in rezultat fara escaping ale caracterelor speciale, sau nu. Spatiile din elementul <xsl:text> sunt pastrate (depinde si de cum este setat un nod parinte in acest sens). • <xsl:value-of> - scrie in rezultat valoarea string a expresiei continute in atributul „select” (obligatoriu). • <xsl:when> - folosit in <xsl:choose>

  45. C06 - DS • <xsl:with-param> - seteaza valoarea parametrilor cand se folosesc <xsl:apply-templates> sau <xsl:call-templates>; are un parametru „name” obligatoriu care reprezinta numele parametrului; daca are atrobut „select”, acesta contine evaluarea parametrului, si atunci elementul este gol; daca nu are atributul „select”, atunci valoarea parametrului este data de continutul elementului. • Attribute value template – ofera posibilitatea de a determina in timpul executiei”” (procesarii) valoarea unui atribut. Sintaxa: expresie XPath intre acolade. • Exemplu: atributX="{$variabilaX}" atributX="{/carte/capitol [position()=1]/paragraf[last()]/notaSubsol}" • O alta posibilitate – folosirea elementelor <xsl:attribute>.

  46. C06 - DS <xsl:template match="facultate"> <f at_fac="{$var1}"> <xsl:apply-templates select="sectii"/> <xsl:apply-templates select="discipline"> <xsl:sort select="CodD" order="descending"/> </xsl:apply-templates> <xsl:apply-templates select="studenti"/> </f> </xsl:template> <xsl:template match="discipline"> <xsl:call-template name="tdisc"> <xsl:with-param name="numar" select="position()"></xsl:with-param> </xsl:call-template> </xsl:template> <xsl:template name="tdisc"> <xsl:param name="numar"></xsl:param> [Numar...] <xsl:value-of select="$numar"/> [CodD...] <xsl:value-of select="CodD"/> [DenD...] <xsl:value-of select="DenumireD"/> [Count...] <xsl:value-of select="count(.//Sectie)"/> </xsl:template>

  47. C06 - DS • Next 07 • XQuery

More Related