# 1

Σπίγγος Δημήτρης
dmtrs32@gmail.com 2012
Τσιβίκης Βασίλης
undersec.tr3los@gmail.com 2010
Μαρία Θουκυδίδου
marablack3@gmail.com 2014

# Η σύνταξη XML του διαχειριστή δεδομένων

Ο ριζικός κόμβος του δένδρου XML πρέπει να είναι `<data>`, που επιτρέπεται να περιέχει έναν ή περισσότερους ορισμούς πηγής δεδομένων. Κάθε πηγή δεδομένων ορίζεται από κόμβους `<query>` ή `<table>`, και οι δυο αποδέχονται τα παρακάτω προαιρετικά γνωρίσματα:

"id" για ορισμό της ταυτότητας συμβολοσειράς πηγής δεδομένων, που χρησιμοποιείται στη σύνδεση πηγών δεδομένων μεταξύ τους·

"τίτλος" για τον ορισμό ενός τίτλου.

Είναι φυσικά δυνατό να χρησιμοποιήσετε και τις δύο ετικέτες `<query>` ή `<table>` στις ίδιες προδιαγραφές πηγών δεδομένων.

# Εξαγόμενες μεταβλητές

Κάθε πηγή δεδομένων εξάγει κάποιες μεταβλητές που μπορούν να ξαναχρησιμοποιηθούν από άλλες πηγές δεδομένων για να εισάγουν μια εξάρτηση. Όταν οι πηγές δεδομένων εκτελούνται, τα περιεχόμενα αυτών των εξαγόμενων μεταβλητών ξαναορίζονται ανάλογα με την επιλεγμένη ενεργή γραμμή στην τελική προβολή πίνακα. Εάν δεν επιλεγεί καμιά ταξινομημένη γραμμή, τότε η μεταβλητή δεν ορίζεται.

Οποιαδήποτε πηγή δεδομένων ανάλογα με την μεταβλητή επανεκτελείται όταν η μεταβλητή αλλάζει και σε περίπτωση μη ορισμού της μεταβλητής, το αποτέλεσμα εκτέλεσης της πηγής δεδομένων είναι ένα κενό σύνολο δεδομένων.

# Η ετικέτα `<query>`

Χρησιμοποιήστε την ετικέτα `<query>` για ορισμό μιας δήλωσης SQL SELECT, όπως τα περιεχόμενα της ετικέτας. Η σύνδεση με άλλες πηγές δεδομένων μπορούν να επιτευχθεί χρησιμοποιώντας μεταβλητές στο SQL του SELECT.

<data> <query title="Customers" id="customers"> SELECT id, name FROM customers where name like ##name::string </query> <query title="Customer's details" id="cust_details"> SELECT * FROM customers WHERE id=##customers@id::int </query> </data>

Για παράδειγμα η προηγούμενη προδιαγραφή XML ορίζει δύο πηγές δεδομένων:

η πηγή δεδομένων `customers` που επιλέγει κάποια πεδία από τον πίνακα customers και η οποία εξαρτάται από τη μεταβλητή συμβολοσειράς με όνομα `name`. Αυτή η μεταβλητή πρέπει να οριστεί όταν οι πηγές δεδομένων εκτελούνται επειδή δεν θα εξαχθεί από οποιαδήποτε πηγή δεδομένων σε αυτή την προδιαγραφή.

η πηγή δεδομένων `cust_details` που επιλέγει όλες τις λεπτομέρειες ενός πελάτη ορίζεται χρησιμοποιώντας το ID της. Αυτή η δεύτερη πηγή δεδομένων εξαρτάται από την προηγούμενη επειδή η μεταβλητή `customers@id` εξάγεται από την πηγή δεδομένων `customers`.

Εκτέλεση αυτής της προδιαγραφής πηγών δεδομένων θα δημιουργήσει δύο προβολές πίνακα: μία όπου μπορείτε να διαλέξετε έναν πελάτη και μια που εμφανίζει όλα τα γνωρίσματα για τον επιλεγμένο πελάτη.

## Εξαγόμενες μεταβλητές

Κάθε πηγή δεδομένων που ορίζεται από μια ετικέτα `<query>` εξάγει την παρακάτω μεταβλητή για κάθε στήλη του τελικού συνόλου δεδομένων (ο τύπος της μεταβλητής είναι ο ίδιος με τον τύπο της στήλης):

`<data source ID>@<column position>` όπου η θέση της στήλης ξεκινά από 1

