Κατανεμημένες Εφαρμογές και Ηλεκτρονικό Εμπόριο -> XML

3 Ορισμός γλωσσών βασισμένων σε XML

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

Ο ορισμός είναι γνωστός ορισμός τύπου τεκμηρίου (document type definition), συχνά αποδιδόμενος με την συντομογραφία DTD. Ένα παράδειγμα απλού ορισμού τύπου τεκμηρίου παρουσιάζεται παρακάτω:

  <?xml version = "1.0" encoding ="UTF-8"?>
<!DOCTYPE ENTRY[
<!ELEMENT ENTRY ENTRYPAIR*>
<!ELEMENT ENTRYPAIR (NAME,DEFINITION)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT DEFINITION (#PCDATA)>
]>

Η πρώτη γραμμή καθορίζει την έκδοση της XML που χρησιμοποιείται και τη κωδικοποίηση χαρακτήρων, η δεύτερη γραμμή καθορίζει ότι ο τύπος του τεκμηρίου ονομάζεται ENTRY. Η τρίτη γραμμή που ξεκινά το κυρίως σώμα του ορισμού δηλώνει ότι ένα ENTRY αποτελείται από μία ακολουθία μηδενός ή περισσοτέρων στοιχείων ENTRYPAIR. Ο αστερίσκος δηλώνει την επανάληψη μηδέν η περισσότερες φορές. Ο ορισμός εσωκλείεται σε αγκύλες και εισάγεται με το !ELEMENT. Η επόμενη γραμμή δηλώνει ότι μία καταχώρηση αποτελείται από ένα όνομα σε συνδυασμό με έναν ορισμό. Το κόμμα στην περίπτωση αυτή σηματοδοτεί την συνένωση. Η πέμπτη γραμμή δηλώνει, ότι ένα στοιχείο ονόματος αποτελείται από σαρωμένους χαρακτήρες (PCDATA) (ουσιαστικά κείμενο χωρίς επιθέματα) και η έκτη γραμμή δηλώνει ότι ένα στοιχείο ορισμού αποτελείται και πάλι από χαρακτήρες δεδομένων. Η τελευταία γραμμή κλείνει τον ορισμό.

Αυτό ορίζει μία απλή γλώσσα XML. Ένα παράδειγμα κειμένου εκφραζόμενου στην γλώσσα αυτή παρουσιάζεται παρακάτω:

<ENTRY> 
<ENTRYPAIR>
<NAME>Dodo</NAME>
<DEFINITION>A dead bird</DEFINITION>
</ENTRYPAIR>
<ENTRYPAIR>
  <NAME>Blackbird</NAME>
<DEFINITION>A thieving bird</DEFINITION>
</ENTRYPAIR>
<ENTRYPAIR>
<NAME>Peacock</NAME>
  <DEFINITION>An attractive bird</DEFINITION>
</ENTRYPAIR>
</ENTRY>

Ένα άλλο παράδειγμα είναι το κενό κείμενο

<ENTRY>
</ENTRY>

Και στα δύο αυτά αποσπάσματα το σύνολο του κειμένου εσωκλείεται ανάμεσα στα <ENTRY> ..</ENTRY> επιθέματα, καθένα από τα ζεύγη των καταχωρήσεων σκιαγραφούνται από τα επιθέματα <DEFINITION> ..</DEFINITION> και κάθε ξεχωριστό μέλος ορίζεται από τα <NAME> ..</NAME> και <DEFINITION> .. </DEFINITION> επιθέματα, όπου κάθε επίθεμα έχει το ίδιο όνομα με το στοιχείο.

Υπάρχουν ορισμένοι χαρακτήρες που μπορούν να χρησιμοποιηθούν για τον έλεγχο των επαναλήψεων και της τοποθέτησης. Έχετε ήδη συναντήσει το κόμμα στις συνενώσεις και τον αστερίσκο για την επανάληψη μηδέν ή περισσότερες φορές. Το ερωτηματικό χρησιμοποιείται για την δείξει ότι ένα αντικείμενο μπορεί να εμφανιστεί καμμία ή μία φορά, και το συν υποδεικνύει ότι ένα στοιχείο μπορεί να εμφανιστεί και μία ή περισσότερες φορές. Αν ο προηγούμενος ορισμός αρχείου ήταν γραμμένος ως

<!ELEMENT ENTRY ENTRYPAIR?>
<!ELEMENT ENTRYPAIR (NAME, DEFINITION)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT DEFINITION (#PCDATA)>

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

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

<!ATTLIST elementname attributename attributetype defaultdeclaration>

Το τμήμα attributetype μιας τέτοιας γραμμής μπορεί να περιλαμβάνει μια σειρά προκαθορισμένων τιμών, για παράδειγμα το CDATA αντιπροσωπεύει μία στοιχειοσειρά, το ID αντιπροσωπεύει μία στοιχειοσειρά που πρέπει να αρχίζει μα έναν αλφαβητικό χαρακτήρα και το ENTITIES αντιπροσωπεύει ένα πολλαπλό όνομα χωρισμένο με κενά.

Η τιμή για την προκαθορισμένη δήλωση μπορεί να είναι μία από τις τέσσερις επιλογές που φαίνονται στον Πίνακα 8.1. 

 

Default
Σημασία
#REQUIRED Μία τιμή πρέπει οπωσδήποτε να δοθεί σε αυτή την  ιδιότητα, δεν μπορεί να παραλειφθεί
#IMPLIED Η τιμή της ιδιότητας είναι προαιρετική
"Character string" Η τιμή αυής της ιδιότητας είναι προαιρετική. Αν παραλειφθεί, τότε το ίδιο το αλφαριθμητικό λαμβάνεται ως τιμή
#FIXED "Character string" Η τιμή τοποθετείται μόνιμα στην στοιχειοσειρά, π.χ. σταθερά

Ένα παράδειγμα ορισμού μιας ιδότητας δίνεται παρακάτω στην δεύτερη γραμμή, όπου TOWN είναι το elementname, το NAME είναι το attributename, το CDATA είναι το attributetype και defaultdeclaration είναι το #REQUIRED.

<!ELEMENT TOWN (COUNTY, POPULATION)>
<ATTLIST TOWN NAME CDATA #REQUIRED>

Εδώ ορίζεται το στοιχείο TOWN. Μέσα στο TOWN υπάρχουν δύο άλλα στοιχεία, ένα στοιχείο COUNTY κι ένα στοιχείο POPULATION, με το στοιχείο TOWN να έχει το ιδιοχαρακτηριστικό NAME, για το οποίο πρέπει να παραχθεί μία τιμή. Για παράδειγμα, το απόσπασμα του κειμένου

<TOWN NAME = "Towcester">
<COUNTY> Northamptonshir</COUNTY>
<POPULATION> 8300</POPULATION>
</TOWN>

προσκολλάται στην παραπάνω περιγραφή του TOWN.

Η μόνη ενότητα της XML που δεν έχει ακόμη οριστεί είναι η οντότητες. Πρόκειται για αλφαριθμητικά που μπορούν να αντικατασταθούν μέσα στο κείμενο. Ένα παράδειγμα ορισμού μιας οντότητας είναι το

<!ENTITY Darrel "Darrel C Ince"> 

Αυτό σημαίνει ότι, όταν ένα αρχείο σε γλώσσα XML είναι σε επεξεργασία και η γραμμή οντότητας παραπάνω αποτελεί μέρος του ορισμού τύπου του αρχείου, τότε κάθε φορά που το αλφαριθμητικό &Darrel συναντάται θα αντικαθίσταται από το "Darrel C Ince".

Για να χρησιμοποιήσετε την XML θα πρέπει, αρχικά, να ορίσετε μία σημειογραφκή γλώσσα χρησιμοποιώντας ένα DTD. Αυτό θα καθορίσει τα στοιχεία, τις οντότητες, οι ιδιότητες και τα επιθέματα. Στην συνέχεια θα πρέπει να γράψετε εφαρμογές που να επεξεργάζονται XML, εκφραζόμενα στην γλώσσα που θα έχει ορίσει το DTD. Οι εφαρμογές αυτές θα διαβάσουν το DTD και στην συνέχεια θα επεξεργαστούν το κείμενο οποιουδήποτε τεκμηρίου XML, οριζόμενου από το DTD, ώστε να εκτελέσουν τις λειτουργίες του. Περισσότερες λεπτομέρειες γι' αυτό δίνονται στην επόμενη ενότητα.

Στην ενότητα αυτή περιγράψαμε τον πυρήνα XML. Υπάρχουν ορισμένα ζητήματα της τεχνολογίας αυτής που σκόπιμα τα παρέλειψα, αλλά πρόκειται μόνο για λεπτομέρειες. Σας έδωσα αρκετές γνώσεις ώστε να μπορέσετε να αναπτύξετε αρκετά σύνθετες εφαρμογές.

ορισμός τύπου αρχείων
Πίνακας 8.1
Προκαθοσμένες τιμές για ορισμενες ιδιότητες της XML
Αξίζει να τονίσουμε ότι ο ορισμός της βασιζόμενης σε XML σημειογραφίας ομοιάζει μ'αυτόν του προγραμματισμού γλωσσών, αν και στο τελευταίο υπάρχουν ορισμένοι περιορισμοί στην δομή της γλώσσας έτσι ώστε να μπορεί να συνταχθεί εποικοδομητικά
Άσκηση 8.1
Κατασκευή ενός απλού ορισμού τύπου τεκμηρίου
Εδώ το κείμενο μπορεί να γραφεί σε οποιαδήποτε μορφή με οσοδήποτε λευκό διάχωρο. Για παράδειγμα, θα μπορούσαν να γραφούν όλα στην ίδια γραμμή. Η XML δεν εξαρτάται μία τεχνολογία κατά περίπτωση
Ο ορισμός των COUNTY και POPULATION δεν φαίνεται εδώ
Παραδείγματα γλωσσών βασιζόμενων στην XML
Σ' αυτό το σημείο το μόνο που κάνω είναι να ορίσω τα σύμβολα. Η επεξεργασία τέτοιων ορισμών περιγράφεται παρακάτω