Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Επερώτηση XML Εγγράφων: Η Γλώσσα XPath ιαχείριση εδομένων στον Παγκόσμιο Ιστό Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων ευτέρα 17 Οκτ 2016
Τι Είναι η XPath; Η XPath είναι μια σύνταξη για επιλογή τμημάτων ενός XML εγγράφου Ο τρόπος που η XPath περιγράφει μονοπάτια σε elements είναι παρόμοιος με τον τρόπο που ένα λειτουργικό σύστημα περιγράφει μονοπάτια σε αρχεία H XPath είναι σχεδόν μια μικρή γλώσσα προγραμματισμού Έχει συναρτήσεις, ελέγχους και εκφράσεις H XPath είναι W3C standard H XPath δεν είναι γραμμένη σε XML, αλλά χρησιμοποιείται ευρέως στην XSLT Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 2
XPath Expressions Ευέλικτος συμβολισμός για την πλοήγηση σε δένδρα Μια βασική τεχνολογία που χρησιμοποιείται ευρέως Μοναδικότητα και scope στο XML Schema Pattern matching και επιλογή στην XSLT Συσχετίσεις σε XLink και σε XPointer XLink: Μια XML markup γλώσσα που επιτρέπει τη δημιουργία εσωτερικών και εξωτερικών συνδέσμων σε XML έγγραφα, καθώς και η συσχέτιση μεταδεδομένων με τους συνδέσμους XPointer: Μια γλώσσα για τον εντοπισμό τμημάτων από URI στο internet τα οποία είναι σε μορφή XML Υπολογισμοί τιμών σε XSLT και XQuery Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 3
Location Paths Ένα location path αποτελεί μια έκφραση που αποτιμάται σε μια ακολουθία κόμβων (sequence of nodes) σχετικά με τον context node Η ακολουθία είναι ταξινομημένη με βάση τη σειρά εμφάνισης στο XML έγγραφο Η ακολουθία δεν περιέχει ποτέ διπλότυπα Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 4
Location Steps Ένα location path αποτελείται από μια ακολουθία από steps Ένα location step περιέχει Έναν άξονα (axis) Ένα έλεγχο κόμβων (nodetest) Ορισμένα κατηγορήματα (predicates) axis :: nodetest [Exp 1 ] [Exp 2 ] Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 5
Αποτίμηση ενός Location Path Ένα step αντιστοιχίζει έναν context node σε μια ακολουθία κόμβων Επίσης, αντιστοιχίζει ακολουθίες κόμβων (Α) σε ακολουθίες κόμβων (Β) Κάθε κόμβος της Α χρησιμοποιείται σαν context node Και αντικαθίσταται από το αποτέλεσμα Β που προκύπτει εφαρμόζοντας το step Τέλος, το path εφαρμόζει κάθε step ένα ένα Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 6
Παράδειγμα Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 7
Παράδειγμα Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 8
Παράδειγμα Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 9
Παράδειγμα Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 10
Παράδειγμα Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 11
Contexts To context μιας XPath αποτίμησης αποτελείται από Έναν context node (ένας κόμβος του XML δένδρου) Ένα context position και size (δύο μη αρνητικοί ακέραιοι) Ένα σύνολο από variable bindings Μια βιβλιοθήκη συναρτήσεων (function library) Ένα σύνολο από δηλώσεις namespace Η εφαρμογή καθορίζει το αρχικό context Εάν το path ξεκινά με / τότε Το αρχικό context είναι η ρίζα (root) Τα αρχικά size και position ισούνται με 1 Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 12
Άξονες (Axes) Ένας άξονας (axis) είναι μια ακολουθία από κόμβους Ο άξονας αποτιμάται σε σχέση με τον context node H XPath υποστηρίζει τους ακόλουθους άξονες child descendant parent ancestor following-sibling preceding-sibling attribute following preceding self descendant-or-self ancestor-or-self Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 13
Κατευθύνσεις Αξόνων (Axes Directions) Κάθε άξονας έχει μια κατεύθυνση Forwards σημαίνει σειρά εγγράφου Child, descendant, following-sibling, following, self, descendant-or-self Backwards σημαίνει αντίστροφη σειρά εγγράφου Parent, ancestor, preceding-sibling, preceding Stable, αλλά εξαρτάται από την υλοποίηση Attribute Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 14
Parent Axis Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 15
Child Axis Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 16
Descendant Axis Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 17
Ancestor Axis Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 18
Following-sibling Axis Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 19
Preceding-sibling Axis Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 20
Following Axis Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 21
Preceding Axis Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 22
Έλεγχοι Κόμβων (Node-tests) text() comment() processing-instruction() node() * QName (qualified name) A name optionally qualified with a namespace prefix Π.χ. para ή fo:block *:NCName (non-colonized name) NCName:* Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 23
Κατηγορήματα (Predicates) Γενικές XPath εκφράσεις που ορίζουν περαιτέρω συνθήκες που πρέπει να ικανοποιούν οι επιλεγμένοι κόμβοι Σαν ένα φίλτρο που εφαρμόζεται στο node-set Παραδείγματα [@title='introduction'] κόμβοι με attribute title με τιμή Introduction [position()!= 1] κόμβοι που δεν είναι πρώτοι στο ήδη επιλεγμένο node-set Αποτιμώνται με βάση τον τρέχον κόμβο ως context Το αποτέλεσμα γίνεται boolean Ένας αριθμός δίνει true όταν ισούται με την context position Ένα string δίνει true όταν δεν είναι κενό Μια ακολουθία δίνει true εφόσον δεν είναι κενή Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 24
Abbreviations (none) @ είναι ισοδύναμο με child:: είναι ισοδύναμο με attribute::. είναι ισοδύναμο με self::node().//x είναι ισοδύναμο με self::node()/descendant-or-self::node()/child::x.. είναι ισοδύναμο με parent::node()../x είναι ισοδύναμο με parent::node()/child::x // είναι ισοδύναμο με /descendant-or-self::node()/ //X είναι ισοδύναμο με /descendant-or-self::node()/child::x Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 25
Παραδείγματα XPath
Γενικές Εκφράσεις (General Expressions) Κάθε έκφραση αποτιμάται σε μια ακολουθία από Ατομικές τιμές Κόμβους Ατομικές τιμές μπορεί να είναι Αριθμοί Booleans Unicode strings Datatypes που ορίζονται στο XML Schema Οι κόμβοι έχουν αναγνωριστικό (identity) Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 27
Παράδειγμα DTD <!DOCTYPE BARS [ <!ELEMENT BARS (BAR*, BEER*)> <!ELEMENT BAR (PRICE+)> <!ATTLIST BAR name ID #REQUIRED> <!ELEMENT PRICE (#PCDATA)> <!ATTLIST PRICE thebeer IDREF #REQUIRED> <!ELEMENT BEER EMPTY> <!ATTLIST BEER name ID #REQUIRED> <!ATTLIST BEER soldby IDREFS #IMPLIED> ]> Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 28
Παράδειγμα XML Εγγράφου <BARS> <BAR name = JoesBar > <PRICE thebeer = Bud >2.50</PRICE> <PRICE thebeer = Miller >3.00</PRICE> </BAR> <BEER name = Bud soldby = JoesBar SuesBar /> </BARS> Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 29
Path Descriptors Απλοί path descriptors είναι ακολουθίες από tags που χωρίζονται από slashes (/) Εάν ο descriptor ξεκινά με / Τότε το path ξεκινά από τη root και έχει όλα τα tags με τη σειρά που εμφανίζονται Εάν ο descriptor ξεκινά με // Τότε το path μπορεί να ξεκινά από οπουδήποτε Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 30
Παράδειγμα: /BARS/BAR/PRICE <BARS> <BAR name = JoesBar > <PRICE thebeer = Bud >2.50</PRICE> <PRICE thebeer = Miller >3.00</PRICE> </BAR> <BEER name = Bud soldby = JoesBar SuesBar /> </BARS> Το /BARS/BAR/PRICE περιγράφει το σύνολο αυτών των δύο PRICE elements καθώς και άλλων PRICE elements για οποιοδήποτε άλλο BAR Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 31
Παράδειγμα: //PRICE <BARS> <BAR name = JoesBar > <PRICE thebeer = Bud >2.50</PRICE> <PRICE thebeer = Miller >3.00</PRICE> </BAR> <BEER name = Bud soldby = JoesBar SuesBar /> </BARS> Το //PRICE περιγράφει τα ίδια PRICE elements, αλλά μόνο επειδή το DTD επιβάλλει σε κάθε PRICE να εμφανίζεται εντός των BARS και BAR Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 32
Wild-Card * Η χρήση του αστερίσκου (*) στη θέση ενός tag υποδηλώνει την ύπαρξη οποιουδήποτε tag Παράδειγμα /*/*/PRICE αντιστοιχεί σε όλα τα PRICE αντικείμενα στο τρίτο επίπεδο nesting Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 33
Παράδειγμα: /BARS/* <BARS> <BAR name = JoesBar > <PRICE thebeer = Bud >2.50</PRICE> <PRICE thebeer = Miller >3.00</PRICE> </BAR> <BEER name = Bud soldby = JoesBar SuesBar /> </BARS> Το /BARS/* περιγράφει όλα τα BAR και BEER elements, όπως αυτά που φαίνονται εδώ Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 34
Attributes Στην XPath, αναφερόμαστε σε attributes βάζοντας το σύμβολο @ πριν το όνομα του attribute Τα attributes ενός tag μπορούν να εμφανίζονται σε paths, σαν να ήταν εμφωλιασμένα στο ίδιο tag Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 35
Παράδειγμα: /BARS/*/@name <BARS> <BAR name = JoesBar > <PRICE thebeer = Bud >2.50</PRICE> <PRICE thebeer = Miller >3.00</PRICE> </BAR> <BEER name = Bud soldby = JoesBar SuesBar /> </BARS> Το /BARS/*/@name επιλέγει όλα τα name attributes των άμεσων subelements του BARS element Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 36
Selection Conditions (Συνθήκες Επιλογής) Μια συνθήκη επιλογής εντός [ ] μπορεί να ακολουθεί ένα tag Σε αυτή την περίπτωση Μόνο μονοπάτια που έχουν αυτό το tag και επιπλέον ικανοποιούν τη συνθήκη, εμπεριέχονται στο αποτέλεσμα της path expression Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 37
Παράδειγμα: Συνθήκη Επιλογής /BARS/BAR/PRICE[text() < 2.75] <BARS> <BAR name = JoesBar > <PRICE thebeer = Bud >2.50</PRICE> <PRICE thebeer = Miller >3.00</PRICE> </BAR> Η συνθήκη ότι το PRICE είναι μικρότερο του 2.75 επιστρέφει αυτή την μπύρα κι όχι τη Miller Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 38
Παράδειγμα: Attribute σε Συνθήκη Επιλογής /BARS/BAR/PRICE[@theBeer = Miller ] <BARS> <BAR name = JoesBar > <PRICE thebeer = Bud >2.50</PRICE> <PRICE thebeer = Miller >3.00</PRICE> </BAR> Επιλέγεται αυτό το element, καθώς και οποιοδήποτε άλλο PRICE element για τη Miller Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 39
Axes (Άξονες) Γενικά, οι path expressions μάς επιτρέπουν να ξεκινούμε από τη root (ρίζα) και να εκτελούμε βήματα (steps) για να βρούμε μια ακολουθία κόμβων σε κάθε βήμα Σε κάθε βήμα, μπορούμε να ακολουθούμε έναν από τους διαθέσιμους άξονες Ο default άξονας είναι child:: Σημαίνει: πήγαινε σε όλα τα παιδιά του τρέχοντος συνόλου κόμβων Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 40
Παράδειγμα: Axes /BARS/BEER είναι συντομογραφία για το /BARS/child::BEER @ είναι συντομογραφία για το attribute:: άξονα Έτσι, το /BARS/BEER[@name = Bud ] είναι συντομογραφία για το /BARS/BEER[attribute::name = Bud ] Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 41
Άλλο Παράδειγμα XML Εγγράφου <?xml version="1.0" encoding="utf-8"?> <Catalog> <Album artist="the Last Shadow Puppets" title="the Age Of The Understatement"> <Track rating="4" length="p3m7s">the Age Of The Understatement</Track> <Track rating="3" length="p2m18s">standing Next To Me</Track> <Track rating="5" length="p2m26s">calm Like You</Track> <Track rating="3" length="p3m38s">separate and Ever Deadly</Track> <Track rating="2" length="p2m37s">the Chamber</Track> <Track rating="3" length="p2m44s">only The Truth</Track> </Album> <Album artist="kings Of Leon" title="because Of The Times"> <Track rating="4" length="p7m10s">knocked Up</Track> <Track rating="2" length="p2m57s">charmer</track> <Track rating="3" length="p3m21s">on Call</Track> <Track rating="4" length="p3m09s">mcfearless</track> <Track rating="1" length="p3m59s">black Thumbnail</Track> </Album> </Catalog> Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 42
Όλα τα Albums: /Catalog/Album <?xml version="1.0" encoding="utf-8"?> <Catalog> <Album artist="the Last Shadow Puppets" title="the Age Of The Understatement"> <Track rating="4" length="p3m7s">the Age Of The Understatement</Track> <Track rating="3" length="p2m18s">standing Next To Me</Track> <Track rating="5" length="p2m26s">calm Like You</Track> <Track rating="3" length="p3m38s">separate and Ever Deadly</Track> <Track rating="2" length="p2m37s">the Chamber</Track> <Track rating="3" length="p2m44s">only The Truth</Track> </Album> <Album artist="kings Of Leon" title="because Of The Times"> <Track rating="4" length="p7m10s">knocked Up</Track> <Track rating="2" length="p2m57s">charmer</track> <Track rating="3" length="p3m21s">on Call</Track> <Track rating="4" length="p3m09s">mcfearless</track> <Track rating="1" length="p3m59s">black Thumbnail</Track> </Album> </Catalog> Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 43
To attribute artist για όλα τα Albums /Catalog/Album/@artist <?xml version="1.0" encoding="utf-8"?> <Catalog> <Album artist="the Last Shadow Puppets" title="the Age Of The Understatement"> <Track rating="4" length="p3m7s">the Age Of The Understatement</Track> <Track rating="3" length="p2m18s">standing Next To Me</Track> <Track rating="5" length="p2m26s">calm Like You</Track> <Track rating="3" length="p3m38s">separate and Ever Deadly</Track> <Track rating="2" length="p2m37s">the Chamber</Track> <Track rating="3" length="p2m44s">only The Truth</Track> </Album> <Album artist="kings Of Leon" title="because Of The Times"> <Track rating="4" length="p7m10s">knocked Up</Track> <Track rating="2" length="p2m57s">charmer</track> <Track rating="3" length="p3m21s">on Call</Track> <Track rating="4" length="p3m09s">mcfearless</track> <Track rating="1" length="p3m59s">black Thumbnail</Track> </Album> </Catalog> Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 44
Όλα τα Tracks για όλα τα Albums /Catalog/Album/Track <?xml version="1.0" encoding="utf-8"?> <Catalog> <Album artist="the Last Shadow Puppets" title="the Age Of The Understatement"> <Track rating="4" length="p3m7s">the Age Of The Understatement</Track> <Track rating="3" length="p2m18s">standing Next To Me</Track> <Track rating="5" length="p2m26s">calm Like You</Track> <Track rating="3" length="p3m38s">separate and Ever Deadly</Track> <Track rating="2" length="p2m37s">the Chamber</Track> <Track rating="3" length="p2m44s">only The Truth</Track> </Album> <Album artist="kings Of Leon" title="because Of The Times"> <Track rating="4" length="p7m10s">knocked Up</Track> <Track rating="2" length="p2m57s">charmer</track> <Track rating="3" length="p3m21s">on Call</Track> <Track rating="4" length="p3m09s">mcfearless</track> <Track rating="1" length="p3m59s">black Thumbnail</Track> </Album> </Catalog> Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 45
Όλα τα Albums του Kings of Leon <?xml version="1.0" encoding="utf-8"?> <Catalog> <Album artist="the Last Shadow Puppets" title="the Age Of The Understatement"> <Track rating="4" length="p3m7s">the Age Of The Understatement</Track> <Track rating="3" length="p2m18s">standing Next To Me</Track> <Track rating="5" length="p2m26s">calm Like You</Track> <Track rating="3" length="p3m38s">separate and Ever Deadly</Track> <Track rating="2" length="p2m37s">the Chamber</Track> <Track rating="3" length="p2m44s">only The Truth</Track> </Album> <Album artist="kings Of Leon" title="because Of The Times"> <Track rating="4" length="p7m10s">knocked Up</Track> <Track rating="2" length="p2m57s">charmer</track> <Track rating="3" length="p3m21s">on Call</Track> <Track rating="4" length="p3m09s">mcfearless</track> <Track rating="1" length="p3m59s">black Thumbnail</Track> </Album> </Catalog> /Catalog/Album[@artist= Kings of Leon ] Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 46
Όλα τα Tracks σε όλα τα Albums του Kings of Leon <?xml version="1.0" encoding="utf-8"?> <Catalog> <Album artist="the Last Shadow Puppets" title="the Age Of The Understatement"> <Track rating="4" length="p3m7s">the Age Of The Understatement</Track> <Track rating="3" length="p2m18s">standing Next To Me</Track> <Track rating="5" length="p2m26s">calm Like You</Track> <Track rating="3" length="p3m38s">separate and Ever Deadly</Track> <Track rating="2" length="p2m37s">the Chamber</Track> <Track rating="3" length="p2m44s">only The Truth</Track> </Album> <Album artist="kings Of Leon" title="because Of The Times"> <Track rating="4" length="p7m10s">knocked Up</Track> <Track rating="2" length="p2m57s">charmer</track> <Track rating="3" length="p3m21s">on Call</Track> <Track rating="4" length="p3m09s">mcfearless</track> <Track rating="1" length="p3m59s">black Thumbnail</Track> </Album> </Catalog> /Catalog/Album[@artist= Kings of Leon ]/Track Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 47
Το Δεύτερο Album /Catalog/Album[2] <?xml version="1.0" encoding="utf-8"?> <Catalog> <Album artist="the Last Shadow Puppets" title="the Age Of The Understatement"> <Track rating="4" length="p3m7s">the Age Of The Understatement</Track> <Track rating="3" length="p2m18s">standing Next To Me</Track> <Track rating="5" length="p2m26s">calm Like You</Track> <Track rating="3" length="p3m38s">separate and Ever Deadly</Track> <Track rating="2" length="p2m37s">the Chamber</Track> <Track rating="3" length="p2m44s">only The Truth</Track> </Album> <Album artist="kings Of Leon" title="because Of The Times"> <Track rating="4" length="p7m10s">knocked Up</Track> <Track rating="2" length="p2m57s">charmer</track> <Track rating="3" length="p3m21s">on Call</Track> <Track rating="4" length="p3m09s">mcfearless</track> <Track rating="1" length="p3m59s">black Thumbnail</Track> </Album> </Catalog> Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 48
Όλα τα Tracks με rating > 2 <?xml version="1.0" encoding="utf-8"?> <Catalog> <Album artist="the Last Shadow Puppets" title="the Age Of The Understatement"> <Track rating="4" length="p3m7s">the Age Of The Understatement</Track> <Track rating="3" length="p2m18s">standing Next To Me</Track> <Track rating="5" length="p2m26s">calm Like You</Track> <Track rating="3" length="p3m38s">separate and Ever Deadly</Track> <Track rating="2" length="p2m37s">the Chamber</Track> <Track rating="3" length="p2m44s">only The Truth</Track> </Album> <Album artist="kings Of Leon" title="because Of The Times"> <Track rating="4" length="p7m10s">knocked Up</Track> <Track rating="2" length="p2m57s">charmer</track> <Track rating="3" length="p3m21s">on Call</Track> <Track rating="4" length="p3m09s">mcfearless</track> <Track rating="1" length="p3m59s">black Thumbnail</Track> </Album> </Catalog> /Catalog/Album/Track[@rating > 2] Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 49
Το text όλων των Tracks <?xml version="1.0" encoding="utf-8"?> <Catalog> <Album artist="the Last Shadow Puppets" title="the Age Of The Understatement"> <Track rating="4" length="p3m7s">the Age Of The Understatement</Track> <Track rating="3" length="p2m18s">standing Next To Me</Track> <Track rating="5" length="p2m26s">calm Like You</Track> <Track rating="3" length="p3m38s">separate and Ever Deadly</Track> <Track rating="2" length="p2m37s">the Chamber</Track> <Track rating="3" length="p2m44s">only The Truth</Track> </Album> <Album artist="kings Of Leon" title="because Of The Times"> <Track rating="4" length="p7m10s">knocked Up</Track> <Track rating="2" length="p2m57s">charmer</track> <Track rating="3" length="p3m21s">on Call</Track> <Track rating="4" length="p3m09s">mcfearless</track> <Track rating="1" length="p3m59s">black Thumbnail</Track> </Album> </Catalog> /Catalog/Album/Track/text() Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 50
Πηγές Αναφοράς XPath http://www.w3.org/tr/xpath/ http://www.w3.org/tr/xpath20/ http://xpathvisualizer.codeplex.com/ http://www.liquid-technologies.com/xpath- Tutorial.aspx Διαχ.Δεδομένων στον ΠΙ, 7ο Εξάμηνο 51