XML Parsing Γιώργος Θάνος Παρασκευή 14 Νοεμβρίου 2008
Εισαγωγή Η επεξεργασία της πληροφορίας XML βασίζεται σε Η επεξεργασία της XML βασίζεται σε συγκεκριμένα πρότυπα διακριτά από την γλώσσα προγραμματισμού στην οποία υλοποιούνται Τα πρότυπα είναι : Document Object Model (DOM). Simple API for XML (SAX). Streaming API for XML (StAX). Διαφάνεια 2
Document Object Model (DOM) To W3C ξεκίνησε την ανάπτυξη του DOM γύρω στο Το μοντέλο DOM διατηρεί την δενδρική δομή του XML αρχείου. Στην πραγματικότητα πρόκειται για την απεικόνιση του XML σε μία μορφή που είναι προσπελάσιμη από συγκεκριμένο API. Η γλώσσα Javascript ενσωματώνει το DOM standard για την προσπέλαση των στοιχείων της HTML. Κατά συνέπεια όλοι οι browsers πρέπει να ικανοποιούν το συγκεκριμένο standard. Διαφάνεια 3
Document Object Model (DOM) Χαρακτηριστικά του DOM Απαιτεί σημαντικούς πόρους σε μνήμη ανάλογα με το μέγεθος του XML αρχείου. Κατά κανόνα δεν είναι ιδιαίτερα γρήγορος τρόπος προσπέλασης του XML περιεχομένου. Είναι βολικό όταν θέλουμε να γνωρίζουμε το σύνολο της δενδρικής δομής της XML πληροφορίας και να κάνουμε queries σε αυτή. Διαφάνεια 4
Document Object Model (DOM) Βασικά στοιχεία του DOM μοντέλου Node (abstract entity) Document Element Attribute Διαφάνεια 5 Χρήση Java // parse an XML document into a DOM tree DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document document = parser.parse(new File("instance.xml")); Χρήση PHP $objDOM = new DOMDocument(); $objDOM->load(“instance.xml");
Document Object Model (DOM) Βασικές μέθοδοι στη γλώσσα Java getChildNodes() getFirstChild() getLastChild() getNextSibling() getNodeName() getNodeType() getNodeValue() getParentNode() Διαφάνεια 6 getNamespaceURI getPrefix() //namespace prefix getPreviousSibling() getTextContent() hasAttributes() hasChildNodes() insertBefore() removeChild() replaceChild() Το interface Node είναι το βασικό interface.
Simple API for XML (SAX) Ο Sax parser είναι ένας stream parser με event-driven API. Ορίζονται κάποιες callback μέθοδοι, οι οποίες καλούνται κατά το parsing με βάση το είδος του αντικειμένου που συναντά ο parser. Συγκεκριμένα ορίζονται μέθοδοι για τα παρακάτω events: XML Text Nodes XML Element Nodes XML Processing Instructions XML Comments Διαφάνεια 7
Simple API for XML (SAX) - Πλεονεκτήματα Η ιδέα για τον SAX Parser προήλθε μέσα από τα προβλήματα του DOM. Το βασικό του πλεονέκτημα είναι ότι δεν απαιτείται να φορτωθεί όλο το XML δέντρο στη μνήμη προκειμένου να αρχίσει η επεξεργασία. Γρηγορότερος από το DOM για πολύ μεγάλα αρχεία XML διότι η διαδικασία του memory allocation απαιτεί χρόνο. Διαφάνεια 8
Simple API for XML (SAX) - Μειονεκτήματα Εξαιρετικά βολικό όταν τα XML αρχεία ακολουθούν συγκεκριμένο pattern που επαναλαμβάνεται. Εάν δεν ακολουθείται συγκεκριμένο / επαναλαμβανόμενο pattern το προγραμματιστικό μοντέλο γίνεται πολύπλοκο. Συχνά η επεξεργασία απαιτεί το σύνολο του XML αρχείου. Τέτοια παραδείγματα είναι η χρήση Xpath, XQuery και XSLT. Διαφάνεια 9
Simple API for XML (SAX) Ο χρήστης φτιάχνει την δική του κλάση που κληρονομεί την κλάση org.xml.sax.helpers.DefaultHandler. Ο χρήστης ορίζει τις δικές του μεθόδους για κάθε μία από τις μεθόδους που ορίζει η συγκεκριμένη κλάση. Βασικές συναρτήσεις : Διαφάνεια 10 Χρήση Java // parse an XML document into a DOM tree SaxParser parser = SaxParserFactory.newInstance().newSaxParser(); parser.parse(new File("instance.xml"), new UserDefinedHandler() ); 1. startDocument() 2. endDocument() 3. startElement(String uri, String localName, String qName, Attributes attributes) 4. endElement(String uri, String localName, String qName) 5. startPrefixMapping(String prefix, String uri) 6. endPrefixMapping(String prefix)