ΚΕΝΤΡΟ ΠΛΗ.ΝΕ.Τ. Ν. ΦΛΩΡΙΝΑΣ

Η Γλώσσα XSL (eXtensible Stylesheet Language)

 

Εισαγωγή στην XSL

Η XSL (eXtensible Stylesheet Language), η εκτεταμένη γλώσσα φύλλων στυλ της XML, είναι πολύ περισσότερο σύνθετη από τα διαδοχικά φύλλα στυλ CSS (Cascading Style Sheets).

Τα CSS είναι το Φύλλο Στυλ (Style Sheet) της HTML

Επειδή η HTML χρησιμοποιεί προκαθορισμένα tags, οι έννοιες αυτών των tags μάς είναι εύκολα κατανοητές : για παράδειγμα, γνωρίζουμε ότι το στοιχείο <p> ορίζει μια παράγραφο και ότι το στοιχείο <h1> ορίζει μια επικεφαλίδα (heading) πρώτου επιπέδου, ενώ ο φυλλομετρητής (browser) γνωρίζει πώς πρέπει να εμφανίσει αυτά τα στοιχεία.

Η πρόσθεση χαρακτηριστικών στυλ εμφάνισης στα στοιχεία της HTML με τα CSS είναι μια απλή διαδικασία. Το να πούμε στον φυλλομετρητή να εμφανίσει το κάθε στοιχείο χρησιμοποιώντας μια διαφορετική γραμματοσειρά ή ένα διαφορετικό χρώμα, είναι εύκολο να το κάνουμε και εύκολο να το κατανοήσει ένας φυλλομετρητής.

Η XSL είναι το Φύλλο Στυλ (Style Sheet) της XML

Επειδή η XML δεν χρησιμοποιεί προκαθορισμένα tags, αλλά μπορούμε να χρησιμοποιήσουμε εμείς ό,τι tags θέλουμε, οι έννοιες αυτών των tags δεν είναι κατανοητές : για παράδειγμα, το <table> μπορεί να σημαίνει έναν πίνακα της HTML ή ένα τραπέζι. Εξαιτίας της φύσης της XML, ο φυλλομετρητής δεν είναι σε θέση να γνωρίσει πώς πρέπει να εμφανίσει ένα XML έγγραφο.

Για να μπορέσουμε να εμφανίσουμε τα XML έγγραφα, είναι απαραίτητο να διαθέτουμε έναν μηχανισμό που να περιγράφει το πώς πρέπει να εμφανισθούν τα έγγραφα. Ένας απ’ αυτούς τους μηχανισμούς είναι τα CSS, αλλά η XSL (eXtensible Stylesheet Language) είναι η προτειμόμενη γλώσσα φύλλων στυλ της XML και η XSL είναι πολύ περισσότερο εξεζητημένη από τα CSS, τα οποία χρησιμοποιούνται από την HTML.

Η XSL είναι κάτι περισσότερο από ένα φύλλο στυλ (style sheet) και αποτελείται από τα εξής τρία μέρη :

Αν δεν καταλαβαίνετε το τι σημαίνουν όλα αυτά, φανταστείτε την XSL σαν μια γλώσσα που μπορεί να μετασχηματίσει την XML σε HTML, μια γλώσσα που μπορεί να φιλτράρει και να ταξινομήσει τα δεδομένα της XML, μια γλώσσα που μπορεί να έχει πρόσβαση σε τμήματα ενός XML εγγράφου, μια γλώσσα που μπορεί να μορφοποιήσει τα δεδομένα της XML βασισμένη στις τιμές των δεδομένων, όπως την εμφάνιση των αρνητικών αριθμών με κόκκινο και μια γλώσσα που μπορεί να εξάγει τα XML δεδομένα σε διαφορετικές συσκευές, όπως οθόνη, χαρτί ή φωνή.

Η XSL είναι ένα στάνταρτ που έχει συσταθεί από το World Wide Web Consortium (W3C). Τα πρώτα δύο τμήματα της γλώσσας αποτέλεσαν μια σύσταση (Recommendation) του W3C τον Νοέμβριο του 1999. Η πλήρης σύσταση της XSL που περιελάμβανε τη μορφοποίηση (formatting) της XSL έγινε υποψήφια για σύσταση (Candidate Recommendation) στο W3C τον Νοέμβριο του 2000.

 

Οι Γλώσσες της XSL

Η  XSL ουσιαστικά αποτελείται από τρεις γλώσσες, η σπουδαιότερη από τις οποίες είναι η XSLT :

Η XSLT είναι μια γλώσσα για τον μετασχηματισμό των XML εγγράφων σ’ άλλα είδη εγγράφων ή σ’ άλλα XML έγγραφα.

Η XPath είναι μια γλώσσα για να έχουμε πρόσβαση στα τμήματα ενός XML εγγράφου και σχεδιάστηκε για να χρησιμοποιηθεί από την XSLT.

