ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΣΗΜΑΣΙΟΛΟΓΙΚΟΣ ΙΣΤΟΣ - XML Εργαστήρια 5-6 Στουγιάννου Ελευθερία estoug@unipi.gr
Περιεχόμενα Πέμπτου - Έκτου Εργαστηριακού Μαθήματος XML XSLT XPath Ασκήσεις Ερωτήσεις
extensible Stylesheet Language - XSL Η XSL είναι μια γλώσσα που «λέει» σε έναν browser πώς να επεξεργαστεί ένα XML αρχείο και να εμφανίσει τα δεδομένα XML. Συγκεκριμένα, η XSL επιτρέπει (α) την επιλογή των δεδομένων της XML που θέλουμε να εμφανισθούν, (β) την παρουσίασή τους με οποιαδήποτε σειρά ή διάταξη, (γ) την τροποποίησή τους και (δ) την προσθήκη πληροφοριών. Αποτελεί μέθοδο πολύ πιο ισχυρή και ευέλικτη από τη χρήση CSS. Ενώ το φύλλο στυλ CSS επιτρέπει απλώς τη μορφοποίηση κάθε στοιχείου XML, το φύλλο στυλ XSL δίνει τη δυνατότητα πλήρους ελέγχου του αποτελέσματος. Κομμάτι της XML αποτελεί η XSLT (XSL Transform) που χρησιμοποιείται για να μετατρέψει ένα XML έγγραφο σε ένα άλλο XML έγγραφο που μπορεί να αναγνωριστεί από έναν browser, όπως ένα HTML ή ένα (X)HTML έγγραφο. Η XSL είναι κάτι περισσότερο από μια Style Sheet γλώσσα. Αποτελείται από τρία μέλη: Την XSLT που είναι μια γλώσσα για την μετατροπή των XML εγγράφων Την XPath που είναι μια γλώσσα για την πλοήγηση στα XML έγγραφα Την XSL-FO που είναι μια γλώσσα για την μορφοποίηση των XML εγγράφων Η XSLT χρησιμοποιεί την XPath για να βρει πληροφορία σε ένα XML έγγραφο. Η XPath χρησιμοποιείται για την πλοήγηση στα elements και τα attributes των XML εγγράφων.
Μια γενική άποψη της XSLT Μετατροπή XML documents σε άλλες μορφές αρχείων: (X)HTML (Saxon) PDF ZIP TEXT - XML
Extensible HyperText Markup Language (XHTML) Η Extensible HyperText Markup Language (XHTML) είναι σχεδόν ταυτόσημη με την HTML 4.01, αλλά επίσης είναι σύμφωνη και με την αυστηρή σύνταξη της XML. Αυτή η συμμόρφωση κάνει την XHTML μία αυστηρά δομημένη γλώσσα σήμανσης (markup language). Ένα έγγραφο γραμμένο σε XHTML θα πρέπει να είναι καλά διατυπωμένο ( well-formed ) και συνεπώς, θα πρέπει να ερμηνεύεται και να εμφανίζεται στους φυλλομετρητές με τον τρόπο με τον οποίο οι συγγραφείς του επιθυμούν. Μερικές από τις πιο σημαντικές απαιτήσεις της XHTML είναι: Τα στοιχεία πρέπει να είναι κατάλληλα εμφωλευμένα. Τα στοιχεία θε πρέπει πάντα να κλείνουν. Τα στοιχεία και οι ιδιότητες θα πρέπει να είναι γραμμένα με μικρά γράμματα. Οι τιμές των ιδιοτήτων θα πρέπει να είναι σε εισαγωγικά. Τα έγγραφα θα πρέπει να έχουν τρία κύρια μέρη: ορισμός DOCTYPE, Τμήμα κεφαλής (head section), και τμήμα σώματος (body section)
Κάποια βασικά βήματα σύνδεσης XML- XSL αρχείων (1/3) Ας υποθέσουμε ότι έχουμε το people.xml με τα στοιχεία ορισμένων ανθρώπων όπως φαίνεται παρακάτω και θέλουμε να παρουσιάσουμε τα δεδομένα αυτά σε ένα πίνακα στο browser δημιουργώντας κατάλληλα το people.xsl και ενώνοντας τα δύο αρχεία. Σύνδεση του XML doc με το XSLT file
Κάποια βασικά βήματα σύνδεσης XML- XSL αρχείων (2/3) Για να φτιάξουμε το people.xsl πρέπει πρώτα να προσθέσουμε το Namespace (μέρος του xsl φαίνεται παρακάτω). Πρόσθεσε το Namespace Το Namespace prefix xsl: χρησιμοποιείται για να αναγνωριστούν τα xsl statements Που θα γίνουν processed. Αν ένα statement δεν έχει το xsl:, τότε αντιγράφεται στην έξοδο χωρίς να γίνει processed. Προσοχή: το XSLT πρέπει να είναι valid (stop tag </xsl:stylesheet>)
Κάποια βασικά βήματα σύνδεσης XML- XSL αρχείων (3/3) Έπειτα στο people.xsl πρέπει να ακολουθήσουμε τα παρακάτω βήματα (μέρος του xsl φαίνεται παρακάτω), κ.ο.κ. 1 2 3 Επέλεξε όλα τα elements από το root: template match= / Επέλεξε όλα τα Person tags: <xsl:for-each select= people/person > Επέλεξε την τιμή του ΝΑΜΕ element: <xsl:value-of select= name />
XSLT XPath - Δενδροειδής Δομή Η XPath είναι ένα συστατικό της XSLT. Μία γλώσσα για να αναγνωρίζουμε τα elements/attributes σε ένα XML document.
XPath Expressions (1/6) /library /library/book /library/book/@name /library/book[@name="the Fourth Civilization"] /library/book[1] //book[2] <library> <book name="c++ How to Program" /> <book name="the Fourth Civilization" /> </library>
XPath Expressions (2/6) /library /library/book /library/book/@name /library/book[@name="the Fourth Civilization"] /library/book[1] //book[2] <library> <book name="c++ How to Program" /> <book name="the Fourth Civilization" /> </library>
XPath Expressions (3/6) /library /library/book /library/book/@name /library/book[@name="the Fourth Civilization"] /library/book[1] //book[2] <library> <book name="c++ How to Program" /> <book name="the Fourth Civilization" /> </library> Σημείωση: Ένας browser μπορεί να χρησιμοποιήσει και να εμφανίζει τιμές των attributes σε ένα XSL αρχείο. Η σύνταξη είναι @attributename.
XPath Expressions (4/6) /library /library/book /library/book/@name /library/book[@name="the Fourth Civilization"] /library/book[1] //book[2] <library> <book name="c++ How to Program" /> <book name="the Fourth Civilization" /> </library>
XPath Expressions (5/6) /library /library/book /library/book/@name /library/book[@name="the Fourth Civilization"] /library/book[1] //book[2] <library> <book name="c++ How to Program" /> <book name="the Fourth Civilization" /> </library>
XPath Expressions (6/6) /library /library/book /library/book/@name /library/book[@name="the Fourth Civilization"] /library/book[1] //book[2] <library> <book name="c++ How to Program" /> <book name="the Fourth Civilization" /> </library>
XPath Node Selectors (1/4) /library/* /library/book[1]/text() /library/node()[1]. <library> <!-- comment --> <book>the Principles of Computer Hardware</book> <book name="the Fourth Civilization" /> </library>
XPath Node Selectors (2/4) /library/* /library/book[1]/text() /library/node()[1]. <library> <!-- comment --> <book>the Principles of Computer Hardware</book> <book name="the Fourth Civilization" /> </library>
XPath Node Selectors (3/4) /library/* /library/book[1]/text() /library/node()[1]. <library> <!-- comment --> <book>the Principles of Computer Hardware</book> <book name="the Fourth Civilization" /> </library>
XPath Node Selectors (3/4) /library/* /library/book[1]/text() /library/node()[1]. <library> <!-- comment --> <book>the Principles of Computer Hardware</book> <book name="the Fourth Civilization" /> </library> Σημείωση: Μπορείτε να χρησιμοποιήσετε το Plugin του Notepad++, XML Tools για να ελέγξετε αρχικά την εγκυρότητα ενός xml αρχείου και έπειτα να δείτε τα XPaths που υπάρχουν στο αρχείο αυτό.
Άσκηση 1 σε XPath (1/3) Δίνεται το παρακάτω XML document. <?xml version="1.0" encoding="iso-8859-1"?> <bookstore> <book isbn="111111" cat="fiction"> <title lang="chn">harry Potter</title> <price unit="usd">79.99</price> </book> <book isbn="222222" cat="textbook"> <title lang="eng">learning XML</title> <price unit="usd">69.95</price> </book> <book isbn="333333" cat="textbook"> <title lang="eng">intro. to Databases</title> <price unit="usd">39.00</price> </book> </bookstore>
Άσκηση 1 σε XPath (2/3) Συμπληρώστε την XPath Expression χρησιμοποιώντας Node Selectors. Description Selects the document root node. Selects the bookstore element node. Selects all book element nodes. Selects all price element nodes. Selects all lang attribute nodes. Selects text nodes of all price element nodes. Select all child nodes of book element nodes. Select all attribute nodes. XPath Expression
Άσκηση 1 σε XPath Λύση (3/3) Description Selects the document root node. / /. Selects the bookstore element node. Selects all book element nodes. Selects all price element nodes. Selects all lang attribute nodes. Selects text nodes of all price element nodes. Select all child nodes of book element nodes. Select all attribute nodes. XPath Expression /bookstore./bookstore /bookstore/book //book bookstore/book/price //price //@lang //price/text() /bookstore/book/* //book/* //@*
XSL - Παράδειγμα <?xml-stylesheet type="text/xsl" href="class.xsl"?>
Βασικοί Κανόνες Δομής XSL Η πρώτη γραμμή του XSL αρχείου δείχνει ότι το XSL είναι γραμμένο στην XML. Η γραμμή: <?xml version= 1.0?> <xsl:stylesheet xmlns:xsl= http://www.w3.org/tr/wd-xsl > «λέει» στον browser ότι αυτό το αρχείο είναι XSL stylesheet. Εναλλακτικά, μπορούμε να χρησιμοποιήσουμε μια από τις παρακάτω συνώνυμες εντολές: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> Συνδέουμε ένα XML αρχείο με το XSL αρχείο με την εντολή: <?xml-stylesheet type="text/xsl" href="class.xsl"?>
XSL Κανόνες: XSL Template & Value-of Το XSL Style Sheet αποτελείται από ένα ή περισσότερα σύνολα κανόνων που ονομάζονται templates. Το <xsl:template> element δημιουργεί templates. Η match attribute χρησιμοποιείται για να συνδέσει ένα template με ένα XML element κι έχει τιμή μια XPath έκφραση (είναι σαν να πλοηγούμαστε σε ένα σύστημα φακέλων, όπου υπάρχει / πηγαίνουμε σε υποφακέλους). Όταν αυτή έχει τιμή /, προσδιορίζει όλο το XML έγγραφο. Κάθε template περιέχει κανόνες που πρόκειται να εφαρμοστούν όταν ένα element ταιριάζει με το path που παίρνει σαν τιμή το attribute match. Επομένως, το παρακάτω template, σημαίνει ότι οι κανόνες που βρίσκονται ανάμεσα στο tag αρχής και τέλους πρέπει να εφαρμοστούν στο root element (σε όλο το XML έγγραφο). <xsl:template match= / > XPath </xsl:template> Το <xsl:value-of> element χρησιμοποιείται για να εξάγει την τιμή ενός XML element και να την προσθέσει στην έξοδο, ενώ έχει τιμή μια XPath έκφραση. <xsl:value-of select= class/title > <xsl:value-of select= class/students/student/name/first > Π.Χ. <xsl:value-of select= class/students/student/major/@decided >
XSL Άσκηση 1 (1/3) Δίνεται το XML αρχείο note.xml: <?xml version="1.0"?> <note> <from>john</from> <to>merry</to> <message title="reminder" >Do nοt forget me</message> </note> Αντιγράψτε το και ανοίξτε το με έναν browser της επιλογής σας.
XSL Άσκηση 1 (2/3) Ζητείται να γράψετε ένα XSL stylesheet για το note, το οποίο να εμφανίζει το παρακάτω μήνυμα: There was a message from John to Merry with title Reminder. Διευκρινήσεις: Το όνομα John είναι γραμμένο με bold και το όνομα Merry με italic. Ονομάστε το stylesheet με όνομα note.xsl Προσθέστε στο note.xml την γραμμή που καθοδηγεί τον browser στο note.xsl. <?xml-stylesheet type = "text/xsl" href="note.xsl"?> Τέλος, ανοίξτε εκ νέου το note.xml με έναν browser της επιλογής σας.
XSL Άσκηση 1 (3/3) note.xsl
XSL Άσκηση 2 (1/2) Χρησιμοποιήστε το note.xml της άσκησης 1: <?xml version="1.0"?> <note> <from>john</from> <to>merry</to> <message title="reminder" >Do nοt forget me</message> </note> Ζητείται να γράψετε ένα XSL stylesheet (note2.xsl), το οποίο να εμφανίζει το note.xml στην παρακάτω μορφή (HTML table): Διευκρινήσεις: 1. Οι τίτλοι στον πίνακα είναι bold. 2. Ο πίνακας έχει border=5 και cellpadding=5. 3. Ονομάστε το νέο αρχείο note2.xsl.
XSL Άσκηση 2 Λύση (2/2) note2.xsl
XSL Κανόνες: XSL for-each & if Το <xsl:for-each> element χρησιμοποιείται για να κάνει επανάληψη (looping), και έχει τιμή μια XPath έκφραση. Επίσης, δίνει τη δυνατότητα να φιλτράρουμε την επιλογή μας, πχ.: <xsl:for-each select="library/book[price='14']"> που σημαίνει ότι, μας βγάζει τα δεδομένα για τα βιβλία που έχουν τιμή 14. Το <xsl:if> element βάζει μια συνθήκη. Με άλλα λόγια, επιτρέπει να ανακτήσουμε υπό συνθήκη την τιμή των των elements ή attributes, πχ.: <xsl:if test= PRICE > 15"> που σημαίνει ότι, εμφανίζει εκείνα τα δεδομένα που έχουν τιμή μεγαλύτερη από 15.
XSL Άσκηση 3 (1/3) Κατεβάστε το αρχείο class.xml και το αρχείο class.xsl. Ανοίξτε το αρχείο class.xml με έναν browser της επιλογής σας. Το αποτέλεσμα που θα δείτε είναι το παρακάτω:
XSL Άσκηση 3 (2/3) Ζητείται να τροποποιήσετε το αρχείο class.xsl έτσι ώστε, από όλους τους students που έχουν major (decided = "y") να εμφανίσετε σε unordered list το κείμενο των στοιχείων <majorname>. Υπενθύμιση: Το HTML συντακτικό για την unordered list: <UL> <LI> </LI> <LI> </LI> </UL> Το αποτέλεσμα θα πρέπει να είναι το παρακάτω (class2.xsl):
XSL Άσκηση 3 Λύση (3/3) class2.xsl
XSL Άσκηση 4 (1/5) Κατεβάστε το αρχείο student-major.xml και το αρχείο student-major.xsl. Ανοίξτε το αρχείο student-major.xml με έναν browser της επιλογής σας. Το αποτέλεσμα που θα δείτε είναι το παρακάτω:
XSL Άσκηση 4 (2/5) Ζητείται να τροποποιήσετε το αρχείο student-major.xsl έτσι ώστε, να παρουσιάσετε το αρχείο student-major.xml σαν έναν πίνακα με μια στήλη για τα student names και μια άλλη για τα major. Αν ο student δεν έχει καθόλου major, τότε να εμφανίζεται η φράση Ν/Α στην στήλη των major. Υπενθύμιση: Το HTML συντακτικό για τον πίνακα είναι: <TABLE BORDER = n > <TR> <TH> header </TH> </TR> <TR> <TD> data</td> </TR> </TABLE> Θα χρησιμοποιήσετε <xsl:for-each> και δύο <xsl:if> μέσα σε αυτό.
XSL Άσκηση 4 (3/5) Το αποτέλεσμα θα πρέπει να είναι το παρακάτω (student-major2.xsl):
XSL Άσκηση 4 Λύση (4/5) student-major2.xsl Α ΤΡΟΠΟΣ
XSL Άσκηση 4 Λύση (5/5) student-major2.xsl Β ΤΡΟΠΟΣ
XSL Κανόνες: XSL sort & choose Το <xsl:sort> element ταξινομεί την έξοδο, και το προσθέτουμε ανάμεσα στο <xsl:for-each> element και στο <xsl:template> element. Η τιμή της select attribute δείχνει βάσει ποιου element θα γίνει η ταξινόμηση, πχ.: <xsl:sort select= PRICE"/> που σημαίνει ότι ταξινομεί τα δεδομένα βάσει της τιμής. Το element <xsl:choose> χρησιμοποιείται σε συνδυασμό με τα <xsl:when>, <xsl:otherwise> για να δηλώσει πολλές συνθήκες και συντάσσεται ως εξής: <xsl:choose> <xsl:when test="expression">... some output... </xsl:when> <xsl:otherwise>... some output... </xsl:otherwise> </xsl:choose>
XSL Κανόνες: XSL apply-templates Το element <xsl:apply-templates> δημιουργεί ένα template για το τρέχον element ή για τα child nodes του τρέχοντος element. Προσθέτοντας μία select attribute στο <xsl:apply-templates> element, προωθούμε μόνο το child element, στο οποίο ταιριάζει η τιμή της attribute. Μπορούμε να χρησιμοποιήσουμε την select attribute για να προσδιορίσουμε τη σειρά, με την οποία τα child nodes προωθούνται. Μπορεί να χρησιμοποιηθεί ως εναλλακτική του <xsl:for-each>.
XSL Άσκηση 5 (1/4) Δίνεται το παρακάτω XML αρχείο, lunch_menu.xml:
XSL Άσκηση 5 (2/4) Ζητείται να φτιαχτεί ο παρακάτω πίνακας, ώστε να πληρούνται τα παρακάτω κριτήρια: Η επικεφαλίδα Lunch Menu είναι h2. Ο πίνακας έχει border=1. Το χρώμα της πρώτης γραμμής του πίνακα είναι lightblue. Οι γραμμές του πίνακα είναι ταξινομημένες με βάση το όνομα (name).
XSL Άσκηση 5 Λύση (3/4) lunch_menu.xsl:
XSL Άσκηση 5 Λύση (4/4) Δεν ξεχνάμε να προσθέσουμε την παρακάτω εντολή στο lunch_menu.xml, ώστε να γίνει η σύνδεσή του με το lunch_menu.xml: <?xml-stylesheet type="text/xsl" href="lunch_menu.xsl"?>
XSL Άσκηση 6 (1/2) Τροποποιείστε το αρχείο της άσκησης 5, lunch_menu.xsl, έτσι ώστε να επιλέξετε όλα τα food με name Cheese Burger και να έχετε το παρακάτω αποτέλεσμα:
XSL Άσκηση 6 Λύση (2/2) lunch_menu2.xsl:
Μέρος του depcourses.xml (ένα δείγμα, όχι ολόκληρο το αρχείο) XSL Άσκηση 7 (1/6) Δίνεται ένα σύνολο δεδομένων XML (κατεβάστε το depcourses.xml από τον Εύδοξο) που αποτυπώνει έναν κατάλογο μαθημάτων. Από τα δεδομένα πληροφορούμαστε ότι υπάρχουν πολλά τμήματα, κάθε ένα έχει το δικό του πρόεδρο, κάποια μαθήματα και καθηγητές ή/και λέκτορες που τους έχουν ανατεθεί να διδάσκουν τα μαθήματα.
XSL Άσκηση 7 (2/6) 1 ο Ζητούμενο: Γράψτε ένα XSLT Query, το οποίο θα επιστρέφει μία λίστα με τους τίτλους των Τμημάτων (department titles). Η λύση σας θα πρέπει να ακολουθεί το παρακάτω stylesheet: <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match=...>... template body... </xsl:template>... more templates as needed... </xsl:stylesheet> ΛΥΣΗ: <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="department"> <Title><xsl:value-of select="title" /></Title> </xsl:template> </xsl:stylesheet>
XSL Άσκηση 7 (3/6) 2ο Ζητούμενο: Γράψτε ένα XSLT Query, το οποίο θα επιστρέφει μία λίστα με στοιχεία των Τμημάτων (department elements) με κανένα attribute και δύο υποστοιχεία (subelements): τον τίτλο του Τμήματος (department title) και ολόκληρη τη δομή υποστοιχείων για τον Πρόεδρο (Chair). Η λύση σας θα πρέπει να ακολουθεί το παρακάτω stylesheet: <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match=...>... template body... </xsl:template>... more templates as needed... </xsl:stylesheet> Το <xsl:copy-of> element δημιουργεί ένα αντίγραφο του τρέχοντος κόμβου. Κόμβοι Namespace, παιδιά-κόμβοι, και attributes του τρέχοντος κόμβου αυτομάτως αντιγράφονται όλα. ΛΥΣΗ: <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="department"> <Department> <Title><xsl:value-of select="title" /></Title> <xsl:copy-of select="chair" /> </Department> </xsl:template> </xsl:stylesheet>
XSL Άσκηση 7 (4/6) 3ο Ζητούμενο: Γράψτε το XPATH, έτσι ώστε να επιστρέφονται όλα τα elements Title (και για τα Τμήματαdepartments- και για τα μαθήματα-courses-). Σημείωση: Η λύση σας θα πρέπει να κάνει και αναφορά στο xml αρχείο doc ("depcourses.xml ") που θα έχει πρόσβαση στα δεδομένα. Απάντηση: doc("depcourses.xml")//title 4ο Ζητούμενο: Γράψτε το XPATH, έτσι ώστε να επιστρέφονται τα επίθετα (last names) όλων των Προέδρων των Τμημάτων. Σημείωση: Η λύση σας θα πρέπει να κάνει και αναφορά στο xml αρχείο doc ("depcourses.xml ") που θα έχει πρόσβαση στα δεδομένα. Απάντηση: doc("depcourses.xml")//chair/professor/last_name
XSL Άσκηση 7 (5/6) 5ο Ζητούμενο: Γράψτε το XPATH, έτσι ώστε να επιστρέφονται οι τίτλοι των μαθημάτων με συμμετοχή (enrollement) μεγαλύτερη από 500. Σημείωση: Η λύση σας θα πρέπει να κάνει και αναφορά στο xml αρχείο doc ("depcourses.xml ") που θα έχει πρόσβαση στα δεδομένα. Απάντηση: doc("depcourses.xml")//course[@enrollment > 500]/Title 6ο Ζητούμενο: Γράψτε το XPATH, έτσι ώστε να επιστρέφονται οι τίτλοι των Τμημάτων που έχουν κάποιο μάθημα που έχει ως προαπαιτούμενο το "CS106B". Σημείωση: Η λύση σας θα πρέπει να κάνει και αναφορά στο xml αρχείο doc ("depcourses.xml ") που θα έχει πρόσβαση στα δεδομένα. Απάντηση: doc("depcourses.xml")//department[course/prerequisites/prereq = "CS106B"]/Title
XSL Άσκηση 7 (6/6) 7ο Ζητούμενο: Γράψτε το XPATH, έτσι ώστε να επιστρέφονται τα επίθετα των Καθηγητών/Λεκτόρων που χρησιμοποιούν το μεσαίο αρχικό γράμμα ονόματος (middle initial). Αγνοήστε τις διπλές τιμές αν υπάρχουν. Σημείωση: Η λύση σας θα πρέπει να κάνει και αναφορά στο xml αρχείο doc ("depcourses.xml ") που θα έχει πρόσβαση στα δεδομένα. Απάντηση: doc("depcourses.xml")//(lecturer Professor)[Middle_Initial]/Last_Name 8ο Ζητούμενο: Γράψτε το XPATH, έτσι ώστε να επιστρέφεται το σύνολο (ο αριθμός) των μαθημάτων που έχουν ένα cross-listed μάθημα (π.χ. που έχουν το "Cross-listed" στην περιγραφή τους). Σημείωση: Η λύση σας θα πρέπει να κάνει και αναφορά στο xml αρχείο doc ("depcourses.xml ") που θα έχει πρόσβαση στα δεδομένα. Απάντηση: count(doc("depcourses.xml")//course[contains(description, "Cross-listed")]/Title)
CSS και XSL Παράδειγμα (1/2) 1. Δημιουργήστε ένα XML file με το ακόλουθο περιεχόμενο και σώστε το (tutorials.xml).
CSS και XSL Παράδειγμα (2/2) 2. Δημιουργήστε ένα αρχείο με το ακόλουθο περιεχόμενο και σώστε το με το όνομα tutorials.xsl στο ίδιο directory με το XML file και ανοίξτε το xml αρχείο στο browser.
Ερώτηση 1 σε XSL (1/3) Επιλέξτε ποιο από τις παρακάτω τέσσερεις επιλογές αποτελεί σωστό XSLT stylesheet για να εξάγει Transformation Results ταξινομημένα με την τιμή του attribute «Password» για το παρακάτω XML Έγγραφο. XML Document : <?xml version="1.0" encoding="utf-8"?> <UserList> <UserID Password="xxxxxx" Delete="1">User01</UserID> <UserID Password="zzzzzz" Delete="0">User02</UserID> <UserID Password="xyzxyz" Delete="0">User03</UserID> <UserID Password="yyyyyy" Delete="0">User04</UserID> </UserList> Transformation Results : User01/User03/User04/User02/
Ερώτηση 1 σε XSL (2/3) a. <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="text" /> <xsl:template match="/"> <xsl:sort select="@password" data-type="text" /> <xsl:apply-templates select="userlist/userid" /> </xsl:template> <xsl:template match="userid"> <xsl:value-of select="." /><xsl:text>/</xsl:text> </xsl:template> </xsl:stylesheet> b. <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="text" /> <xsl:template match="/"> <xsl:apply-templates select="userlist/userid" /> <xsl:sort select="@password" data-type="text" /> </xsl:template> <xsl:template match="userid"> <xsl:value-of select="." /><xsl:text>/</xsl:text> </xsl:template> </xsl:stylesheet>
Ερώτηση 1 σε XSL (3/3) c. <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="text" /> <xsl:template match="/"> <xsl:apply-templates select="userlist/userid"> <xsl:sort select="@password" data-type="text" /> </xsl:apply-templates> </xsl:template> <xsl:template match="userid"> <xsl:value-of select="." /><xsl:text>/</xsl:text> </xsl:template> </xsl:stylesheet> d. <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="text" /> <xsl:template match="/"> <xsl:apply-templates select="userlist/userid" /> </xsl:template> <xsl:template match="userid"> <xsl:sort select="@password" data-type="text"> <xsl:value-of select="." /><xsl:text>/</xsl:text> </xsl:sort> </xsl:template> </xsl:stylesheet> Σωστή Απάντηση: c
Ερώτηση 2 σε XSL (1/2) Επιλέξτε ποιο από τις παρακάτω τέσσερεις επιλογές αποτελεί σωστό αποτέλεσμα μετάφρασης (transformation result) όταν εφαρμοστεί το παρακάτω XSLT Stylesheet στο παρακάτω XML Έγγραφο. XML Document : <?xml version="1.0" encoding="utf-8"?> <UserList> <UserID Password="xxxxxx" authority="administrator">user01</userid> <UserID Password="zzzzzz" authority="general">user02</userid> <UserID Password="xyzxyz" authority="system">user03</userid> <UserID Password="yyyyyy" authority="general">user04</userid> </UserList> XSLT Stylesheet : <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <SystemUserList> <xsl:apply-templates select="userlist/userid" /> </SystemUserList> </xsl:template> <xsl:template match="userid"> <xsl:if test="@authority='system'"> <UserID><xsl:value-of select="text()" /></UserID> <xsl:element name="authority"><xsl:value-of select="@authority" /></xsl:element> </xsl:if> </xsl:template> </xsl:stylesheet>
Ερώτηση 2 σε XSL (2/2) a. <?xml version="1.0" encoding="utf-8"?> <UserID>User03</UserID> <authority>system</authority> b. <?xml version="1.0" encoding="utf-8"?> <SystemUserList> <UserID>User03</UserID> </SystemUserList> c. <?xml version="1.0" encoding="utf-8"?> <SystemUserList> <authority>system</authority> <UserID>User03</UserID> </SystemUserList> d. <?xml version="1.0" encoding="utf-8"?> <SystemUserList> <UserID>User03</UserID> <authority>system</authority> </SystemUserList> Σωστή Απάντηση: d
Ερωτήσεις??