`<αναγνωριστικό ID δεδομένων πηγής>@<όνομα στήλης> αν η στήλη του συνόλου δεδομένων είναι μια στήλη πίνακα`

# Η ετικέτα `<table>`

Χρησιμοποιήστε την ετικέτα `<table>` για ορισμό πηγής δεδομένων που θα εμφανίσει τα περιεχόμενα ενός πίνακα. Αυτή η ετικέτα:

απαιτεί το γνώρισμα "name" που αντιπροσωπεύει το όνομα του πίνακα.

μπορεί να έχει ένα γνώρισμα "id" που αντιστοιχεί στην ταυτότητα της πηγής δεδομένων. Εάν δεν είναι παρόν και το ID θα αποδοθεί αυτόματα.

μπορεί να περιέχει μια ετικέτα `<depend>` που ορίζει μια εξάρτηση σε μια άλλη πηγή δεδομένων με το γνώρισμα "foreign_key_table" να ορίζει το όνομα του πίνακα στον οποίον χρησιμοποιούνται ξένα κλειδιά για προσδιορισμό της εξάρτησης και το γνώρισμα "id" μπορεί να ορίσει μια ταυτότητα πηγής δεδομένων διαφορετική από τον προαναφερθέντα πίνακα

Η ετικέτα `<depend>`, η οποία, για μια πηγή δεδομένων από έναν πίνακα, ορίζει μια εξάρτηση σε μια άλλη πηγή δεδομένων από έναν πίνακα:

απαιτεί το γνώρισμα "foreign_key_table" για ορισμό του ονόματος του πίνακα στον οποίον υπάρχουν ξένα κλειδιά που χρησιμοποιούνται για προσδιορισμό της εξάρτησης

μπορεί να έχει ένα γνώρισμα "id" που αντιστοιχεί σε ταυτότητα της πηγής δεδομένων αναφοράς. Εάν δεν δοθεί, τότε η εξάρτηση ίσως αποτύχει εάν δεν υπάρχει πηγή δεδομένων της οποίας η ταυτότητα είναι το γνώρισμα "foreign_key_table".

μπορεί να περιέχει μια ή περισσότερες ετικέτες `<column>` των οποίων τα περιεχόμενα ορίζουν τις στήλες για ταυτοποίηση του ξένου κλειδιού για χρήση· αυτό είναι απαραίτητο εάν υπάρχουν πολλαπλά ξένα κλειδιά και μπορούν να παραλειφθούν εάν υπάρχει μόνο ένα δυνατό ξένο κλειδί. Οι λίστες των στηλών είναι εκείνες από τον πίνακα όπου υπάρχει ξένο κλειδί.

<data> <table id="the_cust" name="customers"/> <table name="orders"> <depend id="the_cust" foreign_key_table="customers"> <column>customer_id</column> </depend> </table> </data>

Για παράδειγμα η προηγούμενη προδιαγραφή XML ορίζει δύο πηγές δεδομένων:

η πηγή δεδομένων `customers` που επιλέγει όλα τα περιεχόμενα του πίνακα customers.

η πηγή δεδομένων `orders` που επιλέγει μεταξύ περιεχομένων του πίνακα `orders`, οι γραμμές που αντιστοιχούν σε μια γραμμή του πίνακα `customers` χρησιμοποιώντας το ξένο κλειδί στις εντολές του πίνακα που εμπεριέχει τη στήλη "orders.customer_id" και το πρωτεύον κλειδί του πίνακα πελατών. Το γνώρισμα "id" της ετικέτας `<depend>` είναι απαραίτητο εδώ για ταυτοποίηση αναφοράς στην πηγή δεδομένων.

Σημειώστε σε αυτό το παράδειγμα ότι:

δεν χρειάζεται να ορίσετε τα πεδία που περιέχονται στη σύνδεση ξένου κλειδιού των πινάκων `orders` και `customers`

οι ταυτότητες πηγών δεδομένων έχουν αποδοθεί στα ονόματα των επιλεγμένων πινάκων καθώς κανένα γνώρισμα "id" δεν έχει οριστεί για τις ετικέτες `<table>`.

## Εξαγόμενες μεταβλητές

Κάθε πηγή δεδομένων που ορίζεται από μια ετικέτα `<query>` εξάγει την παρακάτω μεταβλητή για κάθε στήλη του πίνακα (ο τύπος της μεταβλητής είναι ο ίδιος με τον τύπο της στήλης):

`<αναγνωριστικό ID δεδομένων πηγής>@<όνομα στήλης>`

`<data source ID>@<column position>` όπου η θέση της στήλης ξεκινά από 1