Η μορφοποίηση (formatting) είναι η διαδικασία της μετατροπής του αποτελέσματος ενός μετασχηματισμού της XSL σε μια κατάλληλη μορφή εξόδου για έναν αναγνώστη ή ακροατή.

Η XSLT και η XPath παρουσιάστηκαν σαν δύο ξεχωριστές συστάσεις (Recommendations) του W3C στις 16 Νοεμβρίου 1999. Δεν υπάρχει κάποιο ξεχωριστό έγγραφο του W3C για τα XSL Formatting Objects, αλλά υπάρχει μια περιγραφή μέσα στη σύσταση XSL 1.0.

 

Η XSLT (XSL Transformations)

Η XSLT αποτελεί το σημαντικότερο κομμάτι του XSL στάνταρτ. Είναι το μέρος εκείνο της XSL που χρησιμοποιείται για να μετασχηματίσει ένα XML έγγραφο σ’ ένα άλλο XML έγγραφο ή σ’ έναν άλλον τύπο εγγράφου.

Η XSLT μπορεί να χρησιμοποιηθεί για να μετασχηματίσουμε ένα XML έγγραφο σε μια μορφή (format) που να αναγνωρίζεται από έναν φυλλομετρητή (browser). Μια τέτοια μορφή, ως γνωστόν, είναι η HTML. Κανονικά η XSLT το κάνει αυτό μετασχηματίζοντας το κάθε στοιχείο της XML σ’ ένα στοιχείο της HTML.

Η XSLT μπορεί επίσης να προσθέσει τελείως καινούργια στοιχεία στο αρχείο εξόδου ή να αφαιρέσει στοιχεία. Μπορεί να αναδιατάξει και να ταξινομήσει τα στοιχεία, να κάνει δοκιμές και να πάρει αποφάσεις για το ποια στοιχεία να εμφανίσει και πολλά άλλα.

Ένας κοινός τρόπος για να περιγράψουμε αυτή τη διαδικασία μετασχηματισμού είναι να πούμε ότι η XSL χρησιμοποιεί την XSLT για να μετασχηματίσει ένα πηγαίο δένδρο (source tree) της XML σ’ ένα δένδρο αποτελέσματος (result tree) της XML ή ένα πηγαίο έγγραφο (source document) της XML σ’ ένα έγγραφο αποτελέσματος (result document) της XML.

            Κατά τη διαδικασία του μετασχηματισμού, η XSLT χρησιμοποιεί την XPath για να ορίσει τμήματα του πηγαίου εγγράφου που ταιριάζουν μ’ ένα ή περισσότερα προκαθορισμένα πρότυπα (templates). Όταν βρεθεί ένα ταίριασμα, η XSLT θα μετασχηματίσει το τμήμα του πηγαίου εγγράφου που ταιριάζει στο προκύπτον έγγραφο. Τα τμήματα του πηγαίου εγγράφου που δεν ταιριάζουν μ’ ένα πρότυπο θα πάνε (σαν ένας γενικός κανόνας) αμετάβλητα στο αποτέλεσμα.

Θα επικεντρωθούμε στην XSLT και στην XPath. Θα χρησιμοποιήσουμε την XSLT για να ορίσουμε τους μετασχηματισμούς της XML και την XPath για να ορίσουμε τα πρότυπα που ταιριάζουν για τους μετασχηματισμούς. Αν και η XSL αποτελείται από τρία διαφορετικά τμήματα με τρία διαφορετικά ονόματα, θα χρησιμοποιούμε τον γενικό όρο XSL.

 

Οι Φυλλομετρητές (Browsers) της XSL

Πολύ λίγοι φυλλομετρητές υποστηρίζουν την XSL προς το παρόν. Εδώ θα χρησιμοποιήσουμε τον Internet Explorer 5.0 για να παρουσιάσουμε την XSL.

Ο XML Parser του Internet Explorer

Για να μπορέσουμε να επεξεργαστούμε ένα έγγραφο της XML χρησιμοποιώντας την XSL, χρειαζόμαστε έναν XML parser με μια XSL Engine. Ο Internet Explorer 5.0 είναι προς το παρόν ο μοναδικός ευρέως αποδεκτός φυλλομετρητής που περιέχει έναν XML parser μαζί με μια XSL engine.

Η XSL Engine του Internet Explorer

Η XSL στον Internet Explorer 5.0 δεν είναι 100% συμβατή (compatible) με το τελευταίο XSL στάνταρτ του W3C.

 

XSL – Μετασχηματισμός (Transformation)

Παράδειγμα προς μελέτη : Πώς να μετασχηματίσουμε την XML σε HTML χρησιμοποιώντας την XSL. Οι λεπτομέρειες αυτού του παραδείγματος θα επεξηγηθούν παρακάτω.

Αρχικά ξεκινάμε με το XML έγγραφο που θέλουμε να μετασχηματίσουμε σε HTML :

<?xml version="1.0"?>

<CATALOG>

<CD>

