Creați xslt din xml. Crearea de rapoarte bazate pe transformări xsl (xslt). Acum trebuie să terminăm meniul

informatie scurta

Utilizează software-ul .NET 3.5 XML pentru a transforma metadatele unui articol ArcGIS sau a oricărui fișier XML folosind o foaie de stil XSLT 1.0 și pentru a salva rezultatele într-un fișier XML.

Șabloanele XSLT pot fi utilizate pentru a face o varietate de modificări metadatelor ArcGIS sau fișierelor XML. Unele stiluri XSLT sunt furnizate în ArcGIS for Desktop. Acestea pot fi găsite în folderul \Metadata\Stylesheets. Aceste stiluri sunt descrise în tabelul de mai jos.

Următoarele stiluri sunt utilizate pentru a crea documente HTML care sunt utilizate pentru a afișa informații despre elemente în fila Descriere. Ei extrag conținutul metadatelor unui obiect și îi adaugă instrucțiuni de formatare HTML. Aceste stiluri importă diverse șabloane XSLT din alte fișiere în folderul ArcGIS_Imports; șabloanele importate sunt folosite pentru a efectua majoritatea operațiunilor. Dacă sunteți interesat să creați stiluri personalizate afișare, mai multe informații despre aceste stiluri pot fi găsite în documentația furnizată cu ArcGIS Metadata Toolkit.

Următoarele stiluri, conținute în folderul \Metadata\Stylesheets\gpTools, preiau metadatele elementului, le procesează și salvează documentul XML rezultat într-un fișier XML nou. Scopul acestei operațiuni este de a filtra metadatele articolului înainte de a fi utilizat în afara ArcGIS. Scopul poate fi, de asemenea, modificarea metadatelor articolului. În acest caz, fișierul XML rezultat poate fi salvat înapoi în elementul original ca metadate ale acestuia din urmă utilizând instrumentul Metadate Importer. Puteți crea un model sau un script care va rula mai întâi instrumentul folosind stilul pentru a actualiza conținutul metadatelor și apoi să salvați imediat acel conținut înapoi în element. Următoarele stiluri sunt furnizate în ArcGIS for Desktop pentru a efectua unele sarcini de procesare a metadatelor foarte definite.

adăugați un identificator unic.xslt

Rezumat: Se are în vedere generarea de cod prin transformări XSLT. Sunt studiate sintaxa XSLT, caracteristicile aplicării transformărilor, precum și efectuarea de operațiuni precum filtrarea, sortarea și selecția condiționată în șabloane. Efectuarea transformării în mod programatic în C#. Avantajele și dezavantajele tehnologiei.

Limbajul de transformare XSLT

În a doua prelegere ne-am uitat deja la un exemplu folosind XSLT. În această prelegere ne vom uita la această tehnologie mai detaliat. XSL (limbaj extensibil pentru foi de stil)înseamnă Extensible Style Language și este un limbaj pentru crearea de stiluri pentru documente XML. XSLT(Transformări XSL) este limbajul de transformare XSL și face parte din acesta. Stilul XSLT este conceput pentru a transforma structura ierarhică și formatul unui document XML. Rezultatele conversiei pot fi un fișier XML, un fișier text, un cod de program, un fișier HTML, un fișier PDF și așa mai departe. Acest limbaj oferă capabilități puternice de manipulare a datelor, informațiilor și textului într-o formă ierarhică.

Și asta este exact ceea ce este necesar pentru a genera cod. Utilizarea XSLT poate ajuta foarte mult generarea de cod. În plus, oferă o alternativă convenabilă la tehnologia șablonului T4.

XSLT a fost dezvoltat de un consorțiu W3C (World Wide Web Consortium). Prima versiune a limbajului, XSLT 1.0, a devenit o recomandare pe 16 noiembrie 1999, iar XSLT 2.0 a devenit o recomandare pe 23 ianuarie 2007. Ambele versiuni sunt folosite destul de activ, iar în această prelegere ne vom uita la funcționalitatea de bază care le este comună. Aceasta înseamnă că vom lua în considerare în principal prima versiune. Vom aminti și câteva comenzi din a doua versiune.

Cum funcționează XSLT

Modelul XSLT include următoarele părți:

  • documente XML,
  • stiluri XSLT,
  • procesor XSLT,
  • documente de ieșire.

Documente XML sunt date de intrare care trebuie convertite în alte documente. Document stilul XSLT este un document XML bine format și conține un set de reguli pentru efectuarea transformării. Cu alte cuvinte, un document de stil este un șablon.

Procesor XSLT este o aplicație care acceptă documente XML și stiluri XSLT ca intrare. Efectuează transformarea, adică aplicarea unui set de reguli în stiluri XSLT documentelor XML. Rezultatul acestei lucrări este documente de ieșire.

Procesoarele XSLT au multe implementări și sunt încorporate în multe browsere precum Internet Explorer, Firefox, Mozilla, Opera și altele. Internet Explorer utilizează instrumentul MSXML dezvoltat de Microsoft. Procesorul XSLT este încorporat în Internet Explorer începând cu versiunea 4.5. Ieșirea generată a exemplelor din această prelegere poate fi vizualizată prin deschiderea fișierelor XML într-unul dintre browsere. La finalul prelegerii, vom analiza posibilitățile de lansare a transformării în mod programatic, folosind clasele de limbaj de programare adecvate.

XPath

O altă parte a tehnologiei XSL este limbajul XPath, conceput pentru a accesa nodurile dintr-un document XML prin specificarea căilor și expresiilor. Limbajul XPath este folosit în fișierele de stil pentru a naviga în documentele XML, identificând părți ale documentului XML sursă care se potrivesc cu unul sau mai multe modele predefinite. Când se găsește o potrivire, procesorul XSLT îi va aplica regulile corespunzătoare din fișierul de stil și îl va transforma într-o parte a documentului rezultat. Fișierele în stil XSLT folosesc intens expresiile XPath.

Folosind XSLT

Limbajul XSLT constă din multe instrucțiuni scrise ca etichete. Numele fiecărei instrucțiuni începe de obicei cu caractere xsl. Pentru a efectua transformarea, documentul în stil XSLT trebuie să fie un document XML valid.

Pentru a transforma un document XML, trebuie să adăugați o declarație similară cu următoarea la începutul documentului:

O foaie de stil XSL conține de obicei multe elemente, dintre care cel mai important este elementul xsl :stylesheet. El este cel care indică faptul că acest fișier XML este un fișier de stil. Pe lângă acesta, poate conține și alte elemente, de exemplu xsl :template, xsl :value-of. Documentul XML și fișierul de stil sunt transmise procesorului XSLT, care procesează aceste fișiere, efectuează transformarea și scoate rezultatul transformării.

Mai jos este un document XML care conține o listă de limbaje de programare.

C# Visual Basic Delphi Prolog Exemplu 5.1. Fișier Languages.xml

Trebuie să scoateți această listă în format HTML. În acest scop, folosim instrucțiunea xsl :for-each, care va aplica o parte a șablonului secțiunilor de document ale căror nume sunt specificate în atributul select. În cazul nostru, vom specifica select="languages/language" .

Fișierul de stil care va fi folosit este:

Limbile mele preferate: -

Exemplul 5.2. Fișier languages.xsl

Șablonul din interiorul xsl :for-each scoate conținutul fiecărui element de limbă din limbi. În acest scop, sunt folosite instrucțiunea xsl :value-of și atributul select="." . Aceasta înseamnă că procesorul trebuie să selecteze conținutul text al elementului curent din document. Pe lângă afișarea conținutului, puteți specifica numele anumitor etichete, precum și atribute pentru a selecta valorile stocate în ele. Exemplele vor fi discutate mai jos.

Să deschidem fișierul XML prin Internet Explorer sau alt browser. Va fi afișat următorul text:

Limbile mele preferate:

  • Visual Basic
  • Delphi
  • Prolog

Unul dintre cele mai importante elemente ale stilului este xsl:template. Servește la definirea unui șablon reutilizabil și conține regulile prin care va fi transformat documentul XML. Atributul potrivire conține o expresie pentru selectarea nodurilor la care va fi aplicat șablonul. Poate fi prezent și un atribut de nume. În acest caz, este posibil să apelați un șablon după nume folosind instrucțiunea xsl :apply-templates.

Pentru a repeta ieșirea șablonului pentru fiecare element de document, utilizați instrucțiunea xsl :for-each. Modelul este executat pentru fiecare element care se potrivește cu condiția specificată în atributul select.

Instrucțiunea xsl :value-of este folosită pentru a evalua expresia scrisă în atributul select și apoi pentru a afișa rezultatul în locul în care se află elementul însuși.

Filtrare

Am luat în considerare cazul în care sunt citite valorile fiecărui nod. Cu toate acestea, adesea este nevoie să selectați doar o parte a datelor, adică acestea trebuie să fie filtrate. Șabloanele XSLT acceptă două metode de filtrare.

Una este să utilizați atributul select al instrucțiunii xsl :for-each, iar al doilea este să utilizați atributul potrivire al elementului xsl :template. Ne vom uita la utilizarea potrivirii mai târziu, dar deocamdată ne vom uita la select .

Să modificăm puțin fișierul de date: adăugați un atribut înalt, care indică dacă limba din lista noastră este o limbă de nivel înalt. Vom extinde, de asemenea, lista de limbi.

C# Visual Basic Delphi Prolog Assembler Java Perl Exemplu 5.3. Limbi fișierelor4.xml

Rețineți că atributul high este setat la fals numai pentru valoarea „Assembler”. Să schimbăm puțin fișierul foaie de stil:

Limbi de nivel înalt: -
Exemplul 5.4. Limbi fișierelor4.xsl

În secțiunea [@ high ="true"] indicăm că ar trebui selectate doar acele noduri de document al căror atribut înalt este setat la "adevărat". Semnul @ este un simbol care indică faptul că este urmat de un nume de atribut.

Să ne uităm la rezultat:

Limbi de nivel înalt:

  • Visual Basic
  • Delphi
  • Prolog

După cum puteți vedea, valoarea „Assembler” nu este afișată în lista de limbi, adică procesorul XSLT a filtrat datele în funcție de condițiile specificate.

Triere

Pe lângă filtrare, o altă operație frecvent utilizată în generarea codului este sortarea. Atributul order-by al instrucțiunii xsl :for-each este folosit pentru a sorta rezultatul, pentru a indica ordinea prin care sunt trecute nodurile documentului la efectuarea transformării. Câmpurile de sortat sunt enumerate separate prin punct și virgulă și au, de asemenea, semnele „+” sau „-” în fața numelui lor, indicând sortarea în ordine crescătoare sau descrescătoare.

Să luăm în considerare o versiune ușor modificată a documentului - în loc de atributul înalt, vom folosi elementul nivel, care ia valorile ridicate sau scăzute. Și vom scrie numele limbii în elementul de nume.

C# ridicat Visual Basic ridicat Delphi ridicat Prolog ridicat Asamblator scăzut Java ridicat Perl ridicat Exemplu 5.5. Limbi ale fișierului6.xml

În următoarea foaie de stil pentru instrucțiunea xsl :for-each, folosim atributul order-by cu valoarea +name , unde semnul plus înseamnă sortarea în ordine crescătoare.

Limbi de nivel înalt: -
Exemplul 5.6. Limbi fișierelor6.xsl

În atributul select, filtrăm după valoarea elementului de nivel. De asemenea, în atributul select al declarației



Capitolul 1

Bazele XSLT

Bine ați venit în lumea transformărilor de limbaj extensibile pentru foi de stil (XSLT). Această carte vă va servi drept ghid în vasta lume a XSLT, care se extinde în moduri imprevizibile în fiecare minut. Vrem ca această lume să devină lumea ta. Există mult teren de acoperit, deoarece XSLT este folosit în multe moduri în zilele noastre. locuri interesante si foarte în moduri interesante. În această carte veți vedea cum funcționează totul.

XSLT în sine este un mijloc de procesare și formatare a conținutului documentelor XML. XML a devenit deja foarte popular, acum este rândul lui XSLT. XML vă oferă posibilitatea de a structura datele în documente, iar XSLT vă permite să lucrați cu conținutul documentelor XML - manipulați conținutul și creați alte documente (de exemplu, când sortați înregistrările XML ale bazei de date a angajaților sau când salvați date într-un document HTML, precum și la formatarea datelor detaliate).

Puteți lucra cu conținutul documentelor XML scriind propriul program pentru a interfața cu aplicațiile XML parser, dar trebuie să scrieți singur codul programului. La Ajutor XSLT puteți efectua tipuri similare de sarcini fără programare. În loc să scrieți cod pentru a procesa conținutul documentelor XML în Java, Visual Basic sau C++, puteți utiliza pur și simplu XSLT pentru a specifica ceea ce doriți să faceți, iar procesorul XSLT va face restul. Exact pentru asta este proiectat XSLT și devine un jucător cheie în lumea XML.

XSL = XSLT + XSL-FO

XSLT în sine face parte dintr-o specificație mai mare, Extensible Stylesheet Language sau XSL. XSL este conceput pentru a specifica formatul precis, până la milimetru, al documentelor.

