Διαδίκτυο και Εφαρμογές 2η Άσκηση Μετασχηματισμοί XML και XSL. Γιαννέλος Γιάννης ΑΜ: Μαρινέλλης Γιώργος ΑΜ:

Σχετικά έγγραφα
Περιγραφή της εργασίας

Εισαγωγή στις Σελίδες Εξυπηρετητή Java Java Server Pages (JSP)

Μια εισαγωγή στην XSL

Java Servlets: Principles and Programming 1/19

ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

Βασικά στοιχεία του CSS

Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

Τα βασικά για Servlet

BibConvert μετατροπές LOM

Cloud Computing Database with Amazon SimpleDB

ιαδικτυακές Εφαρµογές Πραγµατικού Χρόνου µε Java

Άσκηση 1. Απάντηση Άσκησης 1

ΠΡΟΣΟΧΗ: Οι απαντήσεις πολλαπλής επιλογής µόνο πάνω στο ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ

Αντικειµενοστρεφής Προγραµµατισµός

ΚΑΤΑΝΕΜΗΜΕΝΟ ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΣΥΣΚΕΥΩΝ ΑΣΗΜΑΚΟΠΟΥΛΟΣ ΣΩΤΗΡΗΣ ΑΜ : 3021

ΣΗΜΑΣΙΟΛΟΓΙΚΟΣ ΙΣΤΟΣ - XML

Java Servlets. Εισαγωγή. Σταύρος Πολυβίου

Cascading Style Sheets (CSS)

Από τη UML στον Κώδικα. Μέρος Β

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

HelloApplet. Παύλος Εφραιμίδης Java Applets 1

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων

Γενικά (για τις γραπτές εξετάσεις)

Σύστημα για on-line δημοπρασίες & πωλήσεις

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Προγραμματισμός στην πλευρά του εξυπηρετητή: Τεχνολογία Servlet

Λογισµικό (Software SW) Γλώσσες

14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

Δικησοκενηρικά Πληροθοριακά Σσζηήμαηα

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

1. <body> 2. <header> 3. <h1> My Page </h1> 4. </header> 5. <section>

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Προγραμματισμός και Συστήματα στον Παγκόσμιο Ιστό Ενότητα 6: XSL. Καθ. Ιωάννης Γαροφαλάκης Πολυτεχνική Σχολή Μηχανικών Η/Υ & Πληροφορικής

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

ΤΕΙ Σερρών Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πληροφορικής & Επικοινωνιών. Επώνυμο Όνομα: Α.Μ. : Εξάμηνο : Αίθουσα

Αντικειμενοστρεφής Προγραμματισμός

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Αντικειμενοστρεφής Προγραμματισμός

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Java & Java EE 2o Μέρος: Διασφάλιση ευκολίας τροποποίησης με το πρότυπο MVC (Model View Controller) Κακαρόντζας Γεώργιος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ιαδικτυακές Εφαρµογές

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

11β Δομικά πρότυπα σχεδίασης

Η γλώσσα HTML. Επιμέλεια: Δέγγλερη Σοφία

Κεφάλαιο 1. Νήματα (Threads). Time Sharing

Διαδικτυακές Εφαρμογές Ενότητα 5: Servlets και JSPs

<a href=" στο κείμενο</a>.

Europe Code Week 7-22 Οκτωβρίου Μία γιορτή δημιουργίας με κώδικα

Τεχνολογία Διοίκησης Επιχειρησιακών Διαδικασιών

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 8 η Διάλεξη: Προγραμματισμός στην πλευρά του εξυπηρετητή: Τεχνολογία Java Server Pages (JSP)

Σημασιολογικός Ιστός (Semantic Web) - XML

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 4/3/2008

Δομές Δεδομένων & Αλγόριθμοι

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Μάθημα 2 [10/11/2015]

Τι είναι η Spring. Η Spring είναι ένα ελεύθερο (open source) περιβάλλον εργασίας για εφαρμογές Java. Μπορεί να περιγραφεί ως:

A J A X AJAX Γιάννης Αρβανιτάκης

