Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
Προγραμματισμός Εφαρμογών Διαδικτύου
Προγραμματισμός Εφαρμογών Διαδικτύου Ενότητα 8: DTD (Document Type Definition) Φώτης Κόκκορας, Καθηγητής Εφαρμογών, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας
2
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.
3
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
4
Προγραμματισμός Εφαρμογών Διαδικτύου
Σκοποί ενότητας Να αναφέρει τα στοιχεία που χαρακτηρίζουν την ορθότητα σύνταξης ενός XML εγγράφου. Να συντάσσει ένα Document Type Definition. Να αναλύει τα δομικά στοιχεία ενός xml εγγράφου. Να αναλύει τις διαφορές elements και attributes. Προγραμματισμός Εφαρμογών Διαδικτύου
5
Προγραμματισμός Εφαρμογών Διαδικτύου
Περιεχόμενα ενότητας Δομώντας ένα XML έγγραφο. Πώς Δηλώνεται ένα DTD. Δηλώσεις Στοιχείων (elements). Δηλώσεις Ιδιοτήτων (attributes). Αναφορές Οντοτήτων. DTD για element. XML Record. Προγραμματισμός Εφαρμογών Διαδικτύου
6
Δομώντας ένα XML Έγγραφο
τα στοιχεία (elements) που θα χρησιμοποιηθούν οι ιδιότητες (attributes) που θα έχει (αν θα έχει) το κάθε στοιχείο οι τιμές των attributes η σειρά εμφάνισης των στοιχείων το πλήθος των στοιχείων οι σχέσεις πατρότητας των στοιχείων δηλ. ποια στοιχεία μπορεί να περιέχει κάποιο στοιχείο (υπάρχουν επιπλέον πράγματα που δεν θα μας απασχολήσουν) Όλα τα παραπάνω, για δεδομένη εφαρμογή, ορίζουν την γραμματική (grammar) της γλώσσας XML της εφαρμογής. Η κωδικοποίησή της μπορεί να γίνει με 2 τρόπους: DTD (Document Type Definition): Απλός τρόπος, επαρκής για μεγάλη γκάμα εφαρμογών, αλλά απλών ως επί των πλείστων (θα τον δούμε στη συνέχεια) XML Schema: Παρέχει περισσότερες δυνατότητες (π.χ. υποστηρίζει τύπους δεδομένων!) αλλά είναι και πιο δύσκολος στην εκμάθηση/χρήση (δεν θα μας απασχολήσει). Αν υπάρχουν οι παραπάνω πληροφορίες σχετικά με τα δομικά στοιχεία του εγγράφου, τότε μπορεί να ελεγχθεί η εγκυρότητα του, αν δηλαδή είναι valid. Προγραμματισμός Εφαρμογών Διαδικτύου 6
7
Προγραμματισμός Εφαρμογών Διαδικτύου
Πώς Δηλώνεται ένα DTD; Το DTD μπορεί να δηλωθεί εντός του XML αρχείου ή ως εξωτερική αναφορά. Εσωτερική δήλωση DTD (δηλ. εντός του XML που το χρησιμοποιεί) <!DOCTYPE root-element [element-declarations]> Εξωτερική δήλωση DTD (δηλ. το DTD γίνεται "include" στο XML) <!DOCTYPE root-element SYSTEM "filename"> Προγραμματισμός Εφαρμογών Διαδικτύου 7
8
Τι Σημαίνουν αυτές οι Δηλώσεις;
Στο προηγούμενο παράδειγμα η ερμηνεία των δηλώσεων είναι περίπου η εξής: Υπάρχει ένα στοιχείο ρίζα με όνομα person. Μέσα του πρέπει να υπάρχουν στοιχεία name και surname, με αυτή τη σειρά. Κάθε ένα από αυτά τα στοιχεία περιέχει μέσα του κείμενο (#PCDATA) Η ακριβής σύνταξη ενός DTD θα εξηγηθεί παρακάτω Γιατί Χρησιμοποιούμε DTD; Με το DTD κάθε XML έγγραφο μεταφέρει μαζί του και μια περιγραφή του εαυτού του! Μέσω του DTD, ανεξάρτητοι μεταξύ τους χρήστες μπορούν να συμφωνήσουν στην κωδικοποίηση ανταλλαγής δεδομένων. Μια εφαρμογή μπορεί μέσω του DTD να ελέγξει: αν τα δεδομένα που παρέλαβε από εξωτερική πηγή είναι έγκυρα αν τα δεδομένα που παρήγαγε η ίδια είναι έγκυρα Προγραμματισμός Εφαρμογών Διαδικτύου 8
9
Tα Δομικά Στοιχεία ενός XML
Είδαμε (slides XML) ότι ένα XML έγγραφο χτίζεται με τα ακόλουθα δομικά στοιχεία: στοιχεία (elements) - οι γνωστές ετικέτες/tags πχ το div στην γλώσσα XHTML ιδιότητες (attributes) πχ το class στον ακόλουθο XHTML κώδικα <div class="main"></div> αναφορές οντοτήτων (entity reference) (βλ. και slides XML) πχ τα < , > , & , " , ' (για τα <, >, &, ", ') CDATA (Character Data) – αλφαριθμητικά που θα ληφθούν ως έχουν Δεν θα περάσουν δηλαδή από τον ελεγκτή σύνταξης (parser) της γλώσσας) (βλ. slides XML) Άρα τυχόν markup (ετικέτες, κτλ) εντός τέτοιων δεδομένων ΔΕΝ θα ληφθεί ως XML. PCDATA (Parsed Character Data) – Αλφαριθμητικά που θα περάσουν από τον parser της γλώσσας (βλ. slides XML). Άρα τυχόν markup (ετικέτες, κτλ) εντός τέτοιων δεδομένων θα ληφθεί ως XML. Άρα σε ένα DTD πρέπει να μπορούμε να περιγράψουμε στοιχεία, ιδιότητες και αναφορές οντοτήτων (τα CDATA και PCDATA δεν αναλύονται περισσότερο). Με αυτό θα ασχοληθούμε στη συνέχεια. Προγραμματισμός Εφαρμογών Διαδικτύου 9
10
Δηλώσεις Στοιχείων (elements) 1/5
Για κάθε XML στοιχείο θα πρέπει να υπάρχει μια δήλωση της μορφής: <!ELEMENT element_name content_specification> element_name είναι το όνομα του στοιχείου για την σύνταξη των ονομάτων ισχύουν οι κανόνες της XML για well-formed έγγραφα (βλ. slides XML) το content_specification προσδιορίζει το τι επιτρέπεται ως περιεχόμενο του στοιχείου Προσδιορισμός του Περιεχομένου ενός Στοιχείου για κενά στοιχεία - EMPTY Παράδειγμα δήλωσης σε DTD: <!ELEMENT br EMPTY> Παράδειγμα XML: <br/> το γνωστό <br> της HTML (αλλαγή γραμμής) σε XHTML έκδοση! για στοιχεία με κείμενο - #PCDATA (parsed character data) Παράδειγμα δήλωσης σε DTD: <!ELEMENT phone_number (#PCDATA) Παράδειγμα XML: <phone_number> </phone_number> Το στοιχείο ΔΕΝ μπορεί να περιέχει άλλα στοιχεία ως παιδία. Πρόκειται για την πιο συνηθισμένη περίπτωση. Προσοχή στις παρενθέσεις! Τα EMPTY και ANY γράφονται χωρίς ενώ το #PCDATA με παρενθέσεις. Προγραμματισμός Εφαρμογών Διαδικτύου 10
11
Προγραμματισμός Εφαρμογών Διαδικτύου
Δηλώσεις Στοιχείων (elements) 2/5 Προσδιορισμός του Περιεχομένου ενός Στοιχείου για στοιχεία με ένα στοιχείο-παιδί (υποχρεωτικά!) - (βάζουμε το όνομά του) Παράδειγμα δήλωσης σε DTD: <!ELEMENT address (street)> Παράδειγμα XML: <address><street>Φαρσάλων</street></address> για στοιχεία με πολλά στοιχεία-παιδιά - (όνομα1, όνομα2, όνομα3,…) Παράδειγμα δήλωσης σε DTD: <!ELEMENT date (year, month, day)> Παράδειγμα XML (η σειρά χρήσης πρέπει να συμφωνεί με τη σειρά δήλωσης στο DTD): <date><year>2012</year><month>June</month><day>17</day></date> Μπορούμε να ορίσουμε και το πλήθος των στοιχείων-παιδιών εντός του πατρικού: ? – επιτρέπεται κανένα ή ένα στοιχείο (δηλ. το πολύ ένα) * - επιτρέπεται κανένα ή περισσότερα στοιχεία (δηλ. όσα θέλουμε – χωρίς περιορισμό) + - επιτρέπονται ένα ή περισσότερα στοιχεία (δηλ. τουλάχιστον ένα) Παράδειγμα δήλωσης σε DTD: <!ELEMENT company (employee+)> Παράδειγμα XML: (θεωρεί δεδομένη και τη δήλωση: <!ELEMENT employee (#PCDATA)> ) <company><employee>Φώτης</employee><employee>Αφροδίτη</employee></company> δηλαδή μέσα στο company επιτρέπεται ένα ή περισσότερα στοιχεία employee Η ύπαρξη στοιχείων-παιδιών είναι η 2η πιο συνηθισμένη περίπτωση. Προγραμματισμός Εφαρμογών Διαδικτύου 11
12
Προγραμματισμός Εφαρμογών Διαδικτύου
Δηλώσεις Στοιχείων (elements) 3/5 Προσδιορισμός του Περιεχομένου ενός Στοιχείου Μπορούμε να ορίσουμε το στοιχείο-παιδί ως ένα από μια λίστα επιλογών: Παράδειγμα δήλωσης σε DTD: <!ELEMENT library_item ( book | periodical | CD | DVD )> Παράδειγμα XML:(θεωρεί δεδομένη και τη δήλωση:<!ELEMENT book (#PCDATA)> ) <library_item><book>Artificial Intelligence</book><library_item> δηλαδή κάθε library_item περιέχει μόνο ένα εκ των book, periodical, CD, VDV για στοιχεία Γενικού Σκοπού (ANY): περιέχουν κείμενο ή άλλα στοιχεία-παιδιά, αρκεί να είναι δηλωμένα στο DTD Παράδειγμα δήλωσης σε DTD: <!ELEMENT person ANY> Τρία Ολοκληρωμένα Παραδείγματα/Αρχεία XML με χρήση του ANY στο επόμενο slide: Προγραμματισμός Εφαρμογών Διαδικτύου 12
13
Προγραμματισμός Εφαρμογών Διαδικτύου
Δηλώσεις Στοιχείων (elements) 4/5 Προσδιορισμός του Περιεχομένου ενός Στοιχείου Το παράδειγμα (3) ΔΕΝ είναι valid (έγκυρο). Αιτία: δεν υπάρχει συνέπεια στη χρήση του person – εμφανίζεται μια φορά με στοιχεία-παιδιά και μια χωρίς! Προγραμματισμός Εφαρμογών Διαδικτύου 13
14
Προγραμματισμός Εφαρμογών Διαδικτύου
Δηλώσεις Στοιχείων (elements) 5/5 Προσδιορισμός του Περιεχομένου ενός Στοιχείου Οι επιλογές που είδαμε στον ορισμό στοιχείων μερικές φορές δεν επαρκούν. Με χρήση παρενθέσεων μπορεί να ομαδοποιηθούν κάποιες προδιαγραφές και να προκύψει περισσότερο συμπαγής σύνταξη. Για παράδειγμα: <!ELEMENT point ((x, y) | (r, θ))> <!ELEMENT circle (point, (radius | diameter))> <!ELEMENT polygon (point, point, point+)> Σχόλια: Η πρώτη δήλωση περιγράφει σημεία (point) με βάση καρτεσιανές ή πολικές συντεταγμένες. Η δεύτερη κύκλους με βάση το κέντρο και την ακτίνα ή τη διάμετρο. Η τρίτη απαιτεί τουλάχιστον 3 σημεία. Μεικτό Περιεχόμενο Τα στοιχεία με μικτό περιεχόμενο δηλώνονται βάζοντας μέσα σε παρένθεση πρώτα το #PCDATA, στη συνέχεια όλα τα δυνατά στοιχεία με διαχωριστικό την κάθετη γραμμή | και στο τέλος, μετά την παρένθεση, το σύμβολο * Παραδείγματα δήλωσης στοιχείων με μεικτό περιεχόμενο: <!ELEMENT definition (#PCDATA | term)*> <!ELEMENT paragraph (#PCDATA | name | profession | footnote | emphasize | date)*> Προγραμματισμός Εφαρμογών Διαδικτύου 14
15
Δηλώσεις Ιδιοτήτων (attributes) 1/2
Οι ιδιότητες δηλώνονται σε ένα DTD με δηλώσεις της ακόλουθης γενικής μορφής: <!ATTLIST element-name attribute-name attribute-type default-value> element-name είναι το όνομα του στοιχείου στο οποίο χρησιμοποιείται η ιδιότητα attribute-name είναι το όνομα της ιδιότητας attribute-type: συνήθως CDATA ή λίστα επιλογών (δεν θα δούμε περισσότερα). default-value (προκαθορισμένη τιμή) μπορεί να είναι μια από τις ακόλουθες: η επιθυμητή προκαθορισμένη τιμή (αλφαριθμητικό σε διπλά εισαγωγικά) #REQUIRED: όταν θέλουμε ο συντάκτης του XML να οριστεί οπωσδήποτε την ιδιότητα #IMPLIED: όταν ο ορισμός της ιδιότητας από τον συντάκτη της XML είναι προαιρετικός #FIXED value: η ιδιότητα έχει δεδομένη τιμή που δεν μπορεί να αλλάξει – η τιμή ισχύει είτε οριστεί η ιδιότητα στο στοιχείο είτε όχι Παράδειγμα χρησιμότητας προκαθορισμένης τιμής ιδιότητας: Προγραμματισμός Εφαρμογών Διαδικτύου 15
16
Δηλώσεις Ιδιοτήτων (attributes) 2/2
Παράδειγμα χρήσης του #FIXED ως προκαθορισμένης τιμής ιδιότητας: Στα παραπάνω παραδείγματα, το attribute-type των ιδιοτήτων ήταν πάντα CDATA που είναι και το σύνηθες. Μια δεύτερη συχνή περίπτωση είναι να θέλουμε η τιμή της ιδιότητας να προκύπτει με επιλογή από μια δεδομένη λίστα τιμών (enumerated list). Παράδειγμα Προγραμματισμός Εφαρμογών Διαδικτύου 16
17
Elements vs. Attributes
Που είναι καλύτερα να βάζουμε τα δεδομένα, σε στοιχεία (elements) ή σε ιδιότητες (attributes); Επίσημα δεν υπάρχει προτίμηση πέρα από θέματα που προκύπτουν από διάφορους περιορισμούς των δύο λύσεων. πχ δεδομένο attribute μπορούμε να το έχουμε μια φορά (στα elements δεν υπάρχει περιορισμός) Συμβουλή: βάζετε τα δεδομένα σε elements και τα μεταδεδομένα τους σε attributes. πχ σε ένα database record συναλλαγής, ο μοναδικός κωδικός συναλλαγής δεν είναι ουσιαστική πληροφορία αλλά μεταδεδομένο που περιγράφει το database record – δεν είναι δεδομένο της συναλλαγής! <transaction id="123456"> <date> <year>2012</year> <month>6</month> <day>17</day> </date> <amount>10000</amount> </transaction> Όμοια δεν είναι καλή ιδέα να μπουν το όνομα και το επώνυμο κάποιου σε ιδιότητες. Οι ιδιότητες μπορεί να δηλωθούν και με πολλαπλό τρόπο. Παράδειγμα 3x ορισμού: <!ATTLIST element-name attribute-name1 attribute-type1 default-value1 attribute-name2 attribute-type2 default-value2 attribute-name3 attribute-type3 default-value3 > Προγραμματισμός Εφαρμογών Διαδικτύου 17
18
Αναφορές Οντοτήτων (Entity References)
Πρόκειται για μεταβλητές που ορίζουν συντομεύσεις σε κείμενα ή χαρακτήρες. Γνωρίζετε ήδη κάποιες: < , > , & , " , ' (για τα <, >, &, ", ') Εσωτερικός ορισμός οντοτήτων: <!ENTITY entity-name "entity-value"> entity-name: το όνομα της οντότητας entity-value: η τιμή της οντότητας Παράδειγμα δήλωσης σε DTD: <!ENTITY writer "Φώτης Κόκκορας"> <!ENTITY institution "ΤΕΙ Λάρισας"> Παράδειγμα χρήσης σε XML δεδομένα: <author>&writer;&institution;</author> Σημείωση: δηλαδή μια οντότητα έχει 3 μέρη: &, όνομα, ; Εξωτερικός ορισμός οντοτήτων <!ENTITY entity-name SYSTEM "URI/URL"> Παράδειγμα δήλωσης σε DTD: <!ENTITY writer SYSTEM " <!ENTITY institution SYSTEM " Παράδειγμα χρήσης σε XML δεδομένα: <author>&writer;&institution;</author> Προγραμματισμός Εφαρμογών Διαδικτύου 18
19
Παράδειγμα DTD για email element
<?xml version="1.0" encoding="UTF-8"?> <!ELEMENT (head,body)> <!ELEMENT head (from, to+, cc*, subject)> <!ELEMENT from EMPTY> <!ATTLIST from name CDATA #IMPLIED address CDATA #REQUIRED> <!ELEMENT to EMPTY> <!ATTLIST to name CDATA #IMPLIED <!ELEMENT cc EMPTY> <!ATTLIST cc name CDATA #IMPLIED address CDATA #REQUIRED> <!ELEMENT subject (#PCDATA)> <!ELEMENT body (text,attachment*)> <!ELEMENT text (#PCDATA)> <!ELEMENT attachment EMPTY> <!ATTLIST attachment encoding (mime|binhex) "mime" file CDATA #REQUIRED> Σημείωση: η παραπάνω δομή είναι αυθαίρετη και δεν συμφωνεί απαραίτητα με το τι ισχύει στα πραγματικά s. Το encoding attribute ενός attachment element μπορεί να έχει την τιμή "mime" ή "binhex" "mime" είναι η default τιμή Προγραμματισμός Εφαρμογών Διαδικτύου 19
20
XML Record με Βάση το Προηγούμενο DTD
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE SYSTEM " .dtd"> < > <head> <from name="Fotis K." <to /> <to name="Nick" /> <subject>Δοκιμή XML/DTD</subject> </head> <body> <text>Hello XML/DTD World!</text> <attachment encoding="binhex" file="foo.doc" /> </body> </ > Μπορείτε να ελέγξετε την εγκυρότητα ενός XML εγγράφου είτε με ειδικά λογισμικά χειρισμού XML δεδομένων (π.χ. XMLSpy) ή με on-line validators όπως αυτός του W3Schools στη διεύθυνση: Θα χρειαστεί να αποθηκεύσετε το DTD σε αρχείο με όνομα .dtd Προγραμματισμός Εφαρμογών Διαδικτύου 20
21
Τέλος Ενότητας
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.