Θέματα Βάσεων Δεδομένων Αποθήκευση XML δεδομένων σε Σχεσιακή Βάση Δεδομένων Θέματα Βάσεων Δεδομένων Αποθήκευση XML δεδομένων σε Σχεσιακή Βάση Δεδομένων Πανεπιστήμιο Ιωαννίνων Τμήμα Πληροφορικής Ιούνιος 2000 Μαρίνα Πλησίτη
Αποθήκευση XML δεδομένων σε Σχεσιακούς Πίνακες ΙΔΕΑ : Λεκτική και Συντακτική ανάλυση των XML αρχείων και αποθήκευση των δεδομένων σε σχεσιακούς πίνακες ΥΠΟΘΕΣΕΙΣ : Δεν απαιτείται η ύπαρξη DTD σχήματος. Το XML αρχείο μπορεί να αναπαρασταθεί από ένα κατευθυνόμενο γράφο.
Συγκεκριμένα Κάθε XML αντικείμενο αναπαρίσταται από ένα κόμβο, ο οποίος μαρκάρεται από το oid του αντικειμένου, που είναι μοναδικό. Η σχέση στοιχείου-υποστοιχείου αναπαρίσταται από μια ακμή στο γράφο και μαρκάρεται από το όνομα του υποστοιχείου. Γίνεται ταξινόμηση των εξερχόμενων ακμών από ένα κόμβο του γράφου με σκοπό την ταξινόμηση των υποστοιχείων που υπάρχουν στο XML αρχείο. Οι τιμές των υποστοιχείων αναπαρίστανται με φύλλα στο γράφο.
Παράδειγμα person id=’1’ age=’55’ name Peter /name address 4711 Fruitdale Ave. /address child person id=’3’ age=’22’ name John /name address 5361 Columbia Ave. /address hobby swimming /hobby hobby cycling /hobby /person /child child person id=’4’ age=’7’ name David /name address 4711 Fruitdale Ave. /address /person /child /person person id=’2’ age=’38’ child id=4 /child name Mary /name address 4711 Fruitdale Ave. /address hobby painting /hobby /person
person age name address child hobby person Peter John Mary 4711 Fruitdale Ave child 4 person age name address 7David 4711 Fruitdale Ave 5361 Columbia Ave painting cyclingswimming Ο γράφος που αντιστοιχεί στο παραπάνω XML αρχείο
ΠΡΟΣΕΓΓΙΣΕΙΣ ΑΠΟΘΗΚΕΥΣΗ ΑΚΜΩΝ Edge Approach Binary Approach ΑΠΟΘΗΚΕΥΣΗ ΤΙΜΩΝ ΣΤΟΥΣ ΚΟΜΒΟΥΣ ΤΟΥ ΓΡΑΦΟΥ Inlining
EDGE APPROACH Αποθήκευση όλων των ακμών του γράφου σε έναν πίνακα Edge Table. Στον Edge Table αποθηκεύονται Τα oid των πηγών (source) και στόχων (target) κάθε ακμής του γράφου Ο αριθμός σειράς της ακμής, που χρησιμοποιείται για την ανάκτηση όλων των χαρακτηριστικών ενός αντικειμένου στη σωστή σειρά, όπως περιγράφονται στο XML αρχείο Η ετικέτα κάθε ακμής (name) Μια flag που καθορίζει αν η ακμή αναπαριστά μια αναφορά σε ένα άλλο αντικείμενο ή στοχεύει σε μια τιμή (φύλλο) Edge(source, ordinal, name, flag, target)
BINARY APPROACH Ομαδοποίηση όλων των ακμών του γράφου με την ίδια ετικέτα σε έναν πίνακα Binary. Δημιουργούμε τόσους Binary πίνακες όσα διαφορετικά χαρακτηριστικά εμφανίζονται στο XML αρχείο. ΔΟΜΗ: B name (source, ordinal, flag, target)
Αποθήκευση τιμών INLINING Αποθήκευση όλων των τιμών των χαρακτηριστικών στον ίδιο πίνακα με τις ακμές. Αποθήκευση τιμών INLINING Αποθήκευση όλων των τιμών των χαρακτηριστικών στον ίδιο πίνακα με τις ακμές. Δεν είμαστε σε θέση να ξέρουμε ποιος είναι ο τύπος των δεδομένων που αποθηκεύουμε. Έτσι, θα πρέπει να προσθέσουμε στους πίνακες μια επιπλέον στήλη που θα δηλώνει τον τύπο δεδομένων στη στήλη “TARGET” κάθε γραμμής. Αυτό είναι πολύπλοκο, αφού η XML δεν κάνει διάκριση μεταξύ διαφορετικών τύπων δεδομένων. Μειονέκτημα Πλεονέκτημα Εύκολη υλοποίηση
Aποθήκευση δεδομένων σε Σχεσιακούς Πίνακες ΒΗΜΑΤΑ Δημιουργία γράφου από το XML αρχείο. Δημιουργία αλγορίθμου αποθήκευσης των ακμών του γράφου σύμφωνα με την EDGE προσέγγιση σε συνδυασμό με την αποθήκευση ακμών με inlining. Δημιουργία αλγορίθμου αποθήκευσης των ακμών του γράφου σύμφωνα με την BINARY προσέγγιση σε συνδυασμό με την αποθήκευση ακμών με inlining. Δημιουργία πινάκων στην Oracle. Μεταφορά των δεδομένων στους αντίστοιχους πίνακες.
Δημιουργία γράφου από το XML αρχείο XMLlib ΕΙΣΟΔΟΣ: ένα XML αρχείο ΕΞΟΔΟΣ: δενδρική δομή που προκύπτει από την ανάλυση του XML αρχείου. XMLlib ΕΙΣΟΔΟΣ: ένα XML αρχείο ΕΞΟΔΟΣ: δενδρική δομή που προκύπτει από την ανάλυση του XML αρχείου. next prev ENTITY REF TEXT root DOCUMENT xmlDoc xmlNodeparent ELEMENT text content TEXT propertiesxmlAttr TEXTENTITY REF
ΥΛΟΠΟΙΗΣΗ ΜΕΘΟΔΩΝ Απαιτείται η δημιουργία ενός ενδιάμεσου αρχείου με δομή SOURCE, LABEL, DESTINATION EDGE: Δημιουργία αρχείου που περιέχει τα δεδομένα στη source, ordinal, name, flag, target BINARY: Εύρεση όλων των χαρακτηριστικών και αποθήκευση σε αντίστοιχα αρχεία με τη δομή source, ordinal, flag, target Αυτά τα αρχεία έχουν το όνομα του χαρακτηριστικού και το πρόθεμα “A_”.
ΠΕΡΙΟΡΙΣΜΟΙ Tα XML αντικείμενα θα πρέπει να έχουν ως χαρακτηριστικό ή ως υποστοιχείο ένα μοναδικό αριθμό (object id) Τα υποστοιχεία κάθε αντικειμένου δεν πρέπει να υπερβαίνουν τα όρια της μιας γραμμής (οι ετικέτες της αρχής και του τέλους του υποστοιχείου πρέπει να βρίσκονται στην ίδια γραμμή) Τα δεδομένα και στις δυο μεθόδους αποθηκεύονται με τη μορφή πλειάδων στα αρχεία και με ένα συγκεκριμένο σύμβολο να διαχωρίζει αυτές τις πλειάδες
Παράδειγμα person id=’1’, age=’55’ name Peter /name address 4711 Fruitdale Ave. /address child person id=’3’ age=’22’ name John /name address 5361 Columbia Ave. /address hobby swimming /hobby hobby cycling /hobby /person /child child person id=’4’ age=’7’ name David /name address 4711 Fruitdale Ave. /address /person /child /person person id=’2’ age=’38’ child id=4 /child name Mary /name address 4711 Fruitdale Ave. /address hobby painting /hobby /person
EDGE INPUT FILE 1|1| age|0| 55| 1|2| name|0| Peter| 1|3| address|0| 4711 Fruitdale Ave.| 1|4| child|1| 3| 1|5| child|1| 4| 2|1| age|0| 38| 2|2| child|1| 4| 2|3| name|0| Mary| 2|4| address|0| 4711 Fruitdale Ave.| 2|5| hobby|0| painting| 3|1| age|0| 22| 3|2| name|0| John| 3|3| address|0| 5361 Columbie Ave.| 3|4| hobby|0| swimming| 3|5| hobby|0| cycling| 4|1| age|0| 7| 4|2| name|0| David| 4|3| address|0| 4711 Fruitdale Ave.| DataFile Source, Ordinal, Name, Flag, Target
1|3|0|4711 Fruitdale Ave.| 2|4|0|4711 Fruitdale Ave.| 3|3|0|5361 Columbie Ave.| 4|3|0|4711 Fruitdale Ave.| A_address 1|2|0|Peter| 2|3|0|Mary| 3|2|0|John| 4|2|0|David| A_name 1|4|1|3| 1|5|1|4| 2|2|1|4| A_child BINARY INPUT FILES 1|1|0|55| 2|1|0|38| 3|1|0|22| 4|1|0|7| 2|5|0|painting| 3|4|0|swimming| 3|5|0|cycling| A_ageA_hobby Source, Ordinal, Flag, Target
Δημιουργία σχεσιακών πινάκων Μπορούμε μέσα από το UNIX να δώσουμε SQL εντολές οι οποίες βρίσκονται μέσα σε ένα αρχείο με την εντολή: sqlplus EDGEBINARY create table Table1 (id number(4), ordinal number(4), name char(15), flag number(2), target char(100)); create table A_address (id number(4), ordinal number(4), flag number(2), target char(100)); create table A_age (id number(4), ordinal number(4), flag number(2), target char(100));... MakeTablesFile.sql
Μεταφορά δεδομένων σε σχεσιακούς πίνακεςSQL*Loader Loader Control File Input Datafiles Log File Bad Files Discard Files Data Base SQL *Loader
Input Data and Datafiles Είναι τα αρχεία όπου βρίσκονται αποθηκευμένα τα δεδομένα με τη μορφή εγγραφών. Ο τρόπος που είναι αποθηκευμένα καθορίζεται από το control file. Control File Είναι ένα αρχείο που δίνει πληροφορίες σε γλώσσα που καταλαβαίνει ο SQL*Loader. Οι πληροφορίες που δίνονται είναι: Που βρίσκονται τα αρχεία. Πώς να μεταφράσει και να μεταφέρει τις πληροφορίες που περιέχουν. Που να αποθηκεύσει τα δεδομένα.
SQL *Loader EDGE BINARY load data infile 'RES.dat' into table table1 fields terminated by '|' (id, ordinal, name, flag, target) Control File Control Files load data infile 'A_address.dat' into table A_address fields terminated by '|' (id, ordinal, flag, target) load data infile 'A_name.dat' into table A_age fields terminated by '|' (id, ordinal, flag, target) load data infile 'A_child.dat' into table A_name fields terminated by '|' (id, ordinal, flag, target)
Αποτελέσματα
SQL> select * from A_name; ID ORDINAL FLAG TARGET Peter Mary John David SQL> select * from A_age; ID ORDINAL FLAG TARGET SQL> select * from A_hobby; ID ORDINAL FLAG TARGET painting swimming cycling
Σύγκριση μεθόδων EDGE: Ανάκτηση αντικειμένων με συγκεκριμένο id. BINARY: Επιλογή συγκεκριμένων χαρακτηριστικών. ΜΕΓΕΘΟΣ ΒΔ ΥΛΟΠΟΙΗΣΗ Στην Edge προσέγγιση προκύπτει ένας μόνο σχεσιακός πίνακας, ενώ στη BINARY περισσότεροι και επομένως απαιτείται περισσότερος αποθηκευτικός χώρος Στην Edge προσέγγιση απαιτείται η δημιουργία ενός μόνο αρχείου φόρτωσης δεδομένων και ενός αρχείου ελέγχου, ενώ στην Binary πρέπει να δημιουργηθούν τόσα αρχεία όσα είναι και τα διαφορετικά χαρακτηριστικά των αντικειμένων στοXML αρχείο. ΕΞΑΓΩΓΗ ΧΡΗΣΙΜΗΣ ΠΛΗΡΟΦΟΡΙΑΣ ΑΠΟ ΤΟΥΣ ΠΙΝΑΚΕΣ