O specificație mult mai mare decât XSLT, porțiunea de formatare a XSL se bazează pe obiecte speciale de formatare - această porțiune a XSL este adesea numită XSL-FO (sau XSL:FO, sau XSLFO). XSL-FO este un subiect complex, deoarece stilarea documentelor folosind obiecte de formatare poate fi un proces foarte confuz. De fapt, XSLT a fost adăugat inițial la XSL pentru a facilita transformarea documentelor XML în documente bazate pe obiecte de formatare XSL-FO.

Această carte se concentrează pe XSLT, dar acoperă și o introducere în XSL-FO, inclusiv cum să utilizați XSLT pentru a transforma documentele în formă XSL-FO; la urma urmei, XSLT a fost introdus pentru a facilita lucrul cu XSL-FO. Acest capitol va începe cu o prezentare generală atât a XSLT, cât și a XSL-FO.

Scurt istoric

XSL a fost creat de World Wide Web Consortium (W3C, www.w3.org), o coaliție de grupuri condusă inițial de Tim Berners-Lee. W3C este comitetul care produce specificații, cum ar fi specificațiile pentru XSL utilizate în această carte. Specificațiile fac ca XML și XSL ceea ce sunt.

W3C a dezvoltat inițial bunicul XML, SGML (Standard Generalized Markup Language), în anii 1980, dar era prea complex pentru a câștiga popularitate pe scară largă și, în realitate, XML (cum ar fi HTML) reprezintă o versiune simplificată a SGML. W3C a creat, de asemenea, Document Style Semantics and Specification Language (DSSSL) pentru a lucra cu SGML - și așa cum XML a fost derivat din SGML, XSL se bazează pe DSSSL original. După cum afirmă W3C: „Modelul pe care XSL îl folosește pentru afișarea documentelor pe ecran se bazează pe mulți ani de muncă pe un limbaj complex de stil ISO numit Document Style Semantics and Specification Language (DSSSL).”

Cu toate acestea, partea originală a XSL, adică XSL-FO, nu a fost încă suficient de simplă pentru a găsi o adoptare pe scară largă, așa că XSLT a fost introdus ca un mijloc de a face mai ușoară conversia documentelor XML în formă XSL-FO. După cum se dovedește, XSLT a fost adoptat deoarece este un limbaj de transformare complet care vă permite să lucrați cu conținutul documentelor XML fără a scrie cod, conversia acestor documente în alte documente XML, HTML sau alte formate bazate pe text. Marele succes al XSLT a surprins chiar și W3C.

Transformări XSLT-XSL

XSLT vă permite să lucrați direct cu conținutul documentelor XML. De exemplu, s-ar putea să aveți un document XML uriaș care conține toate statisticile de baseball pentru ultimul sezon, dar s-ar putea să fiți interesat doar de statisticile pentru ulciori. Pentru a extrage doar aceste date, puteți scrie un program în Java, Visual Basic sau C++ care funcționează cu analizatorii XML. Analizoarele sunt pachete software speciale care citesc documente XML și trec toate datele documentului secvenţial în codul dumneavoastră. Apoi poți crea document nou XML, pitchers.xml, care conține numai date despre ulcioare.

Această metodă funcționează, dar necesită destul de multă programare și petrecere mult timp, inclusiv testare. XSLT a fost conceput pentru a rezolva probleme ca acestea. XSLT poate fi citit de procesoarele XSLT care procesează documente XML: tot ce trebuie să faceți este să creați o foaie de stil XSLT care să definească regulile pe care trebuie să le aplicați pentru a transforma un document în altul. Nu este nevoie de programare, ceea ce este un avantaj incontestabil în ochii multor oameni, chiar și a programatorilor cu experiență. În exemplul de baseball, ați scrie o foaie de stil XSLT care definește acțiunile necesare și ați lăsa procesorul XSLT să facă restul.

Pe lângă transformarea unui document XML într-un alt document XML, puteți, de asemenea, transforma documente XML în diferite tipuri de documente - cum ar fi HTML, documente cu text îmbogățit (RTF), documente care utilizează XSL-FO și altele. De asemenea, puteți transforma documente XML în alte limbaje bazate pe XML - cum ar fi MathML, MusicML, VML, XHTML și altele - toate fără programare.

În multe cazuri, XSLT poate funcționa similar cu un limbaj de bază de date, cum ar fi SQL (Structured Query Language). interogări structurate, - limbaj celebru Database Access) deoarece vă permite să preluați datele necesare din documente XML în același mod în care o instrucțiune SQL preia date dintr-o bază de date. XSLT este uneori denumit chiar SQL pe Web, iar dacă sunteți familiarizat cu SQL, acest lucru vă va oferi o perspectivă asupra posibilități nelimitate XSLT. De exemplu, folosind o foaie de stil XSLT, puteți extrage un subset de date dintr-un document XML, puteți crea un cuprins pentru un document mare, puteți găsi toate elementele care îndeplinesc o anumită condiție (de exemplu, furnizori cu un anumit index), și așa mai departe. Și toate acestea - într-un singur pas!

XSL-FO: obiecte de formatare XSL

O altă parte a XSL este XSL-FO, partea de formatare a limbajului XSL, despre care vom fi, de asemenea, prezentate în această carte. Cu XSL-FO, puteți defini modul în care sunt reprezentate datele în documentele XML, până la dimensiunile marginilor, fonturile, alinierea, dimensiunile antetului și subantetului și lățimea paginii. Există o mulțime de lucruri la care să te gândești atunci când formatezi un document XML și, ca atare, XSL-FO este semnificativ mai extins decât XSLT.

Pe de altă parte, datorită complexității sale excesive, XSL-FO nu este foarte popular și nu poate fi comparat cu XSLT în acest sens. Nu există multe programe care acceptă XSL-FO și niciunul dintre ele nu se apropie suficient de standard. La fel cum este cel mai comun mod de a utiliza XSLT Transformarea XMLÎn HTML, cea mai obișnuită utilizare a XSL-FO este convertirea XML în text în formatul PDF (Portable Data Format) utilizat în Adobe Acrobat. Un exemplu de astfel de conversie este dat la sfârșitul acestui capitol, precum și în capitolul 11.

Specificații W3C

W3C produce specificații atât pentru XML, cât și pentru XSL și acestea sunt cele cu care vom lucra pe parcursul acestei cărți. Specificațiile W3C nu sunt numite standarde deoarece, conform acordurilor internaționale, standardele pot fi create doar de comitetele autorizate de guvern. În schimb, W3C începe cu o lansare cerințe(cerințe) pentru noua specificație. Cerințele sunt o listă de obiective și prezentari generale ale specificației, dar specificația în sine nu a fost încă scrisă în acest moment. În continuare, W3C lansează specificații: mai întâi în formă proiecte de lucru(schițe de lucru), care pot fi comentate de toate părțile interesate, apoi în formular recomandări pentru candidați(recomandări ale candidaților), care sunt încă supuse modificării; și în final, sub formă de finală recomandări(recomandări), care nu mai pot fi modificate.

Următoarea listă arată specificațiile W3C legate de XSLT pe care le vom folosi în această carte și unde pot fi găsite:

Schiță de lucru XSLT 1.1 la www.w3.org/TR/xslt11. Aceasta este o schiță de lucru a XSLT 1.1 și nu va fi dezvoltată în continuare înainte de recomandare - W3C intenționează să adauge toate funcționalitățile XSLT 1.1 la XSLT 2.0;

Cerințele XSLT 2.0 la www.w3.org/TR/xslt20req. W3C a lansat un grup de ținte pentru XSLT 2.0, inclusiv suport suplimentar pentru schemele XML;

Specificația XPath 1.0 la www.w3.org/TR/xpath. XPath este folosit pentru a găsi și indica anumite secțiuni și elemente din documentele XML, astfel încât acestea să poată fi manipulate;

Cerințele XPath 2.0 la www.w3.org/TR/xpath20req. XPath în acest moment actualizat - este adăugat suport suplimentar pentru XSLT 2.0.

versiuni XSLT

Specificațiile XSLT au fost dezvoltate mult mai activ decât specificațiile pentru toate XSL. Recomandarea XSLT 1.0 a fost adoptată în cele din urmă pe 16 noiembrie 1999, iar această versiune este versiunea majoră a XSLT în prezent.

Apoi a apărut o schiță de lucru a XSLT 1.1 și, deși inițial a fost considerat ca un prolog noua recomandare, un număr de angajați W3C au început să lucreze la XSLT 2.0 - și după ceva timp, W3C a decis să nu mai lucreze la recomandarea XSLT 1.1. Aceasta înseamnă că proiectul de lucru XSLT 1.1 nu va fi dezvoltat în continuare - va rămâne pentru totdeauna ca o schiță de lucru și nu va deveni niciodată o recomandare. Cu alte cuvinte, nu va exista o versiune oficială 1.1 lansată pentru XSLT.

Cu toate acestea, W3C afirmă, de asemenea, că intenționează să încorporeze o mare parte din ceea ce s-a făcut în schița de lucru XSLT 1.1 în XSLT 2.0, așa că în această carte voi trece pe scurt în revistă schița de lucru XSLT 1.1. Voi fi sigur că voi marca materialul ca „Doar schiță de lucru XSLT 1.1” atunci când discutăm despre materialul nou introdus în schița de lucru XSLT 1.1.

Următoarele sunt modificările aduse XSLT 1.0 în proiectul de lucru XSLT 1.1; Vă rugăm să rețineți că această listă este oferită aici doar pentru referință, deoarece este puțin probabil ca majoritatea materialului să însemne ceva pentru dvs. încă:

Tipul de date de fragment de arbore rezultat acceptat în XSLT 1.0 a fost eliminat;

Metoda de inferență nu mai poate adăuga în mod arbitrar noduri de spațiu de nume deoarece procesul de setare a spațiului de nume este aplicat automat;

S-a adăugat suport pentru XML Base;

Mai multe documente de ieșire sunt acum acceptate folosind elementul

;

Element

poate avea acum parametri;

Funcțiile de extensie pot fi acum definite folosind funcția

;

Funcțiile de extensie pot returna acum obiecte externe care nu se potrivesc cu niciun tip de date XPath.

Această carte discută recomandarea XSLT 1.0. și un proiect de lucru al XSLT 1.1. În continuarea acestui subiect, W3C a lansat cerințe pentru XSLT 2.0, care sunt, de asemenea, discutate în carte sub numele XSLT 2.0. Următoarea listă oferă o prezentare generală a obiectivelor XSLT 2.0:

Adăugați suport suplimentar pentru lucrul cu conținut de schemă XML folosind XSLT;

Simplificați lucrul cu șiruri;

Simplificați lucrul cu XSLT;

Îmbunătățiți suportul diverse limbi;

Menține eficiența crescută a procesorului.

Deși XSLT 2.0 nu va fi lansat în forma sa finală de ceva timp, voi trece în revistă ceea ce se știe despre el atunci când discutăm subiecte legate de el. De exemplu, succesorul HTML al W3C este limbajul bazat pe XML XHTML. XSLT 1.0 și schița de lucru XSLT 1.1 nu acceptă direct transformări din XML în XHTML, așa că va trebui să creăm această transformare de la zero. Cu toate acestea, un astfel de suport este inclus în XSLT 2.0 și voi remarca acest fapt când discutăm despre XHTML.

Astfel, am avut în vedere o scurtă trecere în revistă a subiectului; sa trecem la treaba. XSL este proiectat să funcționeze cu documente XML, așa că mai întâi vreau să mă uit la structura documentelor XML. Veți lucra cu documente XML, dar foile de stil XSL în sine sunt și documente XML, ceea ce trebuie să aveți în vedere atunci când le scrieți. Această carte presupune că aveți cunoștințe atât despre XML, cât și despre HTML.

Documente XML

Ar trebui să înțelegeți cum funcționează documentele XML, așa că verificați această secțiune pentru a vedea dacă sunteți gata să începeți. Să ne uităm la un exemplu de document XML:

Iată cum funcționează acest document: Am început cu o instrucțiune de procesare XML (toate instrucțiunile de procesare XML încep cu ), ceea ce înseamnă că este folosit versiuni XML 1.0, singura versiune definită în prezent, iar codificarea caracterelor este UTF-8, care este o versiune comprimată pe opt biți a Unicode:

Bine ați venit în lumea sălbatică și lânoasă a XML.

Apoi creez etichetă nouă(etichetă) cu nume

. Puteți folosi orice nume pentru etichetă, nu neapărat DOCUMENT; Tot ceea ce este necesar este ca numele să înceapă cu o literă sau liniuță de subliniere (_) și să fie urmat de litere, cifre, liniuțe de subliniere, puncte (.) sau cratime (-), dar nu spații. În XML, etichetele încep întotdeauna cu< и заканчиваются >.

Documentele XML sunt compuse din elemente XML; acestea din urmă încep cu o etichetă de deschidere precum