Εργασία Μαθήματος Αξία: 40% του τελικού σας βαθμού Ανάθεση: Παράδοση:

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

6. Εξαιρέσεις στη γλώσσα Java

ΕΠΛ 012. JavaScripts

CSS. Εισαγωγή & Βασικές έννοιες. Cascading Style Sheets. Επικαλυπτόμενα φύλλα στυλ

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

Σημασιολογικός Ιστός (Semantic Web) - XML

ΑΣΚΗΣΗ. Συγκομιδή και δεικτοδότηση ιστοσελίδων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Περιγραφή του EcoTruck

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ.

Create Sprite at Runtime

Ειδικά Θέματα Προγραμματισμού

Διάλεξη 2η Εισαγωγή στο CSS

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

CSS Εργαστήριο 1. Εισαγωγή - Σύνταξη - Εφαρμογή στην HTML

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α

DOM. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Π. Αγγελάτος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Τεχνολογία Λογισμικού Τύπος Α

ΕΞΑΙΡΕΣΕΙΣ. Εξαιρέσεις προκαλούνται. από το σύστηµα. από το πρόγραµµα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Οντοκεντρικός Προγραμματισμός

Α ΛΥΚΕΙΟΥ - ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΪΟΣ 2019 ΕΝΔΕΙΚΤΙΚΕΣ ΕΡΩΤΗΣΕΙΣ ΚΑΤΑΝΟΗΣΗΣ

Τεχνολογίες Διαδικτύου - Εργαστήριο 1 ο

Σπουδές CAD, Πληροφορικής, Οικονομίας, Διοίκησης και D.T.P. με Σύστημα διδασκαλίας facetoface

Java & Java EE 1o Μέρος: Servlets και Java Server Pages. Κακαρόντζας Γεώργιος

Transcript:

Διαδίκτυο και Εφαρμογές 2η Άσκηση Μετασχηματισμοί XML και XSL Γιαννέλος Γιάννης ΑΜ:03108088 Μαρινέλλης Γιώργος ΑΜ:03108680 18 Μαΐου 2012

Εισαγωγή Το αντικείμενο της άσκησης είναι η χρήση της τεχνολογίας XML για την αναπαράσταση των δεδομένων και η διαχείριση αυτών μέσω του servlet και τον transformations που σου δίνει το XSL. H XML είναι μία γλώσσα σήμανσης, που περιέχει ένα σύνολο κανόνων για την ηλεκτρονική κωδικοποίηση κειμένων.η XML σχεδιάστηκε δίνοντας έμφαση στην απλότητα, τη γενικότητα και τη χρησιμότητα στο Διαδίκτυο. Είναι μία μορφοποίηση δεδομένων κειμένου, με ισχυρή υποστήριξη Unicode για όλες τις γλώσσες του κόσμου. Αν και η σχεδίαση της XML εστιάζει στα κείμενα, χρησιμοποιείται ευρέως για την αναπαράσταση αυθαίρετων δομών δεδομένων, που προκύπτουν για παράδειγμα στις υπηρεσίες ιστού. Υπάρχει μία ποικιλία διεπαφών προγραμματισμού εφαρμογών (συμπεριλαμβανομένης της Java), που μπορούν να χρησιμοποιούν οι προγραμματιστές, για να προσπελαύνουν δεδομένα XML, αλλά και διάφορα συστήματα σχημάτων XML, τα οποία είναι σχεδιασμένα για να βοηθούν στον ορισμό γλωσσών, που προκύπτουν από την XML. Στα πλαίσια της άσκησης θα χρησιμοποιηθεί το Java DOM API όπου θα διαχειρίζεται τις xml πληροφορίες και τους μετασχηματισμούς τους. 1ο μέρος: Εξοικείωση με τo εργαλείο xalan Σε αυτό το μέρος της εργασίας για εξοικείωση,ξεκινήσαμε με την δημιουργία του VehiclePresentor.xsl ο οποίος θα μετασχηματίζεται κατάλληλα και θα δίνει το ζητούμενο output (πίνακας με δεδομένα απο το input XML). Χρησιμοποιώντας το xalan κάνουμε το ζητούμενο transformation. xalan in input.xml xsl transform.xsl out output.html Για το λόγο αυτό κατασκευάσαμε 3 xml αρχεία (cars.xml, motorcycles.xml και trucks.xml), και το ένα xsl (VehiclePresentor.xsl) οι κώδικες των οποίων επισυνάπτονται στο παράρτημα στο τέλος της αναφοράς. Η δομή του AbstractPresentor.xsl αποτελείται από τα στοιχεία xsl-template και xsl:apply-templates τα οποία χρησιμοποιούν εκφράσεις της XPATH έτσι ώστε να προσπελαύνουν και εμφανίζουν τα απαραίτητα δεδομένα ανεξαρτήτως των ονομάτων τους. 2ο μέρος: Προγραμματιστικό μέρος Σκοπός αυτού του μέρους είναι η ανάπτυξη μιας διαδικτυακής εφαρμογής που θα συμπεριλαμβάνει την χρήση XML. Ο χρήστης θα βλέπει ώς αρχική σελίδα μια στατική index.html όπου θα επιλέγει το χρώμα του header και την γραμματοσειρά 1