<TITLE> Empire Burlesque </TITLE>

<ARTIST> Bob Dylan </ARTIST>

<COUNTRY> USA </COUNTRY>

<COMPANY> Columbia </COMPANY>

<PRICE> 10.90 </PRICE>

<YEAR> 1985 </YEAR>

</CD>

.

.

.

Μετά δημιουργούμε ένα έγγραφο XSL Style Sheet μ’ ένα πρότυπο μετασχηματισμού (transformation template) :

                    <?xml version='1.0'?>

                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

                    <xsl:template match="/">

                      <html>

                      <body>

                        <table border="2" bgcolor="yellow">

                          <tr>

                            <th> Title </th>

                            <th> Artist </th>

                          </tr>

                          <xsl:for-each select="CATALOG/CD">

                          <tr>

                            <td><xsl:value-of select="TITLE"/></td>

                            <td><xsl:value-of select="ARTIST"/></td>

                          </tr>

                          </xsl:for-each>

                        </table>

                      </body>

                      </html>

                    </xsl:template>

                    </xsl:stylesheet>

Μετά προσθέτουμε μια αναφορά για το XSL Style Sheet έγγραφο μέσα στο XML έγγραφο :

                    <?xml version="1.0"?>

                    <?xml-stylesheet type="text/xsl" href="cd_catalog.xsl"?>

                    <CATALOG>

                      <CD>

                        <TITLE> Empire Burlesque </TITLE>

                        <ARTIST> Bob Dylan </ARTIST>

                        <COUNTRY> USA </COUNTRY>

                        <COMPANY> Columbia </COMPANY>

                        <PRICE> 10.90 </PRICE>

                        <YEAR> 1985 </YEAR>

                      </CD>

                    .

                    .

                    .

Αν διαθέτουμε έναν φυλλομετρητή που να είναι συμβατός (compliant) με την XSL, όπως είναι ο Internet Explorer 5.0 ή νεώτερος, ο φυλλομετρητής θα μετατρέψει πολύ ωραία την XML σε HTML.

 

Τα Πρότυπα (Templates) της XSL

Η XSL χρησιμοποιεί Πρότυπα (Templates) για να περιγράψει πώς να δημιουργήσει την XML.

Τα CSS χρησιμοποιούν Κανόνες (Rules)

Τα CSS χρησιμοποιούν κανόνες (rules) για να ορίσουν την έξοδο (το αποτέλεσμα) των στοιχείων της HTML. Ένας επιλογέας (selector) χρησιμοποιείται για να συσχετίσει τον κανόνα μ’ ένα στοιχείο της HTML. Για παράδειγμα, ο επιλογέας p στον επόμενο CSS κανόνα λέει ότι ένα στοιχείο <p> πρέπει να εμφανισθεί χρησιμοποιώντας τη γραμματοσειρά arial :

p { font-family: arial }

Η XSL χρησιμοποιεί Πρότυπα (Templates)

Η XSL χρησιμοποιεί ένα ή περισσότερα πρότυπα (templates) για να ορίσει πώς να δημιουργήσει (εξάγει) τα στοιχεία της XML. Χρησιμοποιείται ένα χαρακτηριστικό (attribute) match για να συσχετίσει το πρότυπο μ’ ένα στοιχείο της XML. Το χαρακτηριστικό match μπορεί επίσης να χρησιμοποιηθεί για να ορίσει ένα πρότυπο για ένα ολόκληρο κομμάτι του XML εγγράφου.

Το επόμενο XSL Style Sheet περιέχει ένα πρότυπο για να δημιουργήσει το XML CD Catalog από την προηγούμενη παράγραφο :

                    <?xml version='1.0'?>

                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

                    <xsl:template match="/">

                     <html>

                     <body>

                       <table border="1">

                         <tr>

                           <th> Title </th>

                           <th> Artist </th>

                         </tr>

                         <tr>

                           <td> . </td>

                           <td> . </td>

                         </tr>

                       </table>

                     </body>

                     </html>

                    </xsl:template>

                    </xsl:stylesheet>

Εφόσον το style sheet αποτελεί το ίδιο ένα XML έγγραφο, το έγγραφο ξεκινάει με μια xml δήλωση (declaration) : <?xml version='1.0'?>. Το tag xsl:stylesheet στην δεύτερη γραμμή ορίζει την αρχή του stylesheet.

Το tag xsl:template στην τρίτη γραμμή ορίζει την αρχή ενός προτύπου. Το χαρακτηριστικό match="/" του template συσχετίζει (ταιριάζει) το πρότυπο με τη ρίζα (root, /) του πηγαίου XML εγγράφου.

Το υπόλοιπο του εγγράφου περιέχει το ίδιο το πρότυπο, εκτός από τις δύο τελευταίες γραμμές που ορίζουν το τέλος του προτύπου και το τέλος του style sheet.

Το αποτέλεσμα του μετασχηματισμού θα μοιάζει ως εξής :

Title     Artist