(urmat de conținutul elementului, dacă există, cum ar fi text sau alte elemente) și se termină cu o etichetă de închidere asociată cu eticheta de deschidere (aceasta începe cu caracterele Bine ați venit în lumea sălbatică și lânoasă a XML-ului

Această carte nu acoperă declarațiile DTD, dar arată că un element

- cel rădăcină, iar elementele pot fi, în primul rând, amplasate în interiorul acestuia, iar în al doilea rând, să conțină text.

Documentele XML pot conține tot felul de ierarhii, cu un element imbricat în alt element și așa mai departe prin mai multe niveluri de imbricare. De asemenea, puteți atribui atribute elementelor, de exemplu:

, unde atributul conține valoarea „”. Folosind astfel de atribute, este convenabil să stocați date suplimentare despre elemente. De asemenea, este posibil să includeți comentarii în documentele XML care explică anumite elemente cu text în interiorul etichetelor și.

Mai jos în Lista 1.1 este un exemplu de document XML

, care folosește aceste capacități pentru a stoca date despre planetele Mercur, Venus și Pământ - cum ar fi masa, lungimea zilei, densitatea, distanța de la Soare etc. Vom lucra cu acest document pe parcursul întregii cărți, deoarece conține majoritatea caracteristicilor XML de care veți avea nevoie într-o formă compactă. Lista 1.1. planete.xml .0553 58.65 1516 .983 43.4 .815 116.75 37l6 .943 66.8 1 2107 1 128.4

De asemenea, trebuie să înțelegeți o serie de definiții XML adoptate în această carte:

CDATA. Date de caractere simple (adică text care nu conține niciun marcaj);

ID. Un nume XML valid, care trebuie să fie unic (adică să nu fie utilizat în alte atribute de tip ID);

IDREF. Conține valoarea atributului ID al unui element, de obicei diferit de elementul cu care este asociat elementul curent;

IDREFS. Identificatori de elemente multiple (ID-uri), separate prin spații;

NUME Simbol . Literă, loc, punct, cratimă, liniuță de subliniere sau două puncte;

NUME. Un nume XML care trebuie să înceapă cu o literă, liniuță de subliniere sau două puncte, eventual urmat de caractere de nume suplimentare;

NUME. O listă de nume separate printr-un caracter delimitator;

NMTOKEN. Un simbol format din una sau mai multe litere, cifre, cratime, litere de subliniere, două puncte și puncte;

NMTOKENS. Mai multe nume XML valide într-o listă, separate printr-un caracter delimitator;

NOTAŢIE. Numele notației (care trebuie declarat în DTD);

PCDATA. Date de caractere analizate. PCDATA nu conține nicio markup și orice referință la entități au fost deja extinse în PCDATA.

Acum înțelegem documentele XML, inclusiv ce este un document bine format și valid. Dacă încă nu te simți suficient de încrezător cu acest material, citește o altă carte pe această temă. De asemenea, puteți consulta câteva resurse XML de pe web:

http://www.w3c.org/xml. Site-ul web XML principal al World Wide Web Consortium, punctul de plecare pentru toate lucrurile XML;

http://www.w3.org/XML/1999/XML-in-10-points, „XML în 10 pași” (de fapt doar șapte) - o prezentare generală a XML;

http://www.w3.org/TR/REC-xml. Recomandare oficială W3C pentru XML 1.0, versiunea actuală (și singura). Nu prea ușor de citit

http://www.w3.org/TR/xml-stylesheet/. Totul despre cum funcționează foile de stil și XML;

http://www.w3.org/TR/REC-xml-names/. Totul despre spațiile de nume XML;

http://www.w3.org/XML/Activity.html. Revizuirea activităților XML curente la W3C;

Http://www.w3.org/TR/xmlschema-0/, http://www.w3.org/TR/xmlschema-1/ și http://www.w3.org/TR/xmlschema-2/ . Scheme XML, o alternativă la declarațiile DTD;

http://www.w3.org/TR/xlink/. Specificația XLinks;

http://www.w3.org/TR/xptr. Specificații XPointers;

http://www.w3.org/TR/xhtml1/. Specificație XHTML 1.0;

http://www.w3.org/TR/xhtml11/. Specificație XHTML 1.1;

Http://www.w3.org/DOM/.W3C Document Object Model, DOM (Document Object Model).

Acum am învățat cum să creăm documente XML. Ce sunt ele sub formă vizuală?

Cum arată XML într-un browser?

Puteți afișa direct documente XML utilizând un browser, cum ar fi Microsoft Internet Explorer versiunea 5 sau o versiune ulterioară. De exemplu, dacă salvați documentul XML pe care l-am creat ca greeting.xml și îl deschideți în Internet Explorer, acesta va arăta ca cel prezentat în figură. 1.1.

Orez. 1.1. Document XML în Internet Explorer


În fig. 1.1 puteți vedea întregul document XML. Nu există nicio formatare, documentul XML arată exact la fel în Internet Explorer ca și cum l-ați imprima. (Pentru a afișa ecranul prezentat în Figura 1.1, Internet Explorer a folosit foaia de stil implicită. Acesta convertește XML în HTML dinamic, cu care Internet Explorer poate lucra.) Ce se întâmplă dacă dorim să prezentăm datele într-un mod diferit? Să presupunem că vrem să prezentăm datele din planets.xml într-un document HTML ca un tabel HTML?

Aici avem nevoie de transformări XSLT. În acest capitol le vom prezenta, iar la sfârșitul capitolului ne vom uita la cealaltă parte a XSL - XSL-FO.

Transformări XSLT

XSLT are capabilități excelente de manipulare a datelor din documente XML. De exemplu, folosind o foaie de stil XSLT, aș putea formata datele din

V tabel HTML. Foi de stil conțin reguli stabilite pentru transformarea unui document XML și o mare parte a cărții este dedicată creării foilor de stil și explicării modului în care funcționează. Iată cum arată o foaie de stil XSLT (Listarea 1.2) care convertește datele din planets.xml într-un tabel HTML (o vom analiza în Capitolul 2). Lista 1.2. planets.xsl xmlns:xsl="http://www.w3.org/1999/XSL/Transform">



După cum puteți vedea, această foaie de stil XSLT arată ca un document XML - și din motive întemeiate, pentru că asta este. Toate foile de stil XSLT sunt, de asemenea, documente XML și, dacă da, trebuie să fie documente XML bine formatate. Cu aceste două documente -

(Listing 1.1) și foaia de stil asociată acesteia, (Listing 1.2) - vom lucra pe parcursul cărții analizând diferitele transformări XSLT posibile.

Cum legați această foaie de stil la documentul XML

? După cum vom vedea în capitolul următor, o modalitate de a face acest lucru este cu o instrucțiune de procesare XML care utilizează două atribute. Primul atribut este , care ar trebui setat la „text/xml” pentru a indica faptul că este utilizată o foaie de stil XSLT. (Pentru a utiliza un alt tip de foaie de stil - foi de stil în cascadă (CSS), utilizate de obicei cu HTML - ar trebui să specificați „text/css”.) Al doilea atribut este , care ar trebui să fie setat la un URI (rețineți că XML nu folosește URL-uri și URI-uri, identificator uniform de resurse) foi de stil: .0553 58.65 1516 .983 43.4

Acum cu ajutorul procesor(procesor) poate fi aplicat tabelul XSLT

pentru a crea un document nou, . Procesorul XSLT creează un fișier nou, pe care îl puteți vedea în Fig. 1.2.

Orez. 1.2. Document HTML generat de procesorul XSLT


După cum se poate observa în Fig. 1.2, procesorul XSLT citește datele de la

, aplică regulile din ele și creează un tabel HTML în planets.html. Acesta este primul nostru exemplu de transformare XSLT.

Ce se întâmplă cu adevărat aici? Aveam un document XML,

, și foaia de stil XSLT, . Dar cum s-au unit pentru a crea? De ce aveți nevoie pentru transformarea XSLT

Pentru a efectua transformarea XSLT, cum ar fi transformarea

în , este necesar un procesor XSLT. Puteți utiliza XSLT în trei moduri pentru a transforma documente XML:

Folosind programe separate numite procesoare XSLT. Există mai multe programe care efectuează transformări XSLT, de obicei bazate în Java, dintre care unele le vom analiza în acest capitol;

Pe partea clientului. Un program client, cum ar fi un browser, poate efectua conversia citind foaia de stil specificată în instrucțiunea de procesare

. În special, Internet Explorer poate efectua acest tip de transformare;

Pe partea de server. Un program de server, cum ar fi un servlet Java, poate transforma automat documentul folosind o foaie de stil și îl poate trimite clientului.

În această carte, vom analiza toate cele trei moduri de a efectua transformări XSLT. Deja în acest capitol va fi oferită o privire de ansamblu asupra tuturor acestor trei metode diferite.

Folosind procesoare XSLT separate

Procesoarele XSLT separate sunt una dintre cele mai comune moduri de a efectua transformări XSLT. Există destul de multe astfel de procesoare, deși nu toate pot gestiona totul. tabele posibile Stiluri XSLT. Pentru a utiliza procesorul XSLT, pur și simplu rulați-l din linia de comandă (într-o fereastră DOS pe Windows), specificați numele documentului sursă XML, numele foii de stil de utilizat și numele documentului pe care doriți să îl creați .

Mai jos este o listă a unor procesoare XSLT disponibile pe Internet în ordine alfabetică- majoritatea (dar nu toate) sunt gratuite:

4XSLT, http://Fourthought.com/4Suite/4XSLT. procesor XSLT pentru Python;

EZ/X, http://www.activated.com/products/products.html. Pachet Java atât pentru analizarea XML, cât și pentru procesarea XSLT;

iXSLT, http://www.infoteria.com/en/contents/download/index.html Procesor XSLT de linie de comandă;

Koala XSL Engine, http://www.inria.fr/koala/XML/xslProcessor. Un procesor XSLT pentru Java care utilizează API-ul Simple pentru XML (SAX 1.0) și API-ul Document Object Model (DOM 1.0);

LotusXSL, http://www.alphaworks.ibm.com/tech/LotusXSL. LotusXSL de la IBM implementează un procesor XSLT în Java și poate interfața cu API-uri care se conformează Specificației de Nivel 1 Document Object Model (DOM). Cunoscutul procesor XSLT, dar acum este înlocuit cu Xalan 2.0;

MDC-XSL, http://mdc-xsl.sourceforge.net. Procesor XSLT în C++, poate fi folosit ca program separat;

Microsoft XML Parser, http://msdn.microsoft.com/downloads/webtechnology/xml/msxml.asp. Parser XML de la Microsoft, de înaltă performanță, disponibil ca componentă COM. Poate fi folosit pentru implementarea suportului XSLT în aplicații;

Sablotron, http://www.gingerall.com/charlie-bin/get/webGA/act/sablotron.act. Sablotron este un procesor XSLT rapid, compact și portabil. În prezent, acceptă un subset al recomandării XSLT. Poate fi folosit cu C sau Perl;

SAXON, http://users.iclway.co.uk/mhkay/saxon/index.html. Acest procesor XSLT implementează complet XSLT 1.0 și XPath 1.0, precum și o serie de extensii la aceste specificații. Rețineți că această versiune include și suport pentru schița de lucru pentru XSLT 1.1;

Transformiix, http://www.mozilla.org. Transformiix este o componentă XSLT de la Mozilla, implementată în prezent parțial în Netscape 6.0;

Procesor Unicorn XSLT (UXT), http://www.unicorn-enterprises.com. Acest procesor XSLT acceptă transformări XSLT și este scris în C++;

Xalan C++, http://xml.apache.org/xalan-c/index.html. Implementarea recomandărilor W3C pentru XSLT și XML Path Language (XPath). Versiunea C++ a celebrului procesor Apache Xalan;

Xalan Java, http://xml.apache.org/xalan-j/index.html. Implementarea recomandărilor W3C pentru XSLT și XML Path Language (XPath) în Java. Versiunea Java a celebrului procesor Apache Xalan. Include, de asemenea, funcții de extensie pentru accesarea bazelor de date SQL prin JDBC și multe altele;

xesalt, http://www.inlogix.de/products.htmL Acest procesor XSLT există ca modul de server web (atât pentru serverele web Apache, cât și pentru IIS), ca extensie Netscape 4.x și ca linie de comandă a procesorului;

Analizor XML pentru C, http://technet.oracle.com/tech/xml/parser_c2. Procesor XSLT de la Oracle. Acceptă recomandarea XSLT 1.0, concepută pentru utilizare cu C;

Analizor XML pentru Java, http://technet.oracle.com/tech/xml/parser_java2. Procesor XSLT de la Oracle. Suportă recomandarea XSLT 1.0, concepută pentru utilizare cu Java;

Analizor XML pentru PL/SQL, http://technet.oracle.com/tech/xml/parser_plsql. Procesor XSLT de la Oracle. Suportă recomandarea XSLT 1.0, concepută pentru utilizare cu PL/SQL;

XML:XSLT, http://xmlxslt.sourceforge.net. Acest parser XSLT este scris în Perl. Implementează parțial recomandarea XSLT;

Xport, http://www.timelux.lu. Procesor de transformare XSLT, disponibil ca obiect COM;

XSL:P, http://www.clc-marketing.com/xslp/download.html. procesor XSLT modern;

XT, http://www.jclark.com/xml/xt.html. XT este o implementare binecunoscută a recomandării XSLT în Java.

În următoarele secțiuni, vom arunca o privire mai atentă la patru dintre procesoarele XSLT enumerate mai sus: XT, Saxon, procesorul XSLT de la Oracle și Xalan. Toate sunt disponibile gratuit pe Internet și pot fi folosite pentru a testa toate exemplele din carte. Dacă doriți să studiați exemple, descărcați unul dintre aceste procesoare (cel mai cunoscut și utilizat pe scară largă este procesorul Xalan). Pentru a implementa transformările XSLT, voi folosi aceste procesoare în următoarea discuție.

Procesoarele selectate sunt bazate pe Java și necesită să aveți instalat Java. Dacă nu îl aveți deja instalat, îl puteți descărca gratuit de pe site-ul Sun. Cea mai recentă ediție, la momentul scrierii, Java 2 versiunea 1.3 este disponibilă la http://java.sun.com/j2se/1.3. Tot ce trebuie să faceți este să descărcați Java pentru sistemul dvs. de operare și să urmați instrucțiunile de descărcare de pe paginile corespunzătoare.

În timp ce aceste procesoare XSLT necesită Java pentru a rula, nu este nevoie să vă faceți griji dacă nu sunteți programator - nu este necesară nicio programare. Capitolul 10 va include exemple de programare Java pentru a vă arăta cum să creați transformări XSLT în cod, dar procesoarele XT, Saxon, XSLT de la Oracle și Xalan pot fi rulate din linia de comandă.

Dacă sunteți pe Windows, există o modalitate și mai ușoară de a utiliza XT și Saxon - aceste procesoare vin ca fișiere .exe (

și ), care se poate face direct pe Windows - și nu veți avea nevoie deloc de Java. Acest mod de lucru este discutat și în carte. Utilizarea procesorului XSLT în Java

Pentru a lucra cu procesorul XSLT bazat pe Java, pur și simplu descărcați și dezarhivați-l și este gata de funcționare. Citiți instrucțiunile însoțitoare, desigur; dar, de regulă, trebuie efectuate doar doi pași.

În primul rând, trebuie să spuneți lui Java cum să găsească procesorul XSLT, care este stocat într-un fișier Java Archive sau JAR. Pentru a spune Java unde să caute un fișier JAR, trebuie să setați variabila de mediu classpath la calea acelui fișier JAR. De exemplu, pe orice versiune de Windows, ați deschide o fereastră DOS și ați rula o comandă care setează variabila classpath la calea către fișierul JAR al procesorului XSLT al Oracle, xmlparserv2.jar, care în acest caz este stocat în director.

:

Acum puteți trece la a doua etapă - lansați procesorul XSLT; aceasta va executa clasa Java care acceptă procesorul. Pentru procesorul Oracle XSLT, această clasă este numită

. Pe Windows, de exemplu, puteți merge la directorul în care se află fișierele și și puteți executa clasa folosind Java astfel: C:\planets>

În acest caz dosarul

va fi convertit la utilizarea . Rețineți că acest exemplu presupune că fișierul java.exe, care rulează codul Java, se află în directorul Windows. Dacă nu este acolo, puteți specifica în mod explicit locația sa, directorul Java bin, de exemplu (JDK este prescurtarea pentru Java Development Kit, iar Java 2 versiunea 1.3 se instalează în mod implicit în director), ca în următoarea comandă: C :\planets>c: \jdk1.3\bin\java oracle.xml.parser.v2.oraxsl planets.xmlplanets.xslplanets.html

Puteți combina ambele etape (setarea variabilei

și pornind procesorul XSLT) într-unul singur dacă utilizați cheia împreună cu Java, specificând ce variabilă să utilizați: C:\planets>c:\jdk1.3\bin\java -cf c:\oraclexml\lib\xmlparserv2.jar oracle .xml.parser.v2.oraxsl planets.xml planets.xsl planets.html

Acestea sunt comenzi destul de lungi, care pot părea excesiv de complicate la prima vedere. Cu toate acestea, există un motiv bun pentru care majoritatea procesoarelor XSLT sunt scrise în Java: Java este suportat pe multe platforme, de la Macintosh la UNIX și, prin urmare, un procesor XSLT poate rula și pe toate aceste platforme.

Desigur, lucrurile devin mult mai ușoare dacă sunteți pe Windows și utilizați versiunea compilată a procesorului XT (

) sau saxon(). Mai jos este un exemplu pe Windows pentru a realiza aceeași conversie (presupunând că se află în directorul curent): C:\planets>

Am acoperit procesul pe scurt; Acum vreau să descriu cele patru procesoare XSLT (XT, Saxon, procesorul XSLT Oracle și Xalan) în detaliu, demonstrând cum să lucrați cu fiecare dintre ele. Vă rugăm să rețineți două lucruri: software-ul care implementează XML și XSL se modifică foarte repede, așa că până când citiți acest lucru, unele procesoare pot fi deja depășite; Deși toate procesoarele ar trebui să accepte toate XSLT standard, în unele cazuri produc rezultate diferite.

XT James Clark

XT de James Clark poate fi descărcat de pe www.jclark.com/xml/xt.html. Pe lângă procesorul XT în sine, veți avea nevoie de un parser XML care îi va permite lui XT să vă citească documentul XML. Există, de asemenea, un fișier în fișierele de descărcare XT

, care conține parserul XML al lui James Clark; Puteți, totuși, să utilizați analizatorul XP în aceleași scopuri, descarcându-l de la adresa www.jclark.com/xml/xp/index.html.

Preferința mea personală este să folosesc parserul Xerces XML din Proiectul Apache, care se află la http://xml.apache.org. (Până când a fost scrisă cartea Versiune curentă, Xerces 1.3.0, ar putea fi descărcat de la http://xml.apache.org/dist/xerces-j/ la format zip pentru UNIX într-un fișier

și formatul Windows în fișier.)