του πίνακα της επόμενης σελίδας. Επίσης θα του δίνεται η δυνατότητα να επιλέγει ποιά κατηγορία των δεδομένων θα εμφανιστεί. Στην συνέχεια μέσω του POST θα μεταφερθούν οι παράμετροι αυτοί στο servlet και θα ανοίξει το κατάλληλο XML αρχείο για το input του XSL. Ας περιγράψουμε αναλυτικότερα την όλη διαδικάσια. Αρχικά δημιουργούμε έναν Java DOM API XML parser ο οποίος αναλύει και αποθηκεύει στην μνήμη την αναπαράσταση του XML σε κατάλληλη δομή. Ακολουθεί ο απαιτούμενος κώδικας: abspath = ctx.getrealpath("/web-inf/vehiclepresentor.xsl"); tf = TransformerFactory.newInstance(); DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); fact.setnamespaceaware(true); DocumentBuilder builder = fact.newdocumentbuilder(); doc = builder.parse(abspath); Θα πρέπει να τονιστεί ότι πρέπει να ενεργοποιηθεί το flag setnamespaceaware έτσι ώστε ο parser μας να είναι σε θέση να διακρίνει ένα XML από ένα XSL αρχείο και να επιστρέφει σωστά τις λεκτικές μονάδες. Στην συνέχεια καλούμε την συνάρτηση changedombystyle για να παραμετροποιήσουμε την μορφοποίηση του output, αφού έχουμε ήδη φτιάξει κατάλληλα το DOM. Ουσιαστικά το document που δημιουργήσαμε το περνάμε σαν όρισμα στον constructor DOMSource και αυτός μας επιστρέφει ένα αντικείμενο της κλάσης DOMSource. Αυτό το φορτώνουμε στον tranformer και έτσι έχουμε διαθέσιμο ένα αντικείμενο που αποτελεί μετασχηματισμό του αρχικού με βάση το DOM αντικείμενο. Στη συνέχεια, αφού έχει γίνει η τροποποίηση του xsl θα γίνει ο μετασχηματισμός σε html. Επίσης δημιουργούμε ένα StreamSource για το xml αρχείο το οποίο θέλουμε να παρουσιάσουμε. Το αποτέλεσμα θα διοχετευτεί μέσω ενός StreamResult πάνω στον PrinterWriter όπου και η σελίδα θα επιστραφεί στο χρήστη. Ακολουθεί η Java Class που υλοποιεί το servlet και screenshots της εφαρμογής. Java class: ximport java.io.*; import javax.xml.transform.stream.*; import javax.xml.transform.*; import javax.xml.transform.sax.saxsource; import javax.xml.transform.stream.streamsource; import javax.xml.transform.stream.streamresult; import org.xml.sax.*; import javax.servlet.*; import javax.servlet.http.*; import org.w3c.dom.*; import javax.xml.parsers.*; 2