.            .

 

Το Στοιχείο <xsl:value-of>

Το αποτέλεσμα από το προηγούμενο παράδειγμα ήταν λίγο απογοητευτικό επειδή δεν αντιγράφηκαν καθόλου δεδομένα από το XML έγγραφο στην έξοδο (output).

Το στοιχείο <xsl:value-of> της XSL μπορεί να χρησιμοποιηθεί για να επιλέξουμε στοιχεία της XML στο ρεύμα εξόδου (output stream) του μετασχηματισμού της XSL :

                    <?xml version='1.0'?>

                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

                    <xsl:template match="/">

                     <html>

                     <body>

                       <table border="1">

                         <tr>

                           <th> Title </th>

                           <th> Artist </th>

                         </tr>

                         <tr>

                        <td><xsl:value-of select="CATALOG/CD/TITLE"/></td>

                        <td><xsl:value-of select="CATALOG/CD/ARTIST"/></td>

                         </tr>

                       </table>

                     </body>

                     </html>

                    </xsl:template>

                    </xsl:stylesheet>

Η σύνταξη για την τιμή του χαρακτηριστικού select αποκαλείται ένα XSL Pattern και δουλεύει σαν να πλοηγούμαστε σ’ ένα σύστημα αρχείων όπου μια κάθετος / επιλέγει υποκαταλόγους (subdirectories).

Το αποτέλεσμα του μετασχηματισμού θα είναι το εξής :

Title                             Artist

Empire Burlesque     Bob Dylan

 

Το Στοιχείο <xsl:for-each>

Το αποτέλεσμα από το προηγούμενο παράδειγμα ήταν επίσης απογοητευτικό επειδή μόνο μία γραμμή δεδομένων αντιγράφηκε από το XML έγγραφο στην έξοδο.

Το στοιχείο <xsl:for-each> της XSL μπορεί να χρησιμοποιηθεί για να επιλέξουμε όλα τα στοιχεία της XML στο ρεύμα εξόδου (output stream) του μετασχηματισμού της XSL :

                    <?xml version='1.0'?>

                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

                    <xsl:template match="/">

                      <html>

                      <body>

                        <table border="1">

                          <tr>

                            <th> Title </th>

                            <th> Artist </th>

                          </tr>

                          <xsl:for-each select="CATALOG/CD">

                          <tr>

                            <td><xsl:value-of select="TITLE"/></td>

                            <td><xsl:value-of select="ARTIST"/></td>

                          </tr>

                          </xsl:for-each>

                        </table>

                      </body>

                      </html>

                    </xsl:template>

                    </xsl:stylesheet>

Το στοιχείο xsl:for-each εντοπίζει στοιχεία στο XML έγγραφο και επαναλαμβάνει ένα τμήμα του προτύπου (template) για το καθένα.

Το αποτέλεσμα του μετασχηματισμού θα είναι το εξής :

Title                        Artist
Empire Burlesque Bob Dylan
Hide your heart Bonnie Tyler
Greatest Hits Dolly Parton
Still got the blues Gary More
Eros Eros Ramazzotti
One night only Bee Gees
Sylvias Mother Dr.Hook
Maggie May Rod Stewart
Romanza Andrea Bocelli
When a man loves a woman Percy Sledge
Black angel Savage Rose
1999 Grammy Nominees Many
For the good times Kenny Rogers
Big Willie style Will Smith
Tupelo Honey Van Morrison
Soulsville Jorn Hoel
The very best of Cat Stevens
Stop Sam Brown
Bridge of Spies T`Pau
Private Dancer Tina Turner
Midt om natten Kim Larsen
Pavarotti Gala Concert Luciano Pavarotti
The dock of the bay Otis Redding
Picture book Simply Red
Red The Communards
Unchain my heart Joe Cocker

                   

Η XSL στην Πλευρά του Πελάτη (On the Client)

Αν ο φυλλομετρητής μας υποστηρίζει την XML, η XSL μπορεί να χρησιμοποιηθεί για να μετασχηματίσει το έγγραφο σε μορφή HTML στον φυλλομετρητή. Στα προηγούμενα, επεξηγήσαμε πώς μπορεί να χρησιμοποιηθεί η XSL για να μετασχηματίσουμε ένα έγγραφο από XML σε HTML. Το κόλπο ήταν να προσθέσουμε ένα XSL stylesheet στο XML αρχείο και να αφήσουμε τον φυλλομετρητή να κάνει τον μετασχηματισμό.

Ακόμη και αν αυτό δουλέψει εντάξει, δεν είναι πάντα επιθυμητό να συμπεριλάβουμε μια stylesheet αναφορά (reference) στο XML αρχείο και η λύση δεν θα δουλέψει σ’ έναν φυλλομετρητή που δεν υποστηρίζει την XSL. Μια πιο ευέλικτη λύση θα ήταν να χρησιμοποιήσουμε ένα script της JavaScript για να κάνουμε τον μετασχηματισμό από XML σε HTML.

Χρησιμοποιώντας την JavaScript, είμαστε πιο ανοικτοί για τις εξής δυνατότητες :

Αυτή είναι η ομορφιά της XSL. Ένας από τους στόχους σχεδίασης (design goals) για την XSL ήταν το να μπορεί να μετασχηματίσει δεδομένα από μια μορφή σε μια άλλη, υποστηρίζοντας διαφορετικούς φυλλομετρητές και διαφορετικές ανάγκες χρηστών.

Ο XSL μετασχηματισμός (transformation) στην πλευρά του πελάτη (client side) είναι σίγουρο ότι θα αποτελέσει ένα βασικό κομμάτι των εργασιών των φυλλομετρητών στο μέλλον καθώς θα δούμε μια αύξηση στην εξειδικευμένη αγορά φυλλομετρητών, όπως σύστημα Braille, Speaking Web, Web Printers, Handheld PCs, Mobile Phones κ.ά.

 

Το Αρχείο XML και το Αρχείο XSL

Ας ρίξουμε πάλι μια κανούργια ματιά στο XML έγγραφο που είδαμε στα προηγούμενα :

                    <?xml version="1.0"?>

                    <CATALOG>

                      <CD>

                        <TITLE> Empire Burlesque </TITLE>

                        <ARTIST> Bob Dylan </ARTIST>

                        <COUNTRY> USA </COUNTRY>

                        <COMPANY> Columbia </COMPANY>

                        <PRICE> 10.90 </PRICE>

                        <YEAR> 1985 </YEAR>

                      </CD>

                    .

                    .

                    .

Και το συνοδευτικό XSL stylesheet :

                    <?xml version='1.0'?>

                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

                    <xsl:template match="/">

                      <html>

                      <body>

                        <table border="2" bgcolor="yellow">

                          <tr>

                            <th> Title </th>

                            <th> Artist </th>

                          </tr>

                          <xsl:for-each select="CATALOG/CD">

                          <tr>

                            <td><xsl:value-of select="TITLE"/></td>

                            <td><xsl:value-of select="ARTIST"/></td>

                          </tr>

                          </xsl:for-each>

                        </table>

                      </body>

                      </html>

                    </xsl:template>

                    </xsl:stylesheet>

Το XML αρχείο δεν περιέχει μια αναφορά (reference) προς το XSL αρχείο και το XSL αρχείο δεν περιέχει μια αναφορά προς το XML αρχείο. Η παραπάνω πρόταση δείχνει ότι ένα XML μπορεί να μετασχηματιστεί χρησιμοποιώντας πολλά διαφορετικά XSL αρχεία.

 

Μετασχηματισμός XML σε HTML στον Φυλλομετρητή

Ακολουθεί ο απλός πηγαίος κώδικας που χρειαζόμαστε για να μετασχηματίσουμε το αρχείο XML σε HTML στην πλευρά του πελάτη (on the client) :

<html>

<body>

<script language="javascript">

// Φόρτωση της XML

var xml = new ActiveXObject("Microsoft.XMLDOM")

xml.async = false

xml.load("cd_catalog.xml")

// Φόρτωση της XSL

var xsl = new ActiveXObject("Microsoft.XMLDOM")

xsl.async = false

xsl.load("cd_catalog.xsl")

// Μετασχηματισμός

document.write(xml.transformNode(xsl))

</script>

</body>

</html>

Το πρώτο μπλοκ κώδικα δημιουργεί ένα στιγμιότυπο (instance) του Microsoft XML parser (XMLDOM) και φορτώνει το XML έγγραφο στη μνήμη. Το δεύτερο μπλοκ κώδικα δημιουργεί ένα ακόμη στιγμιότυπο του parser και φορτώνει το XSL έγγραφο στη μνήμη. Η τελευταία γραμμή του κώδικα μετασχηματίζει το XML έγγραφο χρησιμοποιώντας το XSL έγγραφο και γράφει το αποτέλεσμα στο HTML έγγραφο.

 

Η XSL στην Πλευρά του Διακομιστή (On the Server)

Εφόσον δεν υποστηρίζουν όλοι οι φυλλομετρητές την XML και την XSL, μια λύση θα ήταν να μετασχηματίσουμε την XML σε HTML στον server. Στο προηγούμενο παράδειγμα εξηγήσαμε πώς μπορεί να χρησιμοποιηθεί η XSL για να μετασχηματίσουμε ένα έγγραφο από XML σε HTML στον φυλλομετρητή. Το κόλπο είναι να αφήσουμε την JavaScript να χρησιμοποιήσει έναν XML parser για να κάνει τον μετασχηματισμό.

Αυτή η λύση δεν θα δουλέψει μ’ έναν φυλλομετρητή που δεν υποστηρίζει έναν XML parser. Για να κάνουμε διαθέσιμα τα δεδομένα της XML σ’ όλα τα είδη φυλλομετρητών, πρέπει να μετασχηματίσουμε το XML έγγραφο στον SERVER και να το στείλουμε σαν καθαρή HTML στον BROWSER.

Αυτή είναι άλλη μια ομορφιά της XSL. Ένας από τους σχεδιαστικούς στόχους (design goals) της XSL ήταν το να μπορεί να μετασχηματίσει δεδομένα από μια μορφή (format) σε μια άλλη σ’ έναν server, επιστρέφοντας κατανοητά (readable) δεδομένα σ’ όλα τα είδη των μελλοντικών φυλλομετρητών.

Ο XSL μετασχηματισμός (transformation) στην πλευρά του διακομιστή (server side) είναι σίγουρο ότι θα αποτελέσει ένα βασικό κομμάτι των εργασιών των Internet Information Servers στο μέλλον καθώς θα δούμε μια αύξηση στην εξειδικευμένη αγορά φυλλομετρητών, όπως σύστημα Braille, Speaking Web, Web Printers, Handheld PCs, Mobile Phones κ.ά.

 

Το Αρχείο XML και το Αρχείο XSL

Ας ρίξουμε πάλι μια ματιά στο XML έγγραφο που είδαμε στα προηγούμενα :

                    <?xml version="1.0"?>

                    <CATALOG>

                      <CD>

                        <TITLE> Empire Burlesque </TITLE>

                        <ARTIST> Bob Dylan </ARTIST>

                        <COUNTRY> USA </COUNTRY>

                        <COMPANY> Columbia </COMPANY>

                        <PRICE> 10.90 </PRICE>

                        <YEAR> 1985 </YEAR>

                      </CD>

                    .

                    .

                    .

Και το συνοδευτικό XSL stylesheet :

                    <?xml version='1.0'?>

                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

                    <xsl:template match="/">

                      <html>

                      <body>

                        <table border="2" bgcolor="yellow">

                          <tr>

                            <th> Title </th>

                            <th> Artist </th>

                          </tr>

                          <xsl:for-each select="CATALOG/CD">

                          <tr>

                            <td><xsl:value-of select="TITLE"/></td>

                            <td><xsl:value-of select="ARTIST"/></td>

                          </tr>

                          </xsl:for-each>

                        </table>

                      </body>

                      </html>

                    </xsl:template>

                    </xsl:stylesheet>

Το XML αρχείο δεν περιέχει μια αναφορά (reference) προς το XSL αρχείο και το XSL αρχείο δεν περιέχει μια αναφορά προς το XML αρχείο. Η παραπάνω πρόταση δείχνει ότι ένα XML αρχείο στον server μπορεί να μετασχηματιστεί χρησιμοποιώντας πολλά διαφορετικά XSL αρχεία.

 

Μετασχηματισμός XML σε HTML στον Server

Ακολουθεί ο απλός πηγαίος κώδικας (source code) που χρειάζεται για να μετασχηματίσουμε το XML αρχείο σε HTML στον server :

<%

'Φόρτωση της XML

set xml = Server.CreateObject("Microsoft.XMLDOM")

xml.async = false

xml.load(Server.MapPath("cd_catalog.xml"))

'Φόρτωση της XSL

set xsl = Server.CreateObject("Microsoft.XMLDOM")

xsl.async = false

xsl.load(Server.MapPath("cd_catalog.xsl"))

'Μετασχηματισμός του αρχείου

Response.Write(xml.transformNode(xsl))

%>

Το παραπάνω παράδειγμα είναι ένα ASP αρχείο και ο κώδικας είναι σε VBScript.

Το πρώτο μπλοκ κώδικα δημιουργεί ένα στιγμιότυπο (instance) του Microsoft XML parser (XMLDOM) και φορτώνει το XML έγγραφο στη μνήμη. Το δεύτερο μπλοκ κώδικα δημιουργεί ένα ακόμη στιγμιότυπο του parser και φορτώνει το XSL έγγραφο στη μνήμη. Η τελευταία γραμμή του κώδικα μετασχηματίζει το XML έγγραφο χρησιμοποιώντας το XSL έγγραφο και γράφει το αποτέλεσμα στον φυλλομετρητή.

 

XSL Sort

Η XSL μπορεί να χρησιμοποιηθεί για να ταξινομήσουμε (sort) ένα XML έγγραφο.Ας δούμε για άλλη μια φορά το XML έγγραφο που είδαμε στα προηγούμενα :

                    <?xml version="1.0"?>

                    <CATALOG>

                      <CD>

                        <TITLE> Empire Burlesque </TITLE>

                        <ARTIST> Bob Dylan </ARTIST>

                        <COUNTRY> USA </COUNTRY>

                        <COMPANY> Columbia </COMPANY>

                        <PRICE> 10.90 </PRICE>

                        <YEAR> 1985 </YEAR>

                      </CD>

                    .

                    .

                    .

Για να εξάγουμε αυτό το XML αρχείο σαν ένα κανονικό HTML αρχείο και να το ταξινομήσουμε συγχρόνως, απλά προσθέτουμε ένα χαρακτηριστικό order-by στο στοιχείο for-each του XSL αρχείου, ως εξής :

<xsl:for-each select="CATALOG/CD" order-by="+ ARTIST">

Το χαρακτηριστικό order-by παίρνει ένα σύμβολο (+) ή minus (-), για να ορίσει μια αύξουσα ή φθίνουσα σειρά ταξινόμησης και ένα όνομα στοιχείου για να ορίσει το στοιχείο ταξινόμησης (sort element).

Ας δούμε τώρα το ελαφρά τροποποιημένο XSL stylesheet :

                    <?xml version='1.0'?>

                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

                    <xsl:template match="/">

                      <html>

                      <body>

                        <table border="2" bgcolor="yellow">

                          <tr>

                            <th> Title </th>

                            <th> Artist </th>

                          </tr>

                          <xsl:for-each select="CATALOG/CD"

                                    order-by="+ ARTIST">

                          <tr>

                            <td><xsl:value-of select="TITLE"/></td>

                            <td><xsl:value-of select="ARTIST"/></td>

                          </tr>

                          </xsl:for-each>

                        </table>

                      </body>

                      </html>

                    </xsl:template>

                    </xsl:stylesheet>

Ακολουθεί ο απλός πηγαίος κώδικας (source code) που χρειάζεται για να μετασχηματίσουμε το XML αρχείο σε HTML στον φυλλομετρητή μας :

<html>

<body>

<script language="javascript">

// Φόρτωση της XML

var xml = new ActiveXObject("Microsoft.XMLDOM")

xml.async = false

xml.load("cd_catalog.xml")

// Φόρτωση της XSL

var xsl = new ActiveXObject("Microsoft.XMLDOM")

xsl.async = false

xsl.load("cd_catalog_sort.xsl")

// Μετασχηματισμός

document.write(xml.transformNode(xsl))

</script>

</body>

</html>

 

XSL Filter Query

Η XSL μπορεί να χρησιμοποιηθεί για να φιλτράρουμε ένα XML αρχείο. Ας δούμε για άλλη μια φορά το XML έγγραφο που είδαμε στα προηγούμενα :

                    <?xml version="1.0"?>

                    <CATALOG>

                      <CD>

                        <TITLE> Empire Burlesque </TITLE>

                        <ARTIST> Bob Dylan </ARTIST>

                        <COUNTRY> USA </COUNTRY>

                        <COMPANY> Columbia </COMPANY>

                        <PRICE> 10.90 </PRICE>

                        <YEAR> 1985 </YEAR>

                      </CD>

                    .

                    .

                    .

Για να φιλτράρουμε το XML αρχείο, απλά προσθέτουμε ένα φίλτρο στο χαρακτηριστικό select στο στοιχείο for-each του XSL αρχείου, ως εξής :

<xsl:for-each select="CATALOG/CD[ARTIST='Bob Dylan']">

Οι έγκυροι τελεστές φίλτρων (filter operators) είναι οι εξής :

=  (ίσο με)

!= (όχι ίσο με)

&lt; (μικρότερο από)

&gt; (μεγαλύτερο από)

Ας δούμε τώρα το ελαφρά τροποποιημένο XSL stylesheet :

                    <?xml version='1.0'?>

                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

                    <xsl:template match="/">

                     <html>

                     <body>

                      <table border="2" bgcolor="yellow">

                       <tr>

                        <th> Title </th>

                        <th> Artist </th>

                       </tr>

                     <xsl:for-each select="CATALOG/CD[ARTIST='Bob Dylan']">

                       <tr>

                        <td><xsl:value-of select="TITLE"/></td>

                        <td><xsl:value-of select="ARTIST"/></td>

                       </tr>

                       </xsl:for-each>

                      </table>

                     </body>

                     </html>

                    </xsl:template>

                    </xsl:stylesheet>

Ακολουθεί ο απλός πηγαίος κώδικας (source code) που χρειάζεται για να μετασχηματίσουμε το XML αρχείο σε HTML στον φυλλομετρητή μας :

<html>

<body>

<script language="javascript">

// Φόρτωση της XML

var xml = new ActiveXObject("Microsoft.XMLDOM")

xml.async = false

xml.load("cd_catalog.xml")

// Φόρτωση της XSL

var xsl = new ActiveXObject("Microsoft.XMLDOM")

xsl.async = false

xsl.load("cd_catalog_filter.xsl")

// Μετασχηματισμός

document.write(xml.transformNode(xsl))

</script>

</body>

</html>

 

XSL Conditional IF

Η XSL μπορεί να χρησιμοποιήσει μια δοκιμή με την εντολή IF για να φιλτράρει πληροφορίες από ένα XML έγγραφο.

                    <?xml version="1.0"?>

                    <CATALOG>

                      <CD>

                        <TITLE> Empire Burlesque </TITLE>

                        <ARTIST> Bob Dylan </ARTIST>

                        <COUNTRY> USA </COUNTRY>

                        <COMPANY> Columbia </COMPANY>

                        <PRICE> 10.90 </PRICE>

                        <YEAR> 1985 </YEAR>

                      </CD>

                    .

                    .

                    .

            Για να τοποθετήσουμε ένα conditional if test στο περιεχόμενο του αρχείου, απλά προσθέτουμε ένα στοιχείο xsl:if στο XSL έγγραφο, ως εξής :

<xsl:if match=".[ARTIST='Bob Dylan']">

... κάποια έξοδος ...

</xsl:if>

Ας δούμε τώρα το ελαφρά τροποποιημένο XSL stylesheet :

                    <?xml version='1.0'?>

                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

                    <xsl:template match="/">

                      <html>

                      <body>

                        <table border="2" bgcolor="yellow">

                          <tr>

                            <th> Title </th>

                            <th> Artist </th>

                          </tr>

                          <xsl:for-each select="CATALOG/CD">

                            <xsl:if match=".[ARTIST='Bob Dylan']">

                              <tr>

                              <td><xsl:value-of select="TITLE"/></td>

                              <td><xsl:value-of select="ARTIST"/></td>

                              </tr>

                            </xsl:if>

                          </xsl:for-each>

                        </table>

                      </body>

                      </html>

                    </xsl:template>

                    </xsl:stylesheet>

Ακολουθεί ο απλός πηγαίος κώδικας (source code) που χρειάζεται για να μετασχηματίσουμε το XML αρχείο σε HTML στον φυλλομετρητή μας :

<html>

<body>

<script language="javascript">

// Φόρτωση της XML

var xml = new ActiveXObject("Microsoft.XMLDOM")

xml.async = false

xml.load("cd_catalog.xml")

// Φόρτωση της XSL

var xsl = new ActiveXObject("Microsoft.XMLDOM")

xsl.async = false

xsl.load("cd_catalog_if.xsl")

// Μετασχηματισμός

document.write(xml.transformNode(xsl))

</script>

</body>

</html>

 

XSL Conditional Choose

Η XSL μπορεί να χρησιμοποιήσει μια conditional choose για να φιλτράρει ένα XML έγγραφο.

                    <?xml version="1.0"?>

                    <CATALOG>

                      <CD>

                        <TITLE> Empire Burlesque </TITLE>

                        <ARTIST> Bob Dylan </ARTIST>

                        <COUNTRY> USA </COUNTRY>

                        <COMPANY> Columbia </COMPANY>

                        <PRICE> 10.90 </PRICE>

                        <YEAR>1985</YEAR>

                      </CD>

                    .

                    .

        .

Για να εισάγουμε ένα conditional choose test στο περιεχόμενο του αρχείου, απλά προσθέτουμε τα στοιχεία xsl:choose, xsl:when και xsl:otherwise στο XSL έγγραφο, ως εξής :

                    <xsl:choose>

                       <xsl:when match=".[ARTIST='Bob Dylan']">

                          ... κώδικας ...

                       </xsl:when>

                       <xsl:otherwise>

                          ... κώδικας ...

                       </xsl:otherwise>

                    </xsl:choose>

Ας δούμε τώρα το ελαφρά τροποποιημένο XSL stylesheet :

                    <?xml version='1.0'?>

                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

                    <xsl:template match="/">

                      <html>

                      <body>

                        <table border="2" bgcolor="yellow">

                          <tr>

                            <th> Title </th>

                            <th> Artist </th>

                          </tr>

                          <xsl:for-each select="CATALOG/CD">

                            <tr>

                            <td><xsl:value-of select="TITLE"/></td>

                            <xsl:choose>

                              <xsl:when match=".[ARTIST='Bob Dylan']">

                                <td bgcolor="#ff0000">

                                 <xsl:value-of select="ARTIST"/>

                                </td>

                              </xsl:when>

                              <xsl:otherwise>

                                <td><xsl:value-of select="ARTIST"/></td>

                              </xsl:otherwise>

                            </xsl:choose>

                            </tr>

                          </xsl:for-each>

                        </table>

                      </body>

                      </html>

                    </xsl:template>

                    </xsl:stylesheet>

Ακολουθεί ο απλός πηγαίος κώδικας (source code) που χρειάζεται για να μετασχηματίσουμε το XML αρχείο σε HTML στον φυλλομετρητή μας :

<html>

<body>

<script language="javascript">

// Φόρτωση της XML

var xml = new ActiveXObject("Microsoft.XMLDOM")

xml.async = false

xml.load("cd_catalog.xml")

// Φόρτωση της XSL

var xsl = new ActiveXObject("Microsoft.XMLDOM")

xsl.async = false

xsl.load("cd_catalog_choose.xsl")

// Μετασχηματισμός

document.write(xml.transformNode(xsl))

</script>

</body>

</html>

 

back.gif (9867 bytes)

Επιστροφή