Procesorul XT în sine este o aplicație Java inclusă în pachetul de descărcare XT. fișier JAR,

. Pentru a utiliza și, trebuie să includeți ambele fișiere în variabilă, așa cum se arată în următorul exemplu pentru Windows (modificați locațiile acestor fișiere în consecință): C:\>set classpath=C:\xerces-1_3_0\xerces.jar;C :\xt\xt.jar

Apoi puteți utiliza clasa de transformare XT,

com.jclark.xsl.sax.Clasa.driver. Trebuie să furnizați numele parserului pe care doriți să-l utilizați (în acest caz, org.apache.xerces.parsers.SAXParser în arhivă) setând o variabilă la numele dorit pe linia de comandă. Iată cum folosesc XT pentru a face conversia pe Windows (presupunând că fișierele sunt conținute într-un director și se află în directorul dvs. curent): C:\planets>java -Dcom.jclark.xsl.sax.parser=org.apache. xerces. parsers.SAXParser com.jclark.xsl.sax.Driver planets.xml planets.xsl planets.html

Această linie este destul de lungă și lucrul bun este că XT este, de asemenea, ambalat într-un executabil Win32

. Pentru a lucra cu, totuși, este necesar ca mașina virtuală Java de la Microsoft să fie instalată pe computerul tău, Microsoft Java Virtual Machine (VM) - este inclus cu Internet Explorer. Iată un exemplu pe Windows care face aceeași conversie ca și linia anterioară (presupunând că se află în directorul curent): C:\planets>xt planets.xml planets.xsl planets.html nu se află în directorul curent, tu poate specifica locația sa în mod explicit, ca în exemplul următor (dacă se află în ): C:\planets>c:\xt\xt planets.xml planets.xsl planets.html saxon

Saxonul lui Michael Kay este unul dintre primele procesoare XSLT și poate fi descărcat gratuit de la http://users.iclway.co.uk/mhkay/saxon/. Tot ce trebuie să faceți este să descărcați fișierul saxon.zip și să extrageți arhiva zip; fișierul Java JAR necesar va fi creat,

.

Pentru a efectua o transformare XSLT, trebuie mai întâi să vă asigurați că

este în variabilă. De exemplu, pe Windows, presupunând că este în , puteți seta variabila după cum urmează: C:\>set classpath=c:\saxon\saxon.jar

Acum puteți utiliza clasa Saxon XSLT pentru a efectua transformarea,

com.icl.saxon.StyleSheet.class : C:\planets>java com.icl.saxon.StyleSheet planets.xml planets.xsl

Implicit, Saxon tipărește rezultatele pe ecran - nu exact ceea ce ne dorim dacă vrem să creăm un fișier

. Pentru a crea un fișier, puteți utiliza simbolul de redirecționare a ieșirii UNIX sau DOS >: C:\planets>java com.icl.saxon.StyleSheet planets.xml planets.xsl > planets.html

Când rulați pe Windows, este ușor să invocați imediat Saxon sub forma executabilului Win32, saxon.exe, care poate fi descărcat de la http://users.iclway.co.uk/mhkay/saxon/. Pe Windows poate fi lansat după cum urmează (part

specifică numele fișierului de ieșire): C:\planets>saxon -o planets.html planets.xml planets.xsl Oracle XSLT

Oracle Corporation oferă, de asemenea procesor gratuit XSLT, care poate fi descărcat de la http://technet.oracle.com/tech/xml/, deși acest lucru va necesita o procedură de înregistrare foarte lungă. La momentul redactării acestui articol, descărcarea procesorului XSLT era la fel de ușoară ca și clicarea pe linkul pentru XDK pentru Java la http://technet.oracle.com/tech/xml/.

După extragerea arhivei zip descărcate de pe site-ul Oracle, fișierul JAR necesar (la momentul scrierii) va fi apelat

. Poate fi plasat în variabila dvs. pe Windows astfel: C:\>set classpath=c:\oraclexml\lib\xmlparserv2.jar

Clasa Java obligatorie -

, pentru a converti în, îl puteți folosi astfel: C:\planets>java oracle.xml.parser.v2.oraxsl planets.xml planets.xsl planets.html Xalan

Probabil cel mai utilizat procesor XSLT unic este Xalan al proiectului Apache (Apache este un server web utilizat pe scară largă). Versiunea Java a Xalan poate fi descărcată de la http://xml.apache.org/xalan-j/index.html - trebuie doar să faceți clic pe fișierul de arhivă zip de care aveți nevoie (în prezent

pentru Windows sau pentru UNIX).

Când dezarhivați fișierul descărcat, veți primi atât procesorul XSLT,

, iar parserul XML, . Ambele fișiere JAR pot fi incluse în Windows după cum urmează (schimbați căile fișierelor pentru a se potrivi cu sistemul dvs.): C:\>set classpath=c:\xalan-j_2_0_0\bin\xalan.jar;c:\xalan-j_2_0_0 \ bin\xerces.jar

Pentru a utiliza apoi

pentru a converti în , rulați clasa Java: C:\planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT planets.html

Rețineți că pentru a specifica fișierul de intrare pe care îl folosim

, pentru a indica ieșirea - și pentru a indica foaia de stil XSLT - . Vom lucra cu procesorul Xalan cel mai des, așa că mai multe detalii sunt furnizate mai jos. Următoarea listă conține toate jetoanele care pot fi utilizate cu clasa, ca rezultat de Xalan însuși: . Utilizați numai caractere de returnare a carului în ieșire - CR/LF este utilizat în mod implicit; . Ieșire de diagnosticare a timpului; . Copiați stiva la eroare; . Utilizați formatul HTML; ; . Numărul de spații pentru alinierea (indentarea) fiecărui nivel din arborele de ieșire este 0 în mod implicit; . Folosiți numai caractere linefeed în ieșire - CR/LF este utilizat în mod implicit; ; . Setează opțiunea pentru foaia de stil; . Mod cu ieșire minimă (silențios); . Quiet Pattern Conflicts Avertismente, avertismente de conflicte de tipare; . Folosiți Formatter text simplu; . Urmăriți fiecare eveniment de generare a arborelui rezultat; . Urmăriți fiecare eveniment de alocare; . Urmăriți șabloanele așa cum sunt numite; . Urmăriți „copiii” șablonului pe măsură ce sunt procesați; . Informații despre versiune; . Validați XML și XSL de intrare (validarea este dezactivată implicit); . Utilizați formatatoare XML și adăugați un antet XML; .

Ne vom uita la toate aceste procesoare din carte; După cum am menționat, voi folosi Xalan cel mai des. (Motivul este că a devenit cel mai popular și cel mai adoptat procesor XSLT.) Desigur, puteți utiliza orice procesor XSLT atâta timp cât respectă specificația W3C XSLT.

Aceasta încheie discuția noastră despre procesoarele XSLT individuale. Există o altă modalitate de a transforma documente XML fără a recurge la program separat: În aceste scopuri, puteți utiliza un program client, cum ar fi un browser.

Conversia documentelor XML utilizând browsere

Suportul XSLT este inclus atât în ​​Microsoft Internet Explorer, cât și în Netscape Navigator. Dintre cele două browsere, Internet Explorer are mult mai mult suport pentru XSLT și voi folosi versiunea 5.5 a acestui browser aici. Puteți citi despre suportul XSLT în Internet Explorer la http://msdn.microsoft.com/xml/XSLGuide/.

Internet Explorer 5.5 și versiunile anterioare nu acceptă exact sintaxa XSLT în mod implicit, așa că trebuie să facem o serie de modificări fișierelor