import javax.xml.transform.dom.*; public class XMLTransformerAskhsh extends HttpServlet { ServletContext ctx; String abspath; SAXSource xsltdoc; TransformerFactory tf; Transformer mytransformer; Document doc; public void init(servletconfig config) throws UnavailableException { System.out.println("Init start"); try { ctx = config.getservletcontext(); abspath = ctx.getrealpath("/web-inf/vehiclepresentor.xsl"); xsltdoc = new SAXSource(new InputSource(absPath)); tf = TransformerFactory.newInstance(); DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); fact.setnamespaceaware(true); DocumentBuilder builder = fact.newdocumentbuilder(); doc = builder.parse(abspath); System.out.println("Name of document element is " + doc.getdocumentelement().getnodename()); catch (Exception e) { e.printstacktrace(); System.out.println("Init end"); private void changedombystyle(document doc, String color, String vehicle, String font) { NodeList nl = doc.getelementsbytagname("h1"); Attr a = doc.createattribute("style"); a.setvalue("background-color: "+color); nl.item(0).getattributes().setnameditem(a); String mycontent = "Selected color "+color+" and category "+vehicle; nl.item(0).settextcontent(mycontent); nl = doc.getelementsbytagname("table"); a = doc.createattribute("style"); a.setvalue("font-family: "+font); nl.item(0).getattributes().setnameditem(a); public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("dopost start"); System.out.println("Name of document element (at the post) is " + doc.getdocumentelement().getnodename()); String color = request.getparameter("color"); String vehicle = request.getparameter("vehicle"); String font = request.getparameter("font"); System.out.println("You selected the color " + color); System.out.println("You selected the choice " + vehicle); changedombystyle(doc, color, vehicle, font); PrintWriter pwr = response.getwriter(); try { DOMSource ds = new DOMSource(doc) ; 3

mytransformer = tf.newtransformer(ds); StreamSource xmlsource; if (vehicle.equals("cars")){ xmlsource = new StreamSource(ctx.getResourceAsStream("/WEB-INF/Cars.xml")); mytransformer.transform(xmlsource, new StreamResult(pwr)); if (vehicle.equals("trucks")){ xmlsource = new StreamSource(ctx.getResourceAsStream("/WEB-INF/Trucks.xml")); mytransformer.transform(xmlsource, new StreamResult(pwr)); if (vehicle.equals("motorcycles")){ xmlsource = new StreamSource(ctx.getResourceAsStream("/WEB-INF/Moto.xml")); mytransformer.transform(xmlsource, new StreamResult(pwr)); System.out.println("Sending back the xml tranformed into html"); response.setcontenttype("text/html"); pwr.println("the response sent back as a page!"); pwr.close(); catch (Exception e) { e.printstacktrace(); System.out.println("dopost stop"); XSL file: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <head> <title>used Vehicles</title> </head> <body> <h1 style="background-color: #446600; color: #FFFFFF; font-size: 20pt; text-align: center; letter-spacing: 1.0em"></h1> <table align="center" border="2"> <thead> <tr> <xsl:value-of select="name(*/*/@*[1])" /> <xsl:value-of select="name(*/*/@*[2])" /> <xsl:value-of select="name(*/*/@*[3])" /> 4

<xsl:value-of select="name(*/*/*[1])" /> <xsl:value-of select="name(*/*/*[2])" /> <xsl:value-of select="name(*/*/*[3])" /> </tr> </thead> <tbdody> <xsl:apply-templates /> </tbdody> </table> </body> </html> </xsl:template> <xsl:template match="/*/*"> <tr> <xsl:value-of select="@*[1]" /> <xsl:value-of select="@*[2]" /> <xsl:value-of select="@*[3]" /> <xsl:value-of select="*[1]" /> <xsl:value-of select="*[2]" /> <xsl:value-of select="*[3]" /> </tr> </xsl:template> </xsl:stylesheet> 5

6

7