Η XML εκτός από το να είναι μία γλώσσα σήμανσης και μορφοποίησης (markup language), όπως είναι η HTML, είναι και μία μεταγλώσσα βάσει της οποίας μπορούν να δημιουργηθούν νέες γλώσσες. Η XML δεν έχει προκαθορισμένες ετικέτες (tags) και εστιάζεται στην περιγραφή των δεδομένων και των μεταξύ τους σχέσεων, δηλαδή στη σημασιολογία τους, και όχι στον τρόπο εμφάνισής τους. Είναι μία γλώσσα επεκτάσιμη και ευέλικτη, καθώς επιτρέπει την προσθήκη νέων ετικετών και στοιχείων για την περιγραφή των δεδομένων της. Ένα επιπλέον χαρακτηριστικό της είναι ότι έχει τη δυνατότητα να ορίζει τα στοιχεία που χρησιμοποιούνται, αλλά και να επαληθεύει την εγκυρότητά τους. Αυτό προσφέρεται μέσω του Ορισμού Τύπου Εγγράφου (Document Type Definition, DTD). Το βασικό της πλεονέκτημα, όμως, είναι ότι μπορεί να χρησιμοποιηθεί σε κάθε πλατφόρμα, επειδή αποτελείται από κώδικα σε μορφή κειμένου ASCII. Έτσι χρησιμοποιώντας την μπορεί να επιτευχθεί η ανταλλαγή δεδομένων μεταξύ διαφορετικών εφαρμογών ή και συστημάτων διασφαλίζοντας με αυτό τον τρόπο τη διαλειτουργικότητα.
Σύμφωνα με τα παραπάνω, θα μπορούσαμε να αναπαραστήσουμε μία οντότητα, έναν τύπο δεδομένων, μία συγκεκριμένη πληροφορία κ.ο.κ μέσω μίας ετικέτας. Το παρακάτω παράδειγμα είναι ένα μήνυμα για τον John στη Mary χρησιμοποιώντας τη γλώσσα XML [36].
[rgb]0.8,0.8,0.8<<11394> COLSPAN=1><message> |
[rgb]0.8,0.8,0.8<<11395> COLSPAN=1> <to>John</to> |
[rgb]0.8,0.8,0.8<<11396> COLSPAN=1> <from>Mary</from> |
[rgb]0.8,0.8,0.8<<11397> COLSPAN=1> <date>15-12-03</date> |
[rgb]0.8,0.8,0.8<<11398> COLSPAN=1> <subject>Meeting</subject> |
[rgb]0.8,0.8,0.8<<11399> COLSPAN=1> <content>Don't forget our meeting tomorrow at 11 am!</content> |
[rgb]0.8,0.8,0.8<<11400> COLSPAN=1></message> |
Το περιεχόμενο του μηνύματος έχει συμπεριληφθεί σε μία ετικέτα <message>, ενώ η πληροφορία που περιλαμβάνει το μήνυμα έχει περαιτέρω δομηθεί με τη χρήση επιπλέον ετικετών. Το μήνυμα έχει ημερομηνία date, ένα θέμα subject και περιεχόμενο content. Επίσης, έχει πληροφορία για τον αποστολέα from και τον παραλήπτη to. Τονίζεται, ότι οι ετικέτες που χρησιμοποιήθηκαν στο παράδειγμα δεν είναι καθορισμένες σε κάποιο πρότυπο XML, αλλά ````επινοήθηκαν'''' από το συγγραφέα του εγγράφου XML. Αυτό το έγγραφο XML δεν περιέχει εκτελέσιμο κώδικα, αλλά απλώς παρουσιάζει πληροφορία με ένα δομημένο τρόπο.
Ένα άλλο χαρακτηριστικό της XML είναι ότι κάθε ετικέτα μπορεί να ενσωματώνει ένα πλήθος από γνωρίσματα (attributes), τα οποία της δίνουν επιπρόσθετη πληροφορία. Για παράδειγμα θα μπορούσαμε να έχουμε μία ετικέτα, product, που αναπαριστά τη νομισματική αξία ενός προϊόντος. Σε αυτή την περίπτωση η χρήση ενός γνωρίσματος, currency, θα βοηθούσε στον προσδιορισμό του νομίσματος. Κάτι τέτοιο, θα μπορούσαμε να το αναπαριστήσουμε ως ακολούθως:
[rgb]0.8,0.8,0.8<<11401> COLSPAN=1><product> |
[rgb]0.8,0.8,0.8<<11402> COLSPAN=1> <price currency="Euro">25</price> |
[rgb]0.8,0.8,0.8<<11403> COLSPAN=1> <!- define optional characteristics here -> |
[rgb]0.8,0.8,0.8<<11404> COLSPAN=1></product> |
Βέβαια, στο παραπάνω παράδειγμα θα μπορούσαμε να μην είχαμε χρησιμοποιήσει το γνώρισμα, αλλά διαφορετικά να είχαμε εμφωλιάσει άλλη μία ετικέτα στην ετικέτα του προϊόντος που θα είχε ως τιμή τη λεκτική τιμή του νομίσματος. Γενικά, εάν υπάρχει περίπτωση να έχουμε ταυτόχρονα δύο ή και περισσότερες τιμές για την αναπαράσταση μίας συγκεκριμένης πληροφορίας προτιμάται η χρήση των ετικετών. Αντίθετα, εάν γνωρίζουμε ότι η πληροφορία μπορεί να λάβει μόνο μία τιμή, είναι προτιμότερο να γίνεται χρήση των γνωρισμάτων. Με αυτόν τον τρόπο εξοικονομείται ο όγκος των δεδομένων και έτσι μία τέτοια απόφαση είναι αρκετά σημαντική για ανταλλαγή μεγάλων δεδομένων XML. Έτσι, για την αναπαράσταση ενός βιβλίου με πολλούς συγγραφείς θα διαλέγαμε την πρώτη περίπτωση.
[rgb]0.8,0.8,0.8<<11405> COLSPAN=1><book> |
[rgb]0.8,0.8,0.8<<11406> COLSPAN=1> <author>First Author</author> |
[rgb]0.8,0.8,0.8<<11407> COLSPAN=1> <author>Second Author</author> |
[rgb]0.8,0.8,0.8<<11408> COLSPAN=1> <author>Third Author</author> |
[rgb]0.8,0.8,0.8<<11409> COLSPAN=1></book> |
Έχοντας μιλήσει για τα βασικά δομικά συστατικά της γλώσσας XML ας μιλήσουμε για την εγκυρότητα των εγγράφων XML και την επαλήθευσή της. Ένα τέτοιο έγγραφο που είναι συντακτικά σωστό ονομάζεται καλά σχηματισμένο. Παρ' όλα αυτά, ένα καλά σχηματισμένο έγγραφο δεν είναι απαραίτητα και έγκυρο. Για να είναι ένα έγγραφο έγκυρο θα πρέπει εκτός από συντακτικά σωστό να βασίζεται και στους κανόνες ενός ορισμού τύπου εγγράφου. Ένα τέτοιο έγγραφο προσδιορίζει τη δομή ενός εγγράφου XML καθώς και τη λίστα με τις ````νόμιμες'''' ετικέτες που το αποτελούν. Θα λέγαμε ότι παρέχει τους γραμματικούς κανόνες του εγγράφου και των στοιχείων του. Στην ουσία περιγράφει ένα μοντέλο για τη δομή και το περιεχόμενο ενός εγγράφου XML. Περιγράφει τις σχέσεις ανάμεσα στα στοιχεία του εγγράφου και προσδιορίζει ποια στοιχεία είναι απαραίτητο να υπάρχουν και ποια μπορεί να παραληφθούν. Ένα παράδειγμα ενός ορισμού τύπου εγγράφου είναι το παρακάτω:
[rgb]0.8,0.8,0.8<<11410> COLSPAN=1><!ELEMENT product (name, category?, color?, description?, product-number, | |
[rgb]0.8,0.8,0.8<<11412> COLSPAN=1>availability?)> | |
[rgb]0.8,0.8,0.8<<11414> COLSPAN=1><!ELEMENT name (#PCDATA)> | |
[rgb]0.8,0.8,0.8<<11416> COLSPAN=1><!ELEMENT description (#PCDATA)> | |
[rgb]0.8,0.8,0.8<<11418> COLSPAN=1><!ELEMENT product-number (#PCDATTA)> | |
[rgb]0.8,0.8,0.8<<11420> COLSPAN=1><!ELEMENT availability (#PCDATA)> | |
[rgb]0.8,0.8,0.8<<11422> COLSPAN=1><!ATTLIST product price CDATA #REQUIRED> |
Οι αρχικές ετικέτες του παραδείγματος αφορούν στον προσδιορισμό στοιχείων, ενώ η τελευταία στον προσδιορισμό των χαρακτηριστικών ενός στοιχείου. Οι ετικέτες ενός DTD ξεκινούν με θαυμαστικό ````!'''', το οποίο ακολουθείται από μία δεσμευμένη λέξη (ELEMENT, ENTITY, ATTLIST κ.α.) που προσδιορίζει το είδος της οντότητας που θα οριστεί. Ο παραπάνω ορισμός μπορεί να ειπωθεί ως εξής: ένα προϊόν που είναι μία ετικέτα μπορεί να έχει ως τιμή ένα μοναδικό όνομα, να ανήκει σε καμία ή μία κατηγορία (αυτό υποδηλώνεται από το χαρακτήρα ````?''''), να έχει ή να μην έχει χρώμα και περιγραφή, να έχει ένα μοναδικό αριθμό προϊόντος και τέλος να προσδιορίζεται ή όχι η διαθεσιμότητά του. Ακολούθως, οι ετικέτες του ονόματος, της περιγραφής, του αριθμού προϊόντος και της διαθεσιμότητας θα πρέπει να έχουν ως τιμή ένα αλφαριθμητικό -- δηλώνεται με τη χρήση του ````#PCDATA''''. Τέλος, η ετικέτα του προϊόντος θα πρέπει υποχρεωτικά -- δηλώνεται με το προσδιορισμό ````#REQUIRED'''' -- να φέρει το γνώρισμα της νομισματικής του αξίας, η τιμή της οποίας μπορεί να είναι ένα αλφαριθμητικό.
Σύμφωνα με αυτά, το παρακάτω έγγραφο XML είναι καλά σχηματισμένο, αλλά όχι και έγκυρο, διότι απουσιάζει το γνώρισμα της τιμής από την ετικέτα του προϊόντος και επίσης έχουν οριστεί δύο κατηγορίες για αυτό.
[rgb]0.8,0.8,0.8<<11424> COLSPAN=1><product> |
[rgb]0.8,0.8,0.8<<11425> COLSPAN=1> <name>La Trappe Quadrupel</name> |
[rgb]0.8,0.8,0.8<<11426> COLSPAN=1> <category>Beers</category> |
[rgb]0.8,0.8,0.8<<11427> COLSPAN=1> <category>Wines</category> |
[rgb]0.8,0.8,0.8<<11428> COLSPAN=1> <product-number>39841748567300</product-number> |
[rgb]0.8,0.8,0.8<<11429> COLSPAN=1> <availability>true</availability> |
[rgb]0.8,0.8,0.8<<11430> COLSPAN=1> <description>La Trappe Quadrupel is La Trappe's strongest beer with a |
[rgb]0.8,0.8,0.8<<11431> COLSPAN=1> marvelous amber colour. Its warm taste is full-bodied and mild, slightly |
[rgb]0.8,0.8,0.8<<11432> COLSPAN=1> sweet and pleasantly bitter. A unique beer that is actually laid down for |
[rgb]0.8,0.8,0.8<<11433> COLSPAN=1> years in the cellars of the abbey for further condition. La Trappe |
[rgb]0.8,0.8,0.8<<11434> COLSPAN=1> Quadrupel has 10% ABV.</description> |
[rgb]0.8,0.8,0.8<<11435> COLSPAN=1></product> |
Τονίζεται ότι η σειρά με την οποία εμφανίζονται οι εμφωλιασμένες ετικέτες δεν έχει σημασία.
Charalampos Nikolaou 2008-04-02