Și . (Vom analiza acest subiect mai detaliat în capitolul următor. Există adrese URL de unde puteți descărca pachete actualizate de asistență XSLT.) Internet Explorer 6.0 era deja disponibil când această carte urma să apară. L-am instalat si i-am verificat functionarea; Se pare că acceptă sintaxa standard XSLT (cu excepția faptului că este încă necesar să se folosească tipul „” pentru foile de stil – cum ar fi în loc de „”). Dacă încă utilizați IE 5.5 sau o versiune anterioară, va trebui să faceți modificările enumerate aici și în capitolul următor. Dacă doriți să evitați acest lucru, utilizați IE 6.0: acest browser pare să accepte sintaxa XSLT completă.

A lucra cu

În IE (inclusiv versiunea 6.0), a trebuit să convertesc atributul din instrucțiunile de procesare din „” în „” (presupunând că fișierul se află în același director cu , așa cum indică atributul din Lista 1.3). Lista 1.3. Versiunea planetelor.xml pentru Microsoft Internet Explorer Mercury .0553 58.65 1516 .983 43.4 .815 116.75 3716 .943 66.8 1 2107 1 128.4

Acum, dacă utilizați versiunea IE 5.5 sau anterioară, ar trebui să convertiți și foaia de stil

(dar nu pentru versiunea 6.0 și mai veche; în acest caz, trebuie doar să modificați atributul tip din instrucțiunea de procesare de la „” la „”). Vom vedea cum să facem acest lucru în capitolul următor, dar iată noua versiune de planets.xsl de utilizat: Listarea 1.4. Versiunea planets.xsl pentru Microsoft Internet Explorer




Acum puteți deschide direct planets.xml în Internet Explorer, așa cum se vede în Fig. 1.3.

Orez. 1.3. Efectuarea transformării XSLT în Internet Explorer


Deși în acest fel Ajutor pe internet Explorer poate funcționa cu XSLT, dar trebuie să modificați foaia de stil astfel încât să se potrivească Cerințe de internet Explorator. Deoarece Internet Explorer nu acceptă în prezent XSLT prin deschiderea documentelor XML în timpul navigării, nu voi folosi acel browser pentru transformările XSLT din carte (cu excepția cazului în care este menționat în mod specific). Voi folosi procesoare XSLT precum Saxon și Xalan pentru a efectua transformările, iar dacă rezultatele sunt în format HTML, le vom vizualiza în Internet Explorer.

Este interesant de remarcat că există o modalitate de a efectua transformări XSLT adevărate în Internet Explorer fără a face modificări speciale în documentele XML sau XSL, fără măcar să descărcați și să instalați cel mai recent parser MSXML (așa cum sa discutat în Capitolul 2) - totuși, acest lucru necesită fără document XML de navigare și accesați procesorul XSLT încorporat din Internet Explorer, MSXML3, direct folosind JavaScript.

Lucrul cu XSLT și JavaScript în Internet Explorer

Procesorul XSLT din Internet Explorer 5.5 face parte din parserul XML MSXML3, iar dacă lucrați direct cu MSXML3 folosind JavaScript, nu este nevoie să modificați fișierele sursă

și (Listările 1.1 și 1.2), așa cum am făcut în secțiunea anterioară. Vom vedea cum funcționează acest lucru în Capitolul 10, dar iată o pagină web care utilizează JavaScript și MSXML3 pentru a efectua conversia folosind și a afișa rezultatele (rețineți că puteți modifica acest document pentru a utiliza propriile documente XML și XSLT fără a fi nevoie să scrierea codului în JavaScript: înlocuiți doar numele cu numele documentelor dvs. XML și XSL) (Listing 1.5). Lista 1.5. Conversie la Internet Explorer folosind JavaScript XSLT Utilizarea JavaScript var XMLDocument = new ActiveXObject("MSXML2.DOMDocument.3.0"); var XSLDocument = new ActiveXObject("MSXML2.DOMDocument.3.0"); var HTMLtarget = document.all["targetDIV"]; XMLDocument.validateOnParse = adevărat; XMLDocument.load("planete.xml"); if (XMLDocument.parseError.errorCode != 0) ( HTMLtarget.InnerHTML = „Eroare!”; XSLDocument.validateOnParse = adevărat; XSLDocument.load(„planets.xsl”); dacă (XSLDocument.parseError.errorCode != 0) ( HTMLtarget.innerHTML = „Eroare!” HTMLtarget.innerHTML = XMLDocument.transformNode(XSLDocument);

Ca urmare a prelucrării acestei pagini web, se va obține același rezultat ca în Fig. 1.3: descarcă fișiere direct

și le aplică analizatorul MSXML3. Acestea sunt exact aceleași fișiere cu care am lucrat de-a lungul acestui capitol - nu au modificările necesare față de subiectul anterior, la care ne-am uitat direct în Internet Explorer. Consultați capitolul 10 pentru mai multe informații.

UTILIZAREA VBSCRIPT

Dacă preferați VBScript, încercați să utilizați acest limbaj de scripting Internet Explorer pentru a obține rezultate similare.

Transformări XSLT pe servere web

Puteți efectua transformări XSLT pe serverul web, astfel încât documentul XML să fie transformat înainte ca serverul web să-l trimită către browser. Cea mai obișnuită transformare aici este convertirea unui document XML în HTML, dar transformările XML-în-XML la nivel de server devin, de asemenea, din ce în ce mai frecvente.

Spre deosebire de celelalte transformări XSLT discutate până acum în acest capitol, rularea transformărilor XSLT pe un server Web necesită de obicei ceva programare. Există trei moduri comune de a efectua transformări XSLT pe serverele web: folosind servlet-uri Java, Java Server Pages (JSP) și Active Server Pages (ASP). În capitolul 10 vom explora toate aceste trei metode în detaliu. Mai multe procesoare XSLT pot fi configurate pentru utilizare pe servere web - iată o listă de început:

AXSL, www.javalobby.org/axsl.html. AXSL este un instrument pe partea de server care convertește XML în HTML folosind XSLT;

Microsoft XML Parser, http://msdn.microsoft.com/downloads/webtechnology/xml/msxml.asp. MSXML3 oferă acces securizat la server prin HTTP pentru lucrul cu ASP;

mod_xslt, http://modxslt.userworld.com. Un modul simplu de server web Apache care utilizează XSLT pentru a prelua conținut XML. Procesarea XSLT folosește procesorul Sablotron;

PXSLServlet, www.pault.com/Pxsl Acest servlet poate fi folosit pentru a transforma XML în HTML folosind XSLT. De asemenea, vă permite să citiți și să scrieți date într-o bază de date bazată pe SQL (prin JDBC);

xesalt, www.inlogix.de/products.html. Acest procesor XSLT există ca modul pentru serverele web Apache și IIS;

XML Enabler, www.alphaworks.ibm.com/tech/xmlenabler. XML Enabler vă permite să trimiteți cereri către un servlet, iar când servletul răspunde, XML Enabler poate formata datele folosind diferite foi de stil XSLT;

XT, poate fi folosit ca servlet Java. Este nevoie de un motor servlet care implementează cel puțin versiunea 2.1 a API-ului Java Servlet. Clasa servlet Java se numește com.jclark.xsi.sax.XSLServlet.

Următorul exemplu arată o pagină JSP care activează procesorul Xalan pe un server web. Xalan se convertește

folosind o foaie de stil. Codul citește apoi fișierul și îl trimite înapoi de la serverul web la browser: XSLTProcessor processor = XSLTProcessorFactory.getProcessor(); procesor.process(nou XSLTInputSource("planets.xml"), nou XSLTInputSource("planets.xsl"), nou XSLTResultTarget("planets.html")); FileReader filereader = new FileReader("planets.html"); BufferedReader bufferedreader = nou BufferedReader(cititor de fișiere); while((instring = bufferedreader.readLine()) != null) ( %>

Rezultatul poate fi văzut în Fig. 1.4: Acesta arată fișierul planets.html trimis către Internet Explorer de către serverul web care rulează JSP. Capitolul 10 prevede Informații suplimentare despre utilizarea servlet-urilor Java, JSP și ASP pentru transformările XSLT pe partea de server.

Orez. 1.4. Conversia XML pe un server web


Ne-am uitat la modul de a efectua transformări XSLT folosind procesoare XSLT separate în Internet Explorer și serverele web. Cu toate acestea, singura conversie pe care am făcut-o până acum este conversia XML în HTML. Deși acum este cea mai populară transformare, transformările XML în XML devin tot mai frecvente.

Conversii XML în XML

Transformările XML-la-XML sunt uneori considerate ca SQL pentru web, deoarece permit rularea interogărilor bazei de date pe documente XML. Mai jos este un exemplu. Fișierul pe care îl folosim

conține destul de multe date despre fiecare planetă: .0553 58.65 1516 .983 43.4 .815 116.75 3716 .943 66.8

Ce se întâmplă dacă am avea nevoie doar de un subset al acestor date - de exemplu, numele și masa fiecărei planete? În termeni de baze de date

este un tabel și dorim să creăm un nou tabel care să conțină un subset de date din primul. În bazele de date, acest lucru se face folosind limbajul SQL, iar pentru documentele XML putem folosi XSLT.

Lista 1.6 arată noua versiune a fișierului

, care efectuează transformarea necesară: doar numele și masa fiecărei planete sunt selectate și trimise în documentul de ieșire. În special, rețineți că facem o conversie XML-la-XML, așa că folosesc un element al cărui atribut este setat la „xml” (de fapt, tipul de date de ieșire este de obicei XML, dar dacă procesorul XSLT vede etichetă, de obicei va genera HTML în mod implicit). Lista 1.6. Selectând numai numele și masa xmlns:xsl="http://www.w3.org/1999/XSL/Transform">



să folosiți Xalan pentru a crea un document XML nou, : C:\planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT new.xml

Așa arată documentul XML rezultat,

: .0553(Pământ = 1)

Rețineți că acest fișier arată foarte asemănător cu fișierul original

, cu excepția faptului că fiecare element conține doar elementele și . În acest fel, am putut obține un subset al datelor originale ale documentului XML.

Desigur, orice număr de aceste tipuri de transformări XML-XML pot fi efectuate. Puteți manipula datele dintr-un document XML pentru a crea documente XML complet noi. De exemplu, puteți lua un document XML care conține numele și notele elevilor și puteți crea un document nou care afișează mediile de calificare. XSLT are multe funcții încorporate care vă permit să lucrați cu datele în acest fel, pe care le vom analiza în Capitolul 8.

În plus, multe programe folosesc XML pentru a face schimb de date pe Internet și, deoarece de obicei își formatează documentele XML în mod diferit, o altă modalitate populară de a utiliza transformările XML-în-XML pe Internet este de a converti XML dintr-un format utilizat de un program , în formatul altui program.

Conversii din XML în XHTML

În timp ce multe cărți se concentrează exclusiv pe conversiile XML în HTML, adevărul este că W3C nu este foarte mulțumit de acest lucru. Consorțiul încerca să-și schimbe atenția de la HTML (pe care l-au standardizat inițial) la noua lor specificație, XHTML, care era o rescrie HTML compatibilă cu XML. Documentele XHTML sunt, de asemenea, documente XML valide bine formate, așa că o conversie de la XML la XHTML este într-adevăr o conversie de la XML la un tip special de XML.

Deși W3C promovează activ XHTML, formatul nu a devenit încă larg răspândit. Prin urmare, în această carte mă refer în principal la HTML; dar din moment ce W3C spune că ar trebui folosit XHTML, voi acoperi subiectul pe scurt aici și în Capitolul 6. Dacă doriți să aflați mai multe despre XHTML, citiți recomandarea W3C XHTML 1.0 la www.w3.org/TR/xhtml1/ , precum și XHTML 1.1 la www.w3.org/TR/xhtml11/.

În timp ce W3C spune că XML ar trebui convertit în XHTML și nu în HTML, nu am văzut un singur exemplu de lucru pe site-ul lor. Exemplele pe care le oferă nu generează de fapt documente XHTML valide. Cu toate acestea, suportul pentru transformările XML-XHTML este de așteptat să fie integrat în XSLT 2.0, iar fenomenul dorit de W3C este probabil să apară în curând.

Ne vom uita la acest tip de conversie mai detaliat în Capitolul 6, dar aici voi da versiune de lucru Mese

, care produce o versiune XHTML validă (Listing 1.7). Rețineți că de data aceasta trebuie să utilizați atributul de pe element și, deși acesta este cod XSLT valid, nu toate procesoarele XSLT îl vor putea procesa. Lista 1.7. Transformare XML-XHTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform">doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional .dtd" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes"/>




Mă voi converti

într-un document XHTML valid, folosind această nouă aromă și procesorul XSLT XT. Mai întâi trebuie să setați corect variabila: С:\>set classpath=c:xerces\xerces-1_3_0\xerces.jar;с:\xt\xt.jar;

Apoi fac conversia:

C:\planets>java -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser.com.jclark xsl.sax.Driver planets.xml planets.xsl planets.html

Rezultatul va fi un fișier XHTML,

:

Acest document,

, este într-adevăr un document XHTML 1.0 bine format și valid (cea mai populară formă de XHTML) conform Programului de validare HTML și XHTML W3C. Validatorul HTML/XHTML poate fi găsit pe Internet la http://validator.w3.org/file-upload.html. Capitolul 6 oferă mai multe informații despre transformările XML-XHTML.

Până acum, am oferit o privire de ansamblu asupra modului în care funcționează XSLT, analizând transformările de la XML la HTML, XML și XHTML. Mai târziu, în carte, ne vom uita la transformările XSLT, cum ar fi XML în RTF (Rich Text Format), text simplu, XSL-FO, JavaScript, baze de date bazate pe SQL și multe altele. Există, de asemenea, o mulțime de materiale suplimentare despre XSLT despre care ar trebui să știți, iar acum ne vom familiariza cu diferitele tipuri de resurse XSLT care pot fi găsite pe Internet.

Resurse XSLT

Puteți găsi o cantitate imensă de informații de care avem nevoie pe Internet. Vă rugăm să rețineți că toate adresele URL enumerate mai jos pot fi modificate; listele vor fi relevante atâta timp cât doresc acest lucru persoanele care susțin site-urile web enumerate.

Specificații XSLT, ghiduri și exemple

Punctul de plecare pentru resursele XSLT este, desigur, W3C însuși. Mai jos sunt adresele URL pentru specificațiile W3C utilizate în carte:

www.w3.org/Style/XSL/. Pagina principală W3C pe XSL;

www.w3.org/TR/xslt. Specificația XSLT 1.0;

www.w3.org/TR/xslt11. Schiță de lucru XSLT 1.1, care simplifică lucrul cu extensiile XSLT și adaugă suport pentru recomandarea W3C XBase;

www.w3.org/TR/xslt20req. Cerințe XSLT 2.0, care oferă o prezentare generală a XSLT 2.0, inclusiv suport suplimentar pentru schemele XML;

www.w3.org/TR/xsl/. obiecte de formatare XSL;

www.w3.org/Style/2000/xsl-charter.html. Obiectivele Comitetului XSL;

www.w3.org/TR/xpath20req. Cerințe XPath, care oferă o prezentare generală a XPath 2.0, care include suport suplimentar pentru XSLT 2.0;

Http://lists.w3.org/Archives/Public/www-xml-stylesheet-comments/. Lista foilor de stil W3C XML.

Multe tutoriale și exemple XSLT sunt disponibile și din alte surse - iată o listă de pornire:

Http://http.cs.berkeley.edu/~wilensky/CS294/xsl-examples.html. Un număr de exemple pe XSLT;

http://msdn.microsoft.com/xml/reference/xsl/Examples.asp. Exemple de șabloane XSLT utilizate în elementele potrivite;

http://msdn.microsoft.com/xml/XSLGuide/xsl-overview.asp. O descriere inițială a lucrului cu XSLT;

www.lists.ic.ac.uk/hypermail/xml-dev/xml-dev-Nov-1999/0371.html. Ghidul XSLT ca prezentare PowerPoint;

www.mulberrytech.com/xsl/xsl-list/. O listă deschisă dedicată discuțiilor despre XSL;

www.nwalsh.com/docs/tutorials/xsl/xsl/slides.html. Ghid XSLT;

www.oasis-open.org/cover/xsl.html. Descrierea evenimentelor curente din jurul XSLT;

www.w3.org/Style/Activity. O listă impresionantă de pagini dedicate foilor de stil W3C;

www.xml101.com/xsl/. Un set complet de referințe XSLT;

www.xslinfo.com. Un set util de resurse XSLT compilat de James Tauber;

www.zvon.org/xxl/XSLTutorial/Books/Bookl/bookInOne.html. Referințe pentru XSLT, XPath, XML, WML și alte limbi.

Cu toate acestea, cunosc un singur grup de știri Usenet pe XSLT și este întreținut de Microsoft - microsoft.public.xsl. În timp, vor apărea și altele. S-ar putea să fiți interesat și de listă listă de email-uri prin XSL - www.mulberrytech.com/xsl/xsl-list.

Pe lângă specificațiile, ghidurile și exemplele W3C, există un număr mare de editori de foi de stil XSLT disponibile pe Internet.

editori XSLT

Un editor de text standard, cum ar fi vi, emacs, pico, Windows Notepad sau Windows WordPad este suficient pentru a crea documentele XML și XSL utilizate în această carte. În mod implicit, documentele XML și XSL sunt de așteptat să fie scrise în Unicode, deși în practică pot fi scrise în ASCII, iar practic toate documentele până în prezent au fost scrise în ASCII. Asigurați-vă că atunci când creați un document, îl salvați în formatul text simplu al editorului.

LUCRU CU WORDPAD

Editorii de text Windows, cum ar fi WordPad, au o caracteristică enervantă - dacă nu recunosc extensia pe care o dați unui fișier, adaugă extensia .txt la numele fișierului. Pentru fișierele .xml și .xsl aceasta nu este o problemă, deoarece WordPad înțelege aceste extensii, dar dacă încercați să salvați documente create în timp ce lucrați la o carte cu o extensie pe care WordPad nu o recunoaște, editorul va adăuga extensia .txt la toate. dintre ei. Pentru a preveni acest lucru, atunci când salvați documentul, includeți numele fișierului între ghilimele: „fișier.abc”.

Cu toate acestea, va fi mult mai ușor să utilizați un editor XML real conceput special pentru procesarea documentelor XML. Iată o listă de programe de editare a documentelor XML:

Adobe FrameMaker, www.adobe.com. Adobe introduce excelent, dar scump editor FrameMaker cu suport XML;

XML Pro, www.vervet.com/. Editor XML scump, dar puternic;

XML Writer, pe disc, XMLWriter http://xmlwriter.net/. Selecţie Cuvinte cheie culoare, interfață ușor de utilizat;

Bloc-notes XML, msdn.microsoft.com/xml/notepad/intro.asp. Editor gratuit XML de la Microsoft, puțin dificil de lucrat;

eNotepad, www.edisys.com/Products/eNotepad/enotepad.asp. Un analog al WordPad, care are mijloace bune lucrează cu XML și convenabil interfața cu utilizatorul;

XMetal de la SoftQuad, www.xmetal.com. Un editor XML scump, dar foarte puternic, editorul preferat al multor autori;

XML Spy, www.xmlspy.com/. Are o interfață de utilizator bună și este ușor de utilizat;

Arbortext's Epic, www.arbortext.com/ Un editor puternic, dragă, cu opțiuni bogate de personalizare.

Editorul XML Spy este prezentat în Fig. 1.5, XML Writer - în Fig. 1.6 și XML Notepad - în Fig. 1.7.


Orez. 1.5. Editarea XML în XML Spy



Orez. 1.6. Editarea XML în XML Writer



Orez. 1.7. Editarea XML în XML Notepad


Există, de asemenea, editori XSLT speciali. Iată lista de pornire:

Http://lists.w3.org/Archives/Public/xsl-editors/. Lista de discuții pentru editorul XSL pe site-ul web W3C;

IBM XSL Editor, www.alphaworks.ibm.com/tech/xsleditor. Un editor de foi de stil XSLT în Java care oferă o interfață vizuală pentru scrierea foilor de stil și expresiile de selecție și potrivire. Cu toate acestea, trebuie instalat suport pentru Java 2 versiunea 1.1 (nu 1.2 sau 1.3);

Stylus, www.exceloncorp.com/products/excelon_stylus.html. Stylus include un editor de foi de stil XSLT;

Instrumentul de transformare Visual XML, www.alphaworks.ibm.com/aw.nsf/techmain/visualxmltools. Visual XML Transformation Tool generează XSLT pentru a transforma documentele sursă în documente de ieșire;

Whitehill Composer, www.whitehill.com/products/prod4.html. Generator de foi de stil XSLT cu drag-and-drop WYSIWYG;

XL-Styler, www.seeburger.de/xml. Include evidențierea cuvintelor cheie, completarea etichetelor, previzualizare HTML și multe altele;

XML Cooktop, http://xmleverywhere.com/cooktop/. Acest editor tocmai a fost lansat și arată decent. Include instrumente pentru dezvoltarea și validarea foilor de stil XSLT;

XML Spy, www.xmlspy.com/. Cu asta Editor XML puteți edita și XSLT;

XML Style Wizard, www.infoteria.com/en/contents/download. Un instrument care generează fișiere XSLT folosind un expert care examinează datele XML și pune întrebări utilizatorului;

xslide, www.mulberrytech.com/xsl/xslide. Suportă modul de editare XSLT pentru Emacs;

XSpLit, www.percussion.com/xmlzone/technology.htm. Vă permite să partajați documente HTML pe definițiile XML DTD și foile de stil XSLT.

Utilitare XSLT

Există, de asemenea, multe utilitare XSLT pe Internet - următoarea listă le evidențiază pe cele mai faimoase:

Extensia Microsoft XSL API, http://msdn.microsoft.com/downloads/webtechnology/xml/xslisapi.asp. Simplifica sarcina de a efectua transformari XSLT pe partea de server;

Microsoft XSL-to-XSLT Converter, http://msdn.microsoft.com/downloads/webtechnology/xml/xsltconv.asp. Convertește XSL în XSLT;

XSL Lint, www.nwalsh.com/xsl/xslint. XSL Lint verifică sintaxa XSLT, permițându-vă să detectați multe tipuri de erori;

XSL Trace, www.alphaworks.ibm.com/tech/xsltrace. Acest produs permite utilizatorului să parcurgă pașii XSLT vizual;

Compilatorul XSLT, www.sun.com/xml/developers/xsltc. Convertește fișierele XSLT în clase Java pentru conversia fișierelor XML;

Instrument de testare XSLT, www.netcrucible.com/xslt/xslt-tool.htm. Acest instrument vă oferă posibilitatea de a rula XSLT pe o varietate de procesoare populare, permițându-vă să testați dacă transformarea funcționează corect pe toate sistemele. Este posibil să apelați MSXML3 Microsoft din linia de comandă, la fel ca orice alt procesor XSLT;

XSLTC, www3.cybercities.com/x/xsltc. Compilează foile de stil XSLT în cod C++. Bazat pe Transformix, procesorul XSLT al Mozilla;

XSLTracer, www.zvon.org/xxl/XSLTracer/Output/introduction.html. XSLTracer este un instrument Perl care demonstrează cum se procesează fișiere XML folosind foi de stil XSLT.

Aceasta încheie prezentarea generală a XSLT din acest capitol. După cum puteți vedea, ne așteaptă un set imens de informații. Restul capitolului va oferi o prezentare generală a XSL-FO.

Obiecte de formatare XSL: XSL-FO

Cea mai populară parte a XSL sunt transformările XSLT, pe care le-am introdus deja în acest capitol. O altă parte, semnificativ mai mare, este obiectele de formatare XSL, XSL-FO (Obiecte de formatare XSL).

Cu XSL-FO, puteți specifica formatarea și afișarea unui document XML cu precizie milimetrică. Puteți seta orice doriți pentru documente: font text, locație, aliniere, culoare, indecși, dimensiunea marginii și multe altele. Lucrul cu XSL-FO este similar cu procesul de creare manuală a unui procesor de text și, datorită complexității XSL-FO, unii evită să le folosească. În capitolele 11 și 12, vom explora ce are de oferit XSL-FO și cum să lucrăm cu el.

Resurse XSL-FO

Un număr de resurse XSL-FO sunt disponibile pe Internet, dar sunt mult mai puține decât resursele XSLT. Iată pe cele principale:

Http://lists.w3.org/Archives/Public/www-xsl-fo/. Lista de note W3C pentru XSL-FO.

Așa cum există procesoare XSLT, există și procesoare XSL-FO. Niciunul dintre ei, însă, nu se apropie de implementarea completă a standardului. Iată lista inițială a procesoarelor XSL-FO:

FOP, http://xml.apache.org/fop. O aplicație Java care citește arborele de obiecte de formatare XSL (produs de parserul XML) și produce un document PDF;

PassiveTeX, http://users.ox.ac.uk/~rahtz/passivetex. Un pachet TeX care formatează ieșirea XSL-FO în PDF. Utilizează analizatorul XML xmltex al lui David Carlisle;

SAXESS Wave, http://www.saxess.com/wave/index.html. Convertor XML-Shockwave/Flash;

TeXML, http://www.alphaworks.ibm.com/tech/texml. Convertește documentele XML în format TeX;

Unicorn Formatting Objects (OZN), http://www.unicorn-enterprises.com. Un procesor de obiecte cu formatare XSL scris în C++. Poate genera rezultate în PostScript, PDF și alte formate acceptate de driverele DVI TeX;

XEP, http://www.renderx.com/F02PDF.html. Un procesor XSL-FO în Java care convertește obiectele cu formatare XSL în PDF sau PostScript.

În această carte, voi folosi FOP (procesorul de formatare a obiectelor), care este probabil cel mai comun procesor XSL-FO. Procesorul XSL-FO bazat pe Java preia un document XML scris pentru a utiliza obiecte de formatare XSL-FO și îl convertește într-un format PDF care poate fi vizualizat în Adobe Acrobat. Deși transformările XSLT sunt adesea efectuate în HTML, acest lucru nu va funcționa pentru XSL-FO, deoarece specifică fiecare aspect al formatului de prezentare al documentului până la cele mai mici detalii, iar formatul PDF este mult mai potrivit pentru aceste scopuri.

Formatarea unui document XML

Pentru formatare

Putem folosi obiectele de formatare XSL-FO introduse în Capitolul 12. De exemplu, iată cum putem afișa numele primei planete, Mercur, folosind obiectele de formatare XSL-FO și:

Cu toate acestea, crearea unui document întreg folosind obiecte de formatare XSL nu este o sarcină ușoară, cu excepția documentelor scurte. W3C a anticipat aceste dificultăți, care este unul dintre principalele motive pentru care consorțiul a introdus limbajul de transformare, XSLT. Mai exact, puteți crea o foaie de stil și puteți utiliza XSLT pentru a transforma documentul XML, astfel încât să folosească obiecte de formatare XSL.

În practică, transformările se fac aproape întotdeauna folosind foi de stil și asta vom face în capitolele 11 și 12. Tot ce trebuie să faceți este să furnizați o foaie de stil XSLT care poate fi folosită pentru a vă transforma documentul folosind obiecte de formatare. Cu această metodă, procesorul XSLT face toată treaba, transformând documentul dintr-o reprezentare cu care vă simțiți confortabil să lucrați într-o reprezentare cu obiecte de formatare, pe care apoi o puteți lipi într-un program care poate procesa obiectele de formatare și poate afișa rezultatul formatat. .

Pentru a clarifica toate cele de mai sus, mai jos este un exemplu de lucru cu un document XML pe care l-am întâlnit deja în acest capitol,

: .0553 58.65 1516 .983 43.4 .815 116.75 3716 .943 66.8 1 2107 1 128.4

În acest exemplu, voi folosi o foaie de stil XSLT - vom vedea cum să creăm una în Capitolul 11 ​​- pentru a transforma

astfel încât să folosească obiecte de formatare. Apoi folosesc procesorul FOP pentru a converti noul document într-un fișier PDF. Ne vom uita, de asemenea, la modul în care arată un document formatat în Adobe Acrobat. Foaie de stil XSLT

Lista 1.8 arată foaia de stil

, care preia date și le formatează într-un fișier PDF, . În acest caz, folosesc un font mare pentru text - 36 de puncte. Lista 1.8. Transformare XML-XSL-FO xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version= „1.0”>
margin-top="0mm" margin-bottom="10mm" margin-left="0mm" margin-right="0mm"/>
font-weight="bold"
font-size="36pt" line-height="48pt"
font-size="36pt" line-height="48pt"
font-size="36pt" line-height="48pt"
font-size="36pt" line-height="48pt"
font-size="36pt" line-height="48pt" Convertiți un document într-o vizualizare cu obiecte de formatare

Pentru a converti

Într-un document care utilizează obiecte de formatare, pe care l-am numit , tot ce trebuie să faceți este să aplicați o foaie de stil. Acest lucru se poate face folosind tehnicile XSLT deja discutate în acest capitol.

De exemplu, pentru a crea

folosind Xalan, pe Windows trebuie mai întâi să instalați: C:\>set classpath=c:\xalan\xalan-1_2_0_0\bin\xalan.jar; c:\xalan\xalan-j_2_0_0\bin\xerces.jar

Apoi aplicați

pentru a genera: C:\planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planetsPDF.xsl -OUT planets.fo

Pentru a seta formatarea documentului

folosește obiecte de formatare XSL. Așa arată fișierul (Listing 1.9): Lista 1.9. planets.fo margin-right="20mm" margin-left="20mm" margin-bottom="10mm" margin-top="10mm" page-width="300mm" page-height="400mm" margin-right=" 0mm" margin-left="0mm" margin-bottom="10mm" margin-top="0mm"/> font-family="sans-serif" line-height="48pt" font-size="36pt" font- weight="bold"> font-family="sans-serif" line-height="48pt" font-family="sans-serif" line-height="48pt" font-family="sans-serif" line-height ="48pt" font-family="sans-serif" line-height="48pt" font-family="sans-serif" line-height="48pt" Distanță (milioane de mile): 43,4 font-family="sans- serif" line-height="48pt" font-size="36pt" font-weight="bold"> font-family="sans-serif" line-height="48pt" font-family="sans-serif" line -height="48pt" font-family="sans-serif" line-height="48pt" font-family="sans-serif" line-height="48pt" font-family="sans-serif" line-height ="48pt" Distanță (milioane de mile): 66,8 font-family="sans-serif" line-height="48pt" font-size="36pt" font-weight="bold"> font-family="sans-serif " line-height="48pt" font-family="sans-serif" line-height="48pt" font-family="sans-serif" line-height="48pt" font-family="sans-serif" rând -height="48pt" font-family="sans-serif" line-height="48pt" Distanță (milioane de mile): 128,4

Deci am creat cu succes

. Cum îl putem folosi acum pentru a crea un fișier PDF formatat? Creați un document formatat

A procesa

pentru a crea un document formatat, voi folosi procesorul FOP al lui James Tauber, pe care l-a donat proiectului Apache XML.

Pagina de start a procesorului - http://xml.apache.org/fop; FOP poate fi descărcat în prezent de la http://xml.apache.org/fop/download.html. Pachetul FOP, inclusiv documentația, vine în format zip, așa că trebuie să îl extrageți mai întâi. FOP este implementat ca fișier JAR Java,

, aici voi folosi versiunea FOP 0.15.

FOP poate fi pornit din linia de comandă folosind clasa Java, la momentul scrierii apelat

org.apache.fop.apps.CommandLine. Trebuie să furnizați un parser XML - voi folosi parserul Xerces Java în fișier (se livrează cu Xalan). Să ne uităm la cum pe Windows, folosind Java, folosind FOP pentru a converti în: în acest caz, specific variabila cu cheia pentru a include fișierul, precum și cele două fișiere JAR necesare incluse în pachetul descărcabil FOP - și . (Acest exemplu presupune că toate fișierele și fișierele sunt localizate în director; dacă nu, furnizați căile lor complete.) C:\planets>java -cf fop.jar:xerces.jar:w3c.jar org.apache.fop apps. CommandLine planets.fo planets.pdf

Fișierul rezultat

, poate fi vizualizat într-un cititor de fișiere PDF Adobe Acrobat Reader, așa cum se arată în fig. 1.8. ( Acrobat PDF Reader poate fi descărcat gratuit de pe www.adobe.com/products/acrobat/readermain.html.) Documentul prezentat în figură este formatat conform unei foi de stil.

Orez. 1.8. Document PDF creat folosind obiecte de formatare


format PDF - format bun pentru a afișa obiecte de formatare, deși are o serie de limitări - de exemplu, nu este capabil să gestioneze tabelele dinamice care pot fi extinse sau restrânse la un clic de mouse sau legăturile multicast pe care se pot face clic (ambele sunt incluse în specificația de formatare obiecte). Deși XSL-FO este slab acceptat în browserele majore, acest lucru este de așteptat să se schimbe în viitor, iar browserele vor accepta XSL-FO.

Nu a trecut trei ani de când am avut ideea că este timpul să învăț XSLT -))). Ideea a apărut, dar peste tot mai exista PHP 4 și atrocitățile lui Salbotron, care, ca să spunem ușor, nu era diferit. performanta ridicata. Și era rar ca vreun browser să se laude că acceptă acest XSLT. Din aceste motive, am amânat studiul unei astfel de direcții promițătoare până la vremuri mai bune. În acest moment, putem spune cu siguranță că aceste vremuri au venit, deoarece PHP 5 a fost lansat cu suport XSLT și un sistem decent. model de obiect, iar toate browserele de top gestionează deja transformările cu încredere, trebuie doar să trimiteți XML. :)

  • http://w3c.org - comitet pentru dezvoltarea și promovarea standardelor world wide web Internet. În prezent, este sursa principală a aproape tuturor standardelor și recomandărilor orientate către web.
  • http://www.w3.org/TR/xml - specificarea limbajului de markup XML extensibil, care este baza web-ului modern. La momentul redactării, este disponibilă cea de-a cincea ediție, versiunea 1.0, precum și cea de-a doua ediție, versiunea 1.1.
  • http://www.w3.org/TR/xml-names - specificație pentru utilizarea spațiilor de nume în XML.
  • http://www.w3.org/TR/xpath - specificație pentru utilizarea limbajului XPath pentru căutarea părților unui document XML.
  • http://www.w3.org/TR/xsl/ - specificarea limbajului de stil XSL extins.
  • http://www.w3.org/TR/xslt - specificația limbajului de transformare XSLT.
  • http://validator.w3.org/ - validator HTML.
  • http://www.w3.org/TR/xhtml1/ - specificația XHTML1.0.

Traduceri în rusă:

  • http://www.rol.ru/news/it/helpdesk/xml01.htm - Extensible Markup Language XML1.0 (ediția a doua). /Radik Usmanov/
  • http://www.rol.ru/news/it/helpdesk/xnamsps.htm - Spații de nume în XML. /Radik Usmanov/
  • http://www.rol.ru/news/it/helpdesk/xpath01.htm - Limbajul XML Cale (XPath). /Radik Usmanov/
  • http://www.rol.ru/news/it/helpdesk/xslt01.htm - Limbajul de transformare XSL (XSLT). /Radik Usmanov/

Pentru a înțelege mai bine ce se întâmplă, vă recomand să citiți specificațiile în următoarea ordine:

  • XML (aceasta este baza!)
  • spații de nume (un mecanism pentru codul XML eterogen într-un singur fișier)
  • XPath (limbaj pentru selectarea elementelor dintr-un arbore de structură)
  • XSLT (transformări)
  • XHTML (la ce ar trebui să depuneți eforturi)
  • Cei care sunt deosebit de curioși pot fi atenți și la limbajul de stil extins XSL.

    2. XHTML valid

    Ce este XHTML valid? În primul rând, este un document XML care trebuie să se conformeze specificației XML. În al doilea rând, este o pagină HTML aproape obișnuită cu care toată lumea este obișnuită.

    De ce este nevoie de XHTML? Doar din motive de compatibilitate și între browsere. O pagină în XHTML va fi mai probabil să se afișeze corect în browsere populare decât HTML obișnuit.

    Pentru nituitoarea medie a paginilor, expresia document XML ar trebui să însemne următoarele:

  • Documentul conține o declarație de document XML la începutul paginii:
  • Documentul conține un element rădăcină, care conține toate celelalte.
  • Toate elementele (etichetele) trebuie să aibă o parte de închidere (
    , ).
  • Atributele au întotdeauna o semnificație, care trebuie specificată între ghilimele (single sau duble). De exemplu, .
  • Caractere de control și ,< и >ar trebui să poarte întotdeauna o deghizare. De exemplu, &. Singura excepție este , în care caracterele speciale nu trebuie să fie mascate.
  • De asemenea, XHTML în sine obligă să fie îndeplinite următoarele condiții:

  • Documentul trebuie să declare spațiul de nume în care vor fi utilizate elementele HTML.
  • Documentul trebuie să declare un DOCTYPE înaintea elementului rădăcină și să specifice unul dintre tipurile XHTML și DTD-ul corespunzător din acesta.
  • Exemplu de document XHTML1.0 simplu:

    Și așa despre totul în ordine.

    O declarație a unui document XML care specifică versiunea și codificarea acestuia.

    Declarația spațiului de nume și a limbii utilizate.

    Trei versiuni de XHTML1.0 sunt concepute pentru o mai bună compatibilitate cu versiunile inverse:

    • Strict - oferă cea mai mare conformitate cu recomandările W3C din partea browserelor. Cu toate acestea, codul HTML în sine trebuie să respecte aceste instrucțiuni.
    • Tranziția este o potrivire mai puțin strictă care face ca browserul să se comporte ca și cum ar fi un document HTML obișnuit.
    • Set de cadre - vă permite să utilizați cadre.

    XHTML1.1 este în esență același cu XHTML1.0 Strict și este destinat să înlocuiască alte versiuni de XHTML1.0. Cu toate acestea, în comparație cu XHTML1.0 Strict, are o serie de diferențe:

  • Atributul lang a fost eliminat, rolul său este jucat de xml:lang . (Modulul [ XHTMLMOD ])
  • În schimb, pentru elementele a și hartă atributul numelui trebuie să utilizați atributul id. (Modulul [ XHTMLMOD ])
  • Este disponibil un set de elemente rubin. (Modulul [RUBY])
  • Deci, dacă doriți cea mai bună compatibilitate între browsere și compatibilitate W3C, atunci XHTML1.1 este!

    Din aceste motive, rezultatul transformărilor mele va fi exact XHTML1.1.

    3. Transformări XSLT

    Ce este XSLT? Este un limbaj de transformare a documentelor XML care a fost dezvoltat ca parte a limbajului XSL (Extended Stylesheet Language).

    De ce este nevoie de XSLT? Vă permite să implementați o schemă în care datele sunt stocate separat și prezentarea lor este separată. Adică, un document XML este transformat folosind un alt document XML (XSL-ul care conține șabloanele XSLT) într-un document final. Rezultatul poate fi XML, HTML sau un document text de orice format.

    Pentru a utiliza transformările XSLT, mai întâi trebuie să generați stilul XSL corect și să îl conectați la fișierul XML.

    Un document XSL valid este un document XML care are spațiul de nume xsl specificat și are un element rădăcină foaie de stil. În cel mai simplu caz, stilul ar putea arăta astfel:

    Acest stil nu conține nicio definiție explicită a șabloanelor sau a altor elemente XSL. Cu toate acestea, poate fi deja folosit. Pentru a vedea rezultatul, generați un document XML arbitrar și atașați-i acest stil:

    Linia este responsabilă pentru conectarea stilului:

    În acest caz, codarea rezultatului va fi UTF-8, în ciuda faptului că documentul sursă a fost generat în Windows-1251. Din păcate, browserele de obicei nu vă permit să vizualizați codul în documentul rezultat, dar modulul XSLT al PHP5 face posibilă trecerea codului rezultat într-o variabilă care poate fi salvată într-un fișier. Prin urmare, folosind PHP, voi furniza codul sursă al documentului rezultat:

    Acest cod nu este un document XML valid, cu atât mai puțin XHTML1.1. Pentru a genera codul necesar, voi complica stilul XSL original și voi adăuga acolo șabloanele necesareși transformări. În acest caz, documentul XML original va rămâne neschimbat.

    Ca exemplu, voi da un stil XSL care, folosind XSLT, va afișa o listă de atribute ale documentului XML sursă cu valorile acestora, în timp ce va fi generat XHTML1.1 valid. Deci, stilul:

    Fișier - test.xsl
    Primul meu XSLT Lista mea:
  • culoare de fundal: #eee;
  • Dezvoltator analizator:

    Pentru a înțelege cum funcționează, voi descrie fiecare acțiune separat:

    Declarație de document XML:

    Un atribut necesar este definirea spațiului de nume xsl prin atributul xmlns:xsl="http://www.w3.org/1999/XSL/Transform".

    Următorul pas în element rădăcină foaia de stil declară cum ar trebui să fie format documentul rezultat:

    Principalele atribute:

    • method="xml" - metoda de ieșire a documentului. Documentul rezultat va fi în format XML.
    • encoding="windows-1251" - codificarea documentului rezultat.
    • omit-xml-declaration="no" - dacă să omiteți sau nu declarația inițială a documentului XML (). Poate avea valoarea „da” sau „nu” (relevant doar pentru html).
    • indent="yes" - formează indentări în funcție de nivelul de imbricare. Poate fi „da” sau „nu”.
    • media-type="text/xml" - tip MIME al documentului rezultat (utilizat numai pentru metoda de ieșire html).
    • doctype-public="-//W3C//DTD XHTML 1.1//EN" - tipul documentului rezultat (DOCTYPE)
    • doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" - link către DTD

    Dacă metoda de ieșire este declarată ca html, atunci valorile atributelor de codificare și tip media vor fi inserate în titlul paginii ( ... ) folosind o metaetichetă.

    Declarație șablon principală:

    Atributul xmlns="http://www.w3.org/1999/xhtml" specifică spațiul de nume xhtml care va fi aplicat implicit acestui element și tuturor elementelor copil care nu îl au specificat în mod explicit.

    Atributul xml:lang="ru" indică limba în care este generată pagina (viitorul).

    Această parte a stilului a fost necesară pentru a forma atributele codului XHTML1.1 valid.

    Acum, pentru transformările XSLT:

    Inserarea textului simplu:

    Atributul select acceptă o expresie XPath, pe baza căreia face o selecție. Dacă selecția a returnat o listă de noduri, atunci bucla începe să ruleze pentru fiecare element.

    În acest caz, selecția va returna o listă de atribute pentru această (rădăcină) și toate elementele copil.

    Verificarea starii:

    În acest caz, dacă poziția elementului este uniformă (determinată de mai mare dacă), atunci stilul elementului

  • vor fi înregistrate culoare gri fundal.

    Afișarea valorilor elementelor:

    Acest cod va insera în elementul părinte un șir compilat din numele elementului curent și valoarea acestuia. Conținutul atributului select se potrivește cu XPath.

    Dezvoltator analizator:

    Rezultatul procesării acestui stil (test.xsl) va fi următorul cod:

    Rezultat - cod sursă
    Primul meu XSLT Lista mea:
  • attr1 = Atribut principal
  • attr1 = atributul meu1
  • attr2 = atributul meu2
  • attr5 = Atribut liber
  • Dezvoltator analizator: libxslt

    Acest cod este conform standardului XHTML1.1 și a fost generat din documentul XML original. Pentru a verifica, puteți utiliza validatorul W3C, care se află la http://validator.w3.org/.

    În browser, acest cod arată cam așa:

    IE 6 FireFox 3 Opera 9.02

    Informații suplimentare despre utilizarea XSLT în PHP5 pot fi găsite la http://ru2.php.net/manual/ru/book.xslt.php.

    Gândind cu voce tare

    „Tovarăși, stăm pe marginea unui abis imens! Și îmi propun să facem un pas mare, decisiv înainte!”

    2019 Anton Pribora. Când copiați materiale de pe site, vă rugăm să furnizați un link către sursă.

    Să ne uităm la un exemplu tipic de randare HTML.

    O listă de compoziții muzicale este dată sub forma unui document XML.

    Richard Wagner Călătoria Valchiriei Edvard Grieg În Peștera Muntelui Regele Johann Bach Toccată și Fugă în re minor Antonio Vivaldi Anotimpurile. Vară. Furtuna Giuseppe Verdi Marș triumfal (Aida)

    Să afișăm acest document ca o listă HTML ul/li, așa cum se arată mai jos:

    Pentru a face acest lucru, folosim următoarea transformare XSLT:

  • Această transformare ne va returna următorul cod HTML:

    • Richard Wagner - Călătoria Valchiriei
    • Edvard Grieg - În Peștera Regelui Muntelui
    • ...

    O transformare XSLT constă din trei șabloane ( xsl:template). Fiecare șablon își servește propria esență, ceea ce ne oferă posibilitatea de a face modificări cu ușurință și face codul ușor de înțeles.

    Dacă trebuie să schimbăm afișarea listei (de exemplu, să adăugăm un atribut de clasă), atunci edităm șablonul match="PlayList".

    Dacă vrem să schimbăm afișarea elementelor listei, atunci este destul de evident că merită să schimbați șablonul match="Track".

    De fapt, XSLT nu numai că ne oferă capacitatea de a separa datele și prezentarea (aceasta este sarcina oricărui motor de șablon), dar ne permite și să separăm reprezentările diferitelor entități.

    Desigur, în cazuri mai complexe de separare, o astfel de separare poate fi dificil de realizat. Este foarte ușor să ajungeți într-o situație în care apare un „șablon divin” care face totul și, de asemenea, ar trebui să vă fie teamă să nu vă alunecați în „împușcare” cu o grămadă de șabloane mici.

    Depanare XSLT

    Ceea ce îmi place foarte mult la XSLT sunt capabilitățile sale de depanare. Depanarea vă ajută să vedeți clar logica funcționării XSTL, structura documentului și valorile variabilelor.

    De exemplu, depanarea vă va ajuta să vedeți ce fel de entitate procesează modelul match="/".

    În Visual Studio, depanarea XSLT este lansată cu comanda rapidă de la tastatură ALT+F5.

    Adăugând expresia „ . ” (punct) în fereastra Watch XPath, vom vedea că elementul actual al șablonului este rădăcina documentului. Aici puteți plasa un container div sau ceva care se referă la întregul document XML.

    Lucrul cu entități XML

    Veți observa că în exemplele de mai sus există o entitate - O putem folosi pentru că am definit-o la începutul documentului XSLT

    Astfel, - este scos ca un caracter cu cod - .

    Dacă trebuie să scoateți șirul „ca atare”, atunci ar trebui să utilizați CDATA după cum urmează:

    xsl:element text

    Vreau să vă concentrez atenția asupra elementului xsl:text. Vă permite să controlați exact ce va conține elementul TEXT. Semnificația xsl:text este evidentă în practică:

    Șablon XSLT:

  • HTML rezultat:

  • Antonio Vivaldi - Anotimpuri. Vară. Furtună
  • După cum puteți vedea din exemplul de mai sus, absența elementului xsl:text a dus la apariția unor întreruperi de linie și spații suplimentare în HTML.

    Desigur, puteți scrie XSLT fără xsl:text , astfel:

  • Un astfel de șablon este greu de citit și există o mare probabilitate ca erori să apară în el în timpul întreținerii.

    Ar trebui să încercați să vă asigurați că formatarea șablonului XSLT nu afectează rezultatul transformării. Acesta este motivul pentru care cred că utilizarea xsl:text este o practică bună.

    Ramificare

    Există elemente speciale pentru ramificare în XSLT: xsl:if și xsl:choose. Dar cred că aceste instrumente sunt foarte folosite. O tehnică mai interesantă este cea care vă permite să evitați aglomerarea șablonului cu ramuri.

    Să ne uităm la un exemplu de implementare a ramurilor:

    Să completăm exemplul anterior cu posibilitatea de a afișa mesajul „Lista este goală” dacă Lista de redare nu conține elemente de piesă.

    Soluția folosind xsl:choose ar fi:

  • O soluție care folosește un șablon suplimentar ar fi:

  • A doua soluție, după părerea mea, arată mai bine: noua funcționalitate nu a adăugat cod nou la vechile șabloane, șablon nou Izolat pe cât posibil.

    Dacă trebuie să adăugați o imagine la un mesaj despre o listă goală, atunci în primul caz elementul xsl:when din șablonul match="PlayList" se va umfla cel mai probabil. Dar, în al doilea caz, modificările se vor face doar într-un șablon specializat.

    În exemplul anterior, am separat două ramuri complet diferite pentru redarea unui element de listă. Dar dacă ramurile diferă doar puțin? Aici utilizarea xsl:if și xsl:choose este destul de justificată. Dar aș dori să arăt o abordare diferită: utilizarea parametrului mode pe elementul xsl:template.

    În exemplul următor, vom atribui diferite stiluri elementelor pare și impare ale listei.

  • chiar ciudat

    Bucle și sortare în XSLT

    XSLT are un element xsl:for-each pentru bucle, dar un efect similar poate fi obținut folosind xsl:apply-templates obișnuit.

    Vom afișa o listă de melodii sortate după durată.

    • Richard Wagner - Călătoria Valchiriei - 280
    • Antonio Vivaldi - Anotimpuri. Vară. Furtuna - 203
    • Johann Bach - Toccata si fuga in re minor - 187
    • Edvard Grieg - În Peștera Regelui Muntelui - 163
    • Giuseppe Verdi - Marș triumfal (Aida) - 103

  • După cum puteți vedea din cod, prima opțiune este mai scurtă și mai simplă, dar încalcă principiul separării preocupărilor pentru șabloane. Șablonul match="PlayList" conține acum logica pentru afișarea elementului Track.

    S-ar părea că nu este mare lucru, dar imaginați-vă o problemă în care lista conține compoziții cu și fără Id. Pentru compoziția cu Id, trebuie să redați linkul, iar în rest, să afișați doar textul.

    Opțiune folosind xsl:for-each:

    Opțiune folosind xsl:apply-templates:

  • În cazul xsl:for-each, trebuia să adăugăm o ramură, iar în cazul xsl:apply-templates, trebuia să adăugăm un nou șablon.

    Dacă șablonul de potrivire="PlayList" conținea deja ramuri și logică, ne-ar lua ceva timp să ne dăm seama exact unde trebuie să inserăm ramura. Opțiunea xsl:apply-templates nu are acest dezavantaj, deoarece declarăm doar un șablon nou și nu încercăm să le implementăm pe cele vechi.

    Folosirea xsl:for-each are un alt pericol mare. Dacă vedeți o bucată aleatorie de cod în interiorul unui model de potrivire="PlayList", presupuneți că elementul curent este o listă de redare, dar xsl:for-each modifică contextul. Văzând următorul cod:

    Va trebui să te uiți îndeaproape la context pentru a înțelege acel select="." selectează de fapt piesa curentă.

    Șablonul mode="TrackName" match="Track" a fost adăugat pentru a evita duplicarea codului care afișează titlul. Nu am făcut asta înainte pentru că nu era necesar. De îndată ce am observat duplicarea, am refactorizat și am mutat logica generală de afișare într-un șablon nou.

    xsl:for-each este o modalitate de a evita crearea de entități. Pur și simplu adăugați logica de afișare în interiorul xsl:for-each și totul funcționează excelent. Problemele încep mai târziu, când corpul buclei crește, iar refactorizarea xsl:for-each este mult mai dificilă decât eliminarea codului duplicat.

    Concluzie

    XSLT este un instrument destul de flexibil; vă permite să vă rezolvați problema în moduri diferite. Cu toate acestea, atunci când scrieți XSLT, ar trebui să acordați o atenție deosebită posibilității de întreținere a șablonului.

    Sper că sfaturile mele practice vă vor ajuta să scrieți un cod mai ușor de înțeles.