Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεChristobel Glaros Τροποποιήθηκε πριν 10 χρόνια
1
Γλώσσες για ημι-δομημένα δεδομένα (ΗΔΔ) XPath XQuery XSLT (eXtensible Stylesheet Language for Transformations)
2
Γλώσσες για ημι-δομημένα δεδομένα Το υλικό και οι διαφάνειες είναι βασισμένα στο βιβλίο “Database Systems: the complete book” των Molina, Ullman, Widom (Chapter 12) Σημείωση 2
3
Γλώσσες για ημι-δομημένα δεδομένα 3 προγραμματιστικές γλώσσες για ΗΔΔ: –XPath: απλή γλώσσα για περιγραφή συνόλων μονοπατιών σε ένα γράφο ΗΔΔ. –XQuery: πιο πλήρης γλώσσα με κοινά στοιχεία με γλώσσες όπως η SQL. –XSLT: αρχικά αναπτύχθηκε ως γλώσσα μετατροπής, για αλλαγή της δομής XML αρχείων ή/και την μετατροπή τους σε HTML σελίδες. Έχει παρόμοια εκφραστική δύναμη με την XQuery. –Όλες εφαρμόζονται σε XML δεδομένα αλλά ενδεχομένως μπορούν να εφραρμοστούν και σε άλλες αναπαραστάσεις ΗΔΔ. Εισαγωγικά 3
4
Γλώσσες για ημι-δομημένα δεδομένα Βασικό στοιχείο: ακολουθία (sequence) αντικειμένων (items). Αντιστοιχεί στη σχέση του σχεσιακού μοντέλου. Ένα αντικείμενο είναι: –Τιμή βασικού (primitive) τύπου, π.χ., ακέραιος, string, κλπ. –Κόμβος (node), που εξειδικεύεται σε: Κόμβο εγγράφου (document nodes) αναπαριστά ολόκληρα έγγραφα. Κόμβο-στοιχείου (elements): μέρη εγγράφου ανάμεσα σε ζευγάρι ετικετών (μαζί με τις ετικέτες). Κόμβο-ιδιότητα (attributes): ορίζεται μέσα στις αρχικές ετικέτες των στοιχείων. To μοντέλο δεδομένων για XPath/XQuery 4
5
Γλώσσες για ημι-δομημένα δεδομένα Δημιουργούνται με τις εντολές doc(URL) ή/και document(URL). –Παράδειγμα: doc(/usr/class/cs145/bars.xml) Όλα τα ερωτήματα σε XPath και XQuery αναφέρονται, είτε άμεσα είτε έμμεσα, σε ένα κόμβο εγγράφου. –Παράδειγμα: οι ορισμού κλειδιού στο XML Schema συμπεριλαμβάνουν εκφράσεις XPath που αναφέρονται στο έγγραφο που περιγράφεται από το σχήμα. Κόμβοι εγγράφου 5
6
Γλώσσες για ημι-δομημένα δεδομένα <!DOCTYPE BARS [ ]> DTD του τρέχοντος παραδείγματος 6
7
Γλώσσες για ημι-δομημένα δεδομένα 2.50 3.00 … <BEER name = ”Bud” soldBy = ”JoesBar SuesBar … ”/> … Παράδειγμα: κομμάτι εγγράφου Κόμβος στοιχείου Κόμβος ιδιότητας Κόμβος Εγγράφου: όλο συν η πρώτη γραμμή ( <? xml version… ). 7
8
BARS PRICE BEER BAR name = ”JoesBar” name = ”JoesBar” theBeer = ”Miller” theBeer = ”Miller” theBeer = ”Bud” theBeer = ”Bud” SoldBy = ”…” SoldBy = ”…” name = ”Bud” name = ”Bud” 3.00 2.50 Ροζ = έγγραφο Πράσινο = στοιχείο Πορτοκαλί = ιδιότητα Κόκκινο = απλή τιμή Ροζ = έγγραφο Πράσινο = στοιχείο Πορτοκαλί = ιδιότητα Κόκκινο = απλή τιμή bars.xml 8 Κόμβοι και ΗΔΔ Γλώσσες για ημι-δομημένα δεδομένα
9
Η XPath είναι μία γλώσσα για την περιγραφή μονοπατιών σε XML έγγραφα. –Το αποτέλεσμα είναι μία ακολουθία αντικειμένων. Οι απλές εκφράσεις μονοπατιών αποτελούν μία ακολουθία από σύμβολα «/» (slashes) και ετικέτες (αρχίζοντας με /). –Παράδειγμα: /BARS/BAR/PRICE Το αποτέλεσμα δημιουργείται αρχίζοντας από τον κόμβο εγγράφου και επεξεργάζοντας κάθε ετικέτα της έκφρασης με τη σειρά από αριστερά προς τα δεξιά. Μονοπάτια στην XPath 9
10
2.50 3.00 … <BEER name = ”Bud” soldBy = ”JoesBar SuesBar … ”/> … 1 αντικείμενο: το στοιχείο BARS 10 Παράδειγμα: /BARS Γλώσσες για ημι-δομημένα δεδομένα
11
2.50 3.00 … <BEER name = ”Bud” soldBy = ”JoesBar SuesBar …”/> … Όλα τα στοιχεία BAR με τη σειρά που εμφανίζονται. 11 Παράδειγμα: /BARS/BAR Γλώσσες για ημι-δομημένα δεδομένα
12
2.50 3.00 … <BEER name = ”Bud” soldBy = ”JoesBar SuesBar …”/> … Όλα τα στοιχεία PRICE από όλα τα στοιχεία BAR. 12 Παράδειγμα: /BARS/BAR/PRICE Γλώσσες για ημι-δομημένα δεδομένα
13
Αντί στο μονοπάτι να ορίζεται ένα υποστοιχείο με ορισμένη ετικέτα, μπορεί να ορίζεται μία ιδιότητα. Πριν το όνομα των ιδιοτήτων τοποθετείται το σύμβολο @ Παράδειγμα: /BARS/BAR/PRICE/@theBeer 2.50 3.00 … <BEER name = ”Bud” soldBy = ”JoesBar SuesBar …”/> … Αποτέλεσμα: ¨Bud” “Miller”... Μέχρι τώρα το αποτέλεσμα ήταν ακολουθία στοιχείων. Τώρα είναι ακολουθία τιμών Ιδιότητες στα μονοπάτια 13
14
Γλώσσες για ημι-δομημένα δεδομένα Αν το μονοπάτι αρχίζει από το //X, τότε ο υπολογισμός μπορεί να αρχίζει από κάθε (υπο)στοιχείο στο έγγραφο αρκεί η ετικέτα να είναι X. Παράδειγμα: //PRICE 2.50 3.00 … <BEER name = ”Bud” soldBy = ”JoesBar SuesBar …”/> … Αποτέλεσμα: 2.50 3.00 Μονοπάτια που αρχίζουν από οπουδήποτε 14
15
Γλώσσες για ημι-δομημένα δεδομένα Το σύμβολο αστέρι(*) στη θέση ετικέτας συμβολίζει κάθε ετικέτα. Παράδειγμα: –Η έκφραση /*/*/PRICE αντιστοιχεί σε όλα τα στοιχεία τιμής στο τρίτο επίπεδο εμφωλιασμού. –Η έκφραση /BARS/* δίνει ως αποτέλεσμα όλα τα υποστοιχεία του BARS. Wild-Card * 15
16
Γλώσσες για ημι-δομημένα δεδομένα Δίνονται μέσα σε αγκύλες […] και ακολουθούν μία ετικέτα. Όταν υπάρχουν, μόνο τα μονοπάτια που ικανοποιούν τη συνθήκη συνεισφέρουν στο αποτέλεσμα. Συνθήκες επιλογής 16
17
/BARS/BAR/PRICE[. < 2.75] 2.50 3.00 … Λόγω της συνθήκης μόνο το συγκεκριμένο στοιχείο PRICE συμπεριλαμβάνεται στα αποτελέσματα. Η τελεία συμβολίζει το τρέχον στοιχείο. 17 Παράδειγμα: /BARS/BAR/PRICE[. < 2.75] Γλώσσες για ημι-δομημένα δεδομένα
18
2.50 3.00 … Τώρα αυτό το στοιχείο επιλέγεται. 18 Παράδειγμα: /BARS/BAR/PRICE[@theBeer = ”Miller”] Γλώσσες για ημι-δομημένα δεδομένα Επιπλέον παραδείγματα: /BARS/BAR/PRICE[2] /BARS/BEER[@soldBy]
19
Γλώσσες για ημι-δομημένα δεδομένα Γενικά, οι εκφράσεις μονοπατιών μας επιτρέπουν να αρχίζουμε από τη ρίζα και να εκτελούμε βήματα ούτως ώστε να βρίσκουμε μία ακολουθία κόμβων σε κάθε βήμα. Σε κάθε βήμα, μπορούμε να ακολουθήσουμε έναν ή περισσότερους άξονες. –Συμβολίζονται ως :: –Στην πιο απλή περίπτωση (default) πηγαίνουμε στα παιδιά από το τρέχον σύνολο κόμβων στοιχείων. –/BARS/BEER είναι συντομογραφία του /BARS/child::BEER –@ είναι συντομογραφία του attribute:: /BARS/BEER[attribute::name = ”Bud”] Άξονες (Axes) 19
20
Γλώσσες για ημι-δομημένα δεδομένα parent:: = γονέας ή γονείς του τρέχοντος κόμβου. descendant-or-self:: = ο τρέχων κόμβος και όλοι οι απόγονοι. –Συντομογραφία: // Αντίστοιχα ancestor::, ancestor-or-self, κλπ. self (Συντομογραφία: η τελεία). Επιπλέον Άξονες 20
21
Γλώσσες για ημι-δομημένα δεδομένα O σκοπός είναι η επέκταση της XPath με εκφραστική ικανότητα παρόμοια με αυτή της SQL. Υποθέτει το ίδιο μοντέλο δεδομένων, δηλ. ακολουθία κόμβων. Κάθε έκφραση XQuery μπορεί να είναι παράμετρος – είσοδος σε άλλη έκφραση. –Μπορεί να σχηματίζονται ακολουθίες ακολουθιών κόμβων. – Δεν φαίνονται όμως τα διαφορετικά επίπεδα. –Π.χ., (1 2 () (3 4)) => (1 2 3 4). XQuery 21
22
1.Καμία, μία ή παραπάνω for ή/και let προτάσεις (clauses). –με οποιαδήποτε σειρά. 2.Προαιρετικά μία where πρόταση. 3.Μία return πρόταση. Αναλογία με SELECT-FROM-WHERE σε SQL 22 Εκφράσεις FLWR Γλώσσες για ημι-δομημένα δεδομένα
23
Κάθε for δημιουργεί ένα βρόχο. Το let παράγει ένα ορισμό τοπικής μεταβλητής. Σε κάθε επανάληψη μέσα στο βρόχο, ελέγχεται η where πρόταση. Αν η where πρόταση επιστρέψει TRUE, καλείται η return πρόταση, και το αποτέλεσμά της προστίθεται στην τελική έξοδο. 23 Νόημα εκφράσεων FLWR Γλώσσες για ημι-δομημένα δεδομένα
24
Σύνταξη: for in,... Οι μεταβλητές αρχίζουν με $. Στο βρόχο που δημιουργείται, στη μεταβλητή ανατίθεται κάθε αντικείμενο της ακολουθίας που αντιστοιχεί στην έκφραση, με τη σειρά. Ο,τιδήποτε ακολουθεί την for πρόταση, εκτελείται μία φορά για κάθε μία ανάθεση. 24 Πρόταση FOR Γλώσσες για ημι-δομημένα δεδομένα
25
for $beer in document(”bars.xml”)/BARS/BEER/@name return {$beer} $beer: οι ιδιότητες “name” από όλες τις μπύρες του παραδείγματος. Το αποτέλεσμα είναι ακολουθία από στοιχεία ΒEERNAME: Bud Miller... Αντικαθιστά ό,τι είναι μέσα στις αγκύλες με την τιμή του. 25 Πρόταση FOR: παράδειγμα Γλώσσες για ημι-δομημένα δεδομένα
26
26 Χρήση Αγκυλών {..} Γλώσσες για ημι-δομημένα δεδομένα Αν η ερώτηση ήταν: for $beer in document(”bars.xml”)/BARS/BEER/@name return $beer Το αποτέλεσμα θα ήταν: $beer –Αντίθετα εκφράσεις όπως η «return $beer» δεν έχουν πρόβλημα.
27
Σύνταξη: let :=,... Στην μεταβλητή ανατίθεται η τιμή της αντίστοιχης ακολουθίας. Δεν δημιουργείται βρόχος, αυτό γίνεται με την for. Παράδειγμα: let $d := document(”bars.xml”) let $beers := $d/BARS/BEER/@name return {$beers} Το αποτέλεσμα είναι ένα στοιχείο: Bud Miller … 27 Πρόταση LET Γλώσσες για ημι-δομημένα δεδομένα
28
Οι εκφράσεις είναι στην πραγματικότητα FLWOR και όχι FLWR: μία order-by πρόταση προηγείται της return. Σύνταξη: order by –Και προαιρετικά ascending (default) ή descending. Καθορίζει την σειρά με την οποία τα αντικείμενα επεξεργάζονται από την return για να δημιουργηθεί το τελικό αποτέλεσμα. 28 Πρόταση Order-by Γλώσσες για ημι-δομημένα δεδομένα
29
29 Πρόταση Order-by: παράδειγμα Γλώσσες για ημι-δομημένα δεδομένα Βρες όλες τις τιμές της μπύρας σε αύξουσα σειρά. let $d := document(”bars.xml”) for $p in $d/BARS/BAR/PRICE[@theBeer=”Bud”] order by $p return $p bindings για $p στα στοιχεία PRICE Η ταξινόμηση γίνεται βάσει των τιμών μέσα στα στοιχεία
30
30 Κατηγορήματα (predicates) Γλώσσες για ημι-δομημένα δεδομένα Οι συνθήκες ουσιαστικά υπονοούν existential quantification. Παράδειγμα: /BARS/BAR[@name] σημαίνει “όλα τα μπαρ που έχουν όνομα.” Παράδειγμα: /BARS/BEER[@soldAt = ”Κουρδιστό Γουρούνι”] δίνει τις μπύρες που πωλούνται στη συγκεκριμένη μπυραρία.
31
31 Συγκρίσεις – παράδειγμα: Γλώσσες για ημι-δομημένα δεδομένα Θέλουμε να παράγουμε όλα τα στοιχεία PRICE από όλες τις μπύρες αρκεί αυτές οι μπύρες να πωλούνται (και) στο Joe’s Bar. Το αποτέλεσμα θα είναι στοιχεία BBP με ιδιότητες τα ονομάτα των μπαρ και μπυρών και ως υποστοιχείο την τιμή. Τρόπος επίλυσης: 1.Δημιουργούμε ένα τριπλό βρόχο με μεταβλητές που θα παίρνουν τις τιμές από όλα τα BEER στοιχεία, όλα τα BAR στοιχεία, και όλα τα PRICE υποστοιχεία των τελευταίων. 2.Ελέγχουμε αν 1) η μπύρα πωλείται στο Joe’s Bar και 2) το όνομα της μπύρας και η αντίστοιχη ιδιότητα theBeer στο PRICE στοιχείο είναι ίδια. 3.Δημιουργία ενός στοιχείου εξόδου.
32
Γλώσσες για ημι-δομημένα δεδομένα <!DOCTYPE BARS [ ]> DTD του τρέχοντος παραδείγματος 32
33
Γλώσσες για ημι-δομημένα δεδομένα 2.50 3.00 … <BEER name = ”Bud” soldBy = ”JoesBar SuesBar … ”/> … Παράδειγμα: κομμάτι εγγράφου 33
34
Το ερώτημα: let $bars = doc(”bars.xml”)/BARS for $beer in $bars/BEER for $bar in $bars/BAR for $price in $bar/PRICE where $beer/@soldAt = ”JoesBar” and $price/@theBeer = $beer/@name return {$price} True αν ”JoesBar” εμφανίζεται στην ακολοθία 34 Συγκρίσεις – παράδειγμα: Γλώσσες για ημι-δομημένα δεδομένα
35
35 Αυστηρές Συγκρίσεις : Γλώσσες για ημι-δομημένα δεδομένα Αν θέλουμε η έκφραση να επιστρέφει TRUE μόνο αν η σύγκριση γίνεται με ακολουθία ενός στοιχείου χρησιμοποιούνται οι τελεστές: eq, ne, lt, le, gt, ge. Παράδειγμα: $beer/@soldAt eq ”JoesBar” Είναι true μόνο αν η συγκεκριμένη μπύρα πωλείται αποκλειστικά στο JoesBar. Σύγκριση Στοιχείου με απλή (primitive) τιμή: Τότε το στοιχείο θεωρείται ως η τιμή του (αν αυτή είναι ατομική) Παράδειγμα:BARS/BAR[@name=”JoesBar”]/PRICE[@theBee r=”Bud”] eq ”2.50” είναι true αν η χρέωση για Bud στο JoesBar είναι 2.50.
36
36 Συγκρίσεις μεταξύ στοιχείων : Γλώσσες για ημι-δομημένα δεδομένα Δεν αρκεί τα στοιχεία να έχουν παρόμοιες τιμές, πρέπει να είναι και τα ίδια για να επιστρέφει η σύγκριση ισότητας true. Παράδειγμα: /BARS/BAR[@name=”JoesBar”]/PRICE[@theBeer=”Bud”] eq /BARS/BAR[@name=”SuesBar”]/PRICE[@theBeer=”Bud”] επιστρέφει πάντα false, ανεξάρτητα αν η χρέωση είναι η ίδια. Αν θέλουμε να συγκρίνουμε την τιμή των στοιχείων χρησιμοποιούμε την συνάρτηση data( ) Π.χ., for $s1 in doc(x)/A/B/Z,$s2 in doc(x)/C/Z where data($s1)=data($s2) return $s2/C/D
37
37 Διαγραφή διπλών αντικειμένων: Γλώσσες για ημι-δομημένα δεδομένα Χρησιμοποιείται η συνάρτηση distinct-values(expression) Η συνάρτηση αυτή απομακρύνει όλες τις ετικέτες και συγκρίνει μόνο τις τιμές των string. Π.χ., αν $greekCities αντιστοιχεί σε Athens Thessaloniki Athens, τότε distinct-values($greekCities) δίνει: “Athens” “Thessaloniki”.
38
38 Σχετικά με τις τιμές TRUE/FALSE Γλώσσες για ημι-δομημένα δεδομένα Αν η έκφραση είναι ακολουθία αντικειμένων, έχει τιμή false σε περίπτωση που η ακολουθία είναι κενή. Αν είναι string (συμβολοσειρά), έχει τιμή false σε περίπτωση που είναι κενή, δηλ. “”. Αν είναι αριθμός, τότε είναι false αν είναι 0 ή ΝaN (not a number, π.χ. άπειρο). Διαφορετικά είναι true. Έκφραση some $x in E1 satisfies E2: true αν υπάρχει έστω και μία ανάθεση του $x που να ικανοποιεί την Ε2. Ανάλογα και η έκφραση: every $x in E1 satisfies E2
39
39 Εκφράσεις διακλάδωσης Γλώσσες για ημι-δομημένα δεδομένα Σύνταξη if (E1) then E2 else E3 Επεξεργασία: 1.Υπολογισμός της E1. 2.Αν είναι αληθής, τότε το αποτέλεσμα είναι E2, αλλιώς είναι E3. Δεν μπορεί να υπάρχει μόνο: if (E1) then E2 Παράδειγμα: βρες το υποστοιχείο PRICE του $bar, αν το bar είναι το Joe’s. if($bar/@name eq ”JoesBar”) then $bar/PRICE else ()
40
40 Επιπλέον τελεστές Γλώσσες για ημι-δομημένα δεδομένα >>, <<: Λαμβάνουν υπόψιν τη διάταξη στο κείμενο. Παράδειγμα: $d/BARS/BEER[@name=”Bud”] << $d/BARS/BEER[@name=”Miller”] Είναι true αν και μόνο αν το στοιχείο μπύρας για τη Bud εμφανίζεται πριν από αυτό της Miller στο έγγραφο $d. union, intersect, except Το νόημα είναι παρόμοιο με αυτό της SQL. Στο αποτέλεσμα διαγράφονται οι διπλές τιμές. Τα αποτελέσματα εμφανίζονται με τη σειρά εμφάνισης στο έγγραφο.
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.