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

2 Τί είναι η XML;

Η XML δεν είναι μία σημειαγραφική γλώσσα όπως η HTML, είναι μία γλώσσα που χρησιμοποιείται για την περιγραφή μίας σημειογραφικής γλώσσας. Ο τεχνικός όρος μιας τέτοιας γλώσσας είναι μετα-γλώσσα. Χρησιμοποιώντας την XML ένας προγραμματιστής μπορεί να προσδιορίσει σημειογραφικές γλώσσες που περιγράφουν ηλεκτρονικά κυκλώματα, πληροφορίες για ανταλλαγή ηλεκτρονικών δεδομένων, αρχεία που παράγονται από διακομιστές Ιστού, μηχανικά μέρη αεροσκαφών και ούτω καθεξής. Ένας προγραμματιστής καθορίζει μία συγκεκριμένη γλώσσα χρησιμοποιώντας την XML και ένα εργαλείο, στην συνέχεια παίρνει τα αρχεία XML που περιέχουν κείμενα σε αυτήν την γλώσσα και εκτελεί μία επεξεργασία όπως η μετατροπή τους σε αρχεία MS Word ή σε κάποια άλλη μορφή που μπορεί να παρουσιαστεί από προγράμματα γραφικών.

XML και περιηγητές
Τα αρχεία XML μπορούν να υπάρξουν αυτούσια ή να ενσωματωθούν σε HTML και στην συνέχεια να εμφανισθούν στον περιηγητή. Ο Internet Explorer 5 επιτρέπει στα αρχεία XML να συμπεριληφθούν σε μια ιστοσελίδα με την χρήση επιθεμάτων XML. Ένα αρχείο XML που είναι ενταγμένο σε μια σελίδα HTML ονομάζεται νησί δεδομένων.

2.1 Η ιστορία της XML

Οι ρίζες της XML μπορούν να αναζητηθούν στην εκρηκτική ανάπτυξη του Παγκόσμιου Ιστού στα μέσα της δεκαετίας του 1990 και στους πολέμους των περιηγητών που έλαβαν χώρα μεταξύ της Microsoft Corporation και της Netscape Corporation, όπου καθεμιά από αυτές πάλευε για την απόλυτη κυριαρχία.

Καθώς ο Ιστός γινόταν όλο και πιο μεγάλος, και όλο και περισσότεροι χρήστες τον χρησιμοποιούσαν, οι προγραμματιστές, που χρησιμοποιούσαν HTML άρχισαν να ανακαλύπτουν διάφορα προβλήματα:

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

Το 1998 η γλώσσα, XML, παρουσιάστηκε παγκόσμια από το W3 Consortium: στην πάξη, έγινε ένα πρότυπο του Διαδικτύου.Βασιζόταν στην γλώσσα επεξεργασίας κειμένων SGML, η οποία αποτέλεσε την έμπνευση για την HTML. Ο ρόλος της XML συνοψίζεται στο Σχήμα 8.1, το οποίο παρουσιάζει την σχέση της με άλλες μορφές αποθήκευσης και παρουσίασης.

image

Κοινοπραξία Παγκόσμιου Ιστού

XSL
Θα συναντήσετε συχνά το ακρώνυμο XSL στην βιβλιογραφία που αφορά την XML. Το XSL προέρχεται από το eXtensible Style Language. Πρόκειται για μία γλώσσα που καθορίζει το πώς παρουσιάζονται τα δεδομένα μέσα σε ένα τεκμήριο βασισμένο σε XML. Μπορεί, επίσης, να χρησιμοποιηθεί για τον καθορισμό του πώς ένα τεκμήριο XML μπορεί να μετατραπεί σε ένα αρχείο εκφρασμένο σε κάποια άλλη γλώσσα, όπως η HTML, ή σε μορφή αναγνωρίσμιμη από έναν επεξεργαστή κειμένου, όπως το rtf.

2.2 Ένα παράδειγμα γλώσσας ορισμένης με XML

Πριν μελετήσουμε την XML σε λεπτομέρεια αξίζει να σκιαγραφήσουμε μερικές από τις έννοιές της και να περιγράψουμε μία εφαρμογή που αφορά την ανάπτυξή της. Πρώτα οι έννοιες.

2.2.1 Έννοιες

Η XML χρησιμοποιείται για τον προσδιορισμό μιας σημειογραφικής γλώσσας. Η σημειογραφική γλώσσα περιέχει στοιχεία σημειωμένα με επιθέματα. Για παράδειγμα, τα στοιχεία <PRODUCTNAME> και </PRODUCTNAME> μπορεί να περιγράφουν το όνομα ενός προϊόντος σ΄ έναν κατάλογο λιανικού εμπορίου. Για παράδειγμα:

<PRODUCTNAME> CoatBlueWool </PRODUCTNAME>

Εδώ έχουμε δύο επιθέματα, το ένα από αυτά ληκτικό </PRODUCTNAME>, με το PRODUCTNAME στοιχείο CoatBlueWool κλεισμένο ανάμεσά τους. Κάθε επίθεμα σχετίζεται μ΄ ένα ληκτικό επίθεμα. Στοιχεία μπορεί να εγκλείονται ανάμεσά τους, για παράδειγμα

<PRODUCT>
<PRODUCTNAME> CoatBlue</PRODUCTNAME>
<PRODUCTPRICE> 34000</PRODUCTPRICE>
..
</PRODUCT>

παρουσιάζει λεπτομέρειες προιόντων ανάμεσα στα επιθέματα PRODUCT.

Ένα στοιχείο μπορεί να σχετίζεται με μια ιδιότητα ή χαρακτηριστικό που καθορίζεται στο εναρκτήριο επίθεμα. Μια ιδιότητα ή χαρακτηριστικό είναι δεδομένα που παρέχουν πληροφορίες που διαφοροποιούν ελαφρώς ένα στοιχείο από ένα άλλο που περιγράφεται με τα ίδια επιθέματα. Για παράδειγμα, ένα στοιχείο που σχετίζεται με το επίθεμα <PRODUCT> μπορεί να έχει μια ιδιότητα που να μας πληροφορεί για το ταχυδρομικό βάρος, ώστε όταν αποσταλεί σε έναν πελάτη να μπορεί να υπολογιστεί η συνολική τιμή της παραγγελίας (προϊόν + τέλη). Ένα παράδειγμα ιδιότητας παρουσιάζεται παρακάτω:

<PRODUCT POSTAGE = "Heavy"> 

Εδώ το στοιχείο PRODUCT έχει την ιδιότητα "Heavy" που υποδεικνύει ότι κατατάσσεται στα βαρέα αντικείμενα και διαφοροποιείται από άλλα προϊόντα που κατατάσσονται σε άλλες ταχυδρομικές κατηγορίες. Πριν από κάθε ιδιότητα ή χαρακτηριστικό υπάρχει ένα ίσον και η τιμή της ιδιότητας περικλείεται με εισαγωγικά.

2.2.2 Μία εφαρμογή

Πριν ν' αναλύσουμε την XML αξίζει να δούμε ένα απλό παράδειγμα της τεχνολογίας στην πράξη. Το 1999-2000 ανέπτυξα ένα λεξικό του Διαδικτύου για το Oxford University Press. Ένα από τα προβλήματα που συνάντησα είναι ότι, νέες ορολογίες δημιουργούνται σχεδόν καθημερινά και μια έντυπη έκδοση του λεξικού θα θεωρούνταν ξεπερασμένη πολύ γρήγορα. Οι εκδόσεις κι εγώ αποφασίσαμε ότι ο μόνος τρόπος να αποφευχθεί αυτό ήταν η έκδοση ενός έντυπου αρχείου  σε συνδυασμό με μία έκδοση σε HTML, που ο αγοραστής θα μπορούσε να χρησιμοποιήσει στον υπολογιστή του/της. Ένας ιστοχώρος θα παρείχε, σε τακτική βάση, όλα τα νεότερα στοιχεία για την HTML έκδοση του λεξικού.

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

<ENTRY>
<ENTRYNAME>Cookie</ENTRYNAME>
<ENTRYTEXT>
Ένα cookie είναι ένα αρχείο αποθηκευμένο στον υπολογιστή πελάτη, που χρησιμοποιεί έναν

<INLINK filename = "Browser.htm">ΠΕΡΙΗΓΗΤΗ</INLINK>.

Αρχικά έχει τοποθετηθεί εκεί από έναν
  <INLINK filename = "Server.htm">ΔΙΑΚΟΜΙΣΤΗ</INLINK>

και χρησιμοποιείται για την αποθήκευση πληροφοριών που μπορεί να χρειαστούν
 κατά τη διάρκεια μίας συνόδου με έναν περιηγητή ή κατά την διάρκεια πολλών
  συνόδων. Μία χρήση των cookies είναι να αναγνωρίζουν τους χρήστες και να
προετοιμάζουν ρυθμισμένες ιστοσελίδες ειδικά γι' αυτούς. Για παράδειγμα,
ένα cooklie μπορεί να χρησιμοποιηθεί για την αποθήκευση της ταυτότητας κάποιου
 που χρησιμοποίησε έναν ιστοτόπο
  <INLINK filename = "ECommerce.htm">Η-ΕΜΠΡΟΡΙΟΥ</INLINK>

στον οποίο πωλείται ένα προϊόν, παίρνοντας τα στοιχεία της πιστωτικής κάρτας
 και το όνομα του χρήστη. Αυτό το cookie μπορεί στην συνέχεια να διαβαστεί από
 τον διακομιστή την επόμενη φορά που ο αγοραστής θα χρησιμοποιήσει τον
περιηγητή για να παράγει έναν προσωπικό χαιρετισμό και για να τον απαλλάξει
από την επίπονη διαδικασία της επανάληψης της εισαγωγής των στοιχείων της
πιστωτικής του κάρτας. Μια άλλη χρήση του cookie είναι σε ιστοχώρους
  <INLINK filename = "Etailing.htm">Η-ΛΙΑΝΙΚΗΣ</INLINK> 

όπου το cookie διατηρεί τα περιεχόμενα του
  <INLINK filename = "Shopping Cart.htm">ΚΑΛΑΘΙΟΥ ΑΓΟΡΩΝ</INLINK>.

Τα cookies χρησιμοποιούνται επειδή το πρωτόκολλο
  <INLINK filename = "HTTP.htm">HTTP</INLINK> 

είναι ένα πρωτόκολλο χωρίς καταστάσεις: κάθε μήνυμα που αποστέλλεται από τον
περιηγητή σε HTTP δεν έχει γνώση των προηγούμενων μηνυμάτων. Το όνομα cookie
προέρχεται από τις οντότητες του
  <INLINK filename = "UNIX.htm">UNIX</INLINK> 

που ονομάζονται μαγικά cookies. Πρόκειται για δεδομένα που είναι συνημμένα
στον χρήστη ή στο πρόγραμμα και αλλάζουν ανάλογα με τις ενέργειες του χρήστη
 του προγράμματος. Μερικές φορές τα cookies αναφέρονται ως
  <INLINK filename = "Persistent Cookie.htm">ΠΑΑΡΑΜΕΝΟΝΤΑ COOKIES</INLINK> 

γιατί παραμένουν σe έναν υπολογιστή για μεγάλο χρονικό διάστημα αντί να
παραμείνουν μόνο για μια σύνοδο. Δείτε επίσης το 
  <INLINK filename = "Applet.htm">APPLET</INLINK> 

και το
  <INLINK filename = "Server API.htm">API ΔΙΑΚΟΜΙΣΤΗ</INLINK>.
</ENTRYTEXT> 
<LIST>
<LISTITEM>

Ένα
<EXLINK href = "http://www.cookiecentral.com/">
εξαίρετο περιοδικό
</EXLINK>
ειδικά για τα cookies
</LISTITEM>

<LISTITEM>
Ένα
 <EXLINK href = "http://www.epic.org/privacy/Internet/cookies/">
καλό σύνολο συνδέσμων
</EXLINK>
για cookies.
</LISTITEM>

<LISTITEM>
<EXLINK href = "http://www.webdeveloper.com/hotstuff/ show_cookies.html">
Ένα εργαλείο
</EXLINK>
που σας επιτρέπει να ελέγξετε τί cookies σχετίζονται με έναν ιστοχώρο.
</LISTITEM>

<LISTITEM>
Ένα άρθρο που εξετάζει
<EXLINK href = "http://ignitiondesign.com/journal/cookies/">
τα υπέρ και τα κατά των cookies
</EXLINK>.

</LISTITEM>
</LIST>
</ENTRY>

Αυτό αντιστοιχεί στην παρακάτω καταχώρηση της έντυπης έκδοσης του λεξικού. Οι όροι που αναφέρονται με κεφαλαία είναι καταχωρημένοι στο λεξικό ενώ η λέξη ΣΥΝΔΕΣΜΟΙ στο τέλος υποδεικνύει ότι η έκδοση Ιστού του λεξικού έχει ορισμένους εξωτερικούς συνδέσμους που σχετίζονται μ' αυτήν την καταχώρηση.

Ένα cookie είναι ένα αρχείο αποθηκευμένο στον υπολογιστή πελάτη που χρησιμοποιεί έναν ΠΕΡΙΗΓΗΤΗ. Αρχικά τοποθετείται εκεί από έναν ΔΙΑΚΟΜΙΣΤΗ και χρησιμοποιείται για την αποθήκευση πληροφοριών που μπορεί να χρειαστούν κατά τη διάρκεια μίας συνόδου με έναν περιηγητή ή κατά την διάρκεια πολλών συνόδων. Μία χρήση των cookies είναι να αναγνωρίζουν τους χρήστες και να προετοιμάζουν ρυθμισμένες ιστοσελίδες ειδικά γι' αυτούς. Για παράδειγμα, ένα cooklie μπορεί να χρησιμοποιηθεί για την αποθήκευση της ταυτότητας κάποιου που χρησιμοποίησε έναν ιστοτόπο Η-ΕΜΠΟΡΙΟΥ στον οποίο πωλείται ένα προϊόν, παίρνοντας τα στοιχεία της πιστωτικής κάρτας και το όνομα του χρήστη. Αυτό το cookie μπορεί στην συνέχεια να διαβαστεί από τον διακομιστή την επόμενη φορά που ο αγοραστής θα χρησιμοποιήσει τον περιηγητή για να παράγει έναν προσωπικό χαιρετισμό και για να τον απαλλάξει από την επίπονη διαδικασία της επανάληψης της εισαγωγής των στοιχείων της  πιστωτικής του κάρτας. Μια άλλη χρήση του cookie είναι σε ιστοχώρους Η-ΛΙΑΝΙΚΗΣ όπου το cookie διατηρεί τα περιεχόμενα του ΚΑΛΑΘΙΟΥ ΑΓΟΡΩΝ. Τα cookies χρησιμοποιούνται επειδή το πρωτόκολλο HTTP είναι ένα πρωτόκολλο χωρίς καταστάσεις: κάθε μήνυμα που αποστέλλεται από τον περιηγητή σε HTTP δεν έχει γνώση κανενός από τα προηγούμενα μηνύματα. Το όνομα cookie προέρχεται από τις οντότητες του UNIX που ονομάζονται μαγικά cookies. Πρόκειται για δεδομένα συνημμένα σε έναν χρήστη ή σε ένα πρόγραμμα που αλλάζουν ανάλογα με τις ενέργειες του χρήστη του προγράμματος. Μερικές φορές τα cookies αναφέρονται ως ΠΑΡΑΜΕΝΟΝΤΑ COOKIES επειδή παραμένουν σe έναν υπολογιστή για μεγάλο χρονικό διάστημα αντί να παραμείνουν μόνο για μια σύνοδο. Δείτε επίσης το APPLET και το API ΔΙΑΚΟΜΙΣΤΗ. ΣΥΝΔΕΣΜΟΙ.

Το πρώτο πράγμα που προσέχει κανείς σε αυτή την ελάχιστη σημειογραφική γλώσσα είναι ότι έχει κάποια από τα χαρακτηριστικά της HTML, στο ότι τα επιθέματα εσωκλείονται μέσα σε αγκύλες και ότι κάθε επίθεμα, για παράδειγμα <LIST>, έχει ένα αντίστοιχο ληκτικό επίθεμα. Στην περίπτωση του <LIST> είναι το </LIST>. Μια άλλη ομοιότητα με την HTML είναι το γεγονός ότι κάποια από τα στοιχεία σχετίζονται με ιδιότητες, για παράδειγμα το επίθεμα <EXLINK> σχετίζεται με μια ιδιότητα που είναι ένα URL. Στην περίπτωση του <EXLINK> το όνομα της τιμής είναι href. Το EXLINK αντιπροσωπεύει έναν εξωτερικό σύνδεσμο στο λεξικό Ιστού, όπου ένας τέτοιος σύνδεσμος δείχνει προς έναν εξωτερικό ιστοτόπο σχετικό με την καταχώρηση.

Οι ομοιότητες τελειώνουν εδώ: μερικά από τα παραπάνω επιθέματα δεν είναι μέρος των επιθεμάτων της HTML. Το στοιχείο που προσδιορίζεται από το επίθεμα <ENTRY> αναφέρεται σε μια καταχώρηση του λεξικού, το στοιχείο που προσδιορίζεται από το επίθεμα <ENTRYNAME> αναφέρεται στο όνομα της καταχώρησης στο λεξικό, το στοιχείο που προσδιορίζεται από το επίθεμα <ENTRYTEXT> αναφέρεται στο κείμενο που περιγράφει το όνομα, το στοιχείο που προσδιορίζεται από το επίθεμα <INLINK> αναφέρεται στον υπερσύνδεσμο ενός άλλου αντικειμένου του λεξικού, με το  απλό χαρακτηριστικό όνομα-αρχείου να διατηρεί το όνομα του αρχείου στο οποίο περιέχεται η καταχώρηση, το στοιχείο που προσδιορίζεται από το επίθεμα <LIST> εισάγει ορισμένα αντικείμενα λίστας που περιλαμβάνουν συνδέσμους για ιστοχώρους, οι οποίοι είναι σχετικοί με την καταχώρηση, και το στοιχείο που προσδιορίζει το επίθεμα <LISTITEM> σκιαγραφεί τα αντικείμενα μιας τέτοιας λίστας με το ιδιοχαρακτηριστικό href να υποδεικνύει το URL του ιστοχώρου.

Αυτό είναι ένα απλό παράδειγμα αρχείου σε XML. Όταν ετοίμαζα το λεξικό έγραψα μία σειρά προγραμμάτων που είχαν πρόσβαση στο αρχείο που περιελάμβανε τις καταχωρήσεις: ένα πρόγραμμα παρήγαγε ένα αρχείο MS Word στο οποίο το όνομα της καταχώρησης και το κείμενο εμφανίζονταν μαζί με μια διευκρίνιση για το αν υπήρχαν καθόλου εξωτερικοί σύνδεσμοι, σχετικοί με την καταχώρηση. Ένα άλλο πρόγραμμα παρήγαγε έναν ιστοχώρο στον οποίο κάθε καταχώρηση περιέχονταν σ' έναν αρχείο με άγκιστρα που την διασταύρωναν με άλλες καταχωρήσεις και εξωτερικούς ιστοχώρους, σχετικούς με την καταχώρηση, και ένα τρίτο πρόγραμμα έλεγχε αν όλοι οι εσωτερικοί σύνδεσμοι αναφέρονταν σε κομμάτια του λεξικού.

Αξίζει να σημειώσουμε σ' αυτό το σημείο ότι η XML είναι πιο αυστηρή από την HTML, για παράδειγμα τα επιθέματα εξαρτώνται από την περίπτωση και τα ληκτικά επιθέματα είναι υποχρεωτικά.

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

MathML
Ένα από τα μεγαλύτερα προβλήματα που αντιμετώπισαν οι τεχνολόγοι Ιστού ήταν η ανικανότητα του Παγκόσμιου Ιστού να εμφανίζει μαθηματικά και το γεγονός ότι αν και μερικά μαθηματικά επιθέματα είχαν καθοριστεί για την HTML, είχαν εφαρμοστεί μόνο σε πειραματικούς browsers. Το W3 Consortium χρηματοδότησε ένα πρόγραμμα, το οποίο ανέπτυξε μία μαθηματική σημειoγραφική γλώσσα γνωστή ως MathML. Ήταν η πρώτη εφαρμογή της τεχνολογίας XML. Αρχίζει να υποστηρίζεται σε μαθηματικά πακέτα όπως τα Mathematica και Maple.

Τα προγράμματα ήταν αρκετά εύκολο να αναπτυχθούν γιατί χρησιμοποίησα λογισμικό που περιγράφεται παρακάτω στο κεφάλαιο, συγκεκριμένα έναν μη-επικυρωτικό σαρωτή
XSL
Σχήμα 8.1
Η σχέση μεταξύ της XML και των μέσων αποθήκευσης
SGML
XML πόροι
Οι πόλεμοι των περιηγητών
Στο βιβλίο αυτό θα χρησιμοποιήσω τον όρο "αρχείο XML" για να αναφερθώ σε αρχεία όπως αυτά που παρουσιάζονται εδώ