Προγραμματισμός

XML για τον απόλυτο αρχάριο

Η HTML και ο Παγκόσμιος Ιστός είναι παντού. Ως παράδειγμα της πανταχού παρουσίας τους, πηγαίνω στην Κεντρική Αμερική για το Πάσχα φέτος, και αν το θέλω, θα μπορώ να περιηγηθώ στον Ιστό, να διαβάσω το e-mail μου, ακόμη και να κάνω διαδικτυακές τραπεζικές συναλλαγές από διαδικτυακά καφέ σε Αντίγκουα Γουατεμάλα και Μπελίζ. (Δεν σκοπεύω, ωστόσο, αφού κάτι τέτοιο θα πάρει χρόνο από μια ημερομηνία που έχω με έναν φοίνικα και μια καρύδα γεμάτη ρούμι.)

Παρόλα αυτά, παρά την πανταχού παρουσία και τη δημοτικότητα του HTML, είναι πολύ περιορισμένο σε αυτό που μπορεί να κάνει. Είναι καλό για τη διάδοση ανεπίσημων εγγράφων, αλλά η HTML χρησιμοποιείται τώρα για να κάνει πράγματα για τα οποία δεν σχεδιάστηκε ποτέ. Η προσπάθεια σχεδιασμού βαρέων καθηκόντων, ευέλικτων, διαλειτουργικών συστημάτων δεδομένων από HTML είναι σαν να προσπαθείς να φτιάξεις αεροπλανοφόρο με πριόνια και κολλητήρια: τα εργαλεία (HTML και HTTP) απλά δεν είναι έτοιμα.

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

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

Αυτό το άρθρο θα παρουσιάσει το ιστορικό των γλωσσών σήμανσης και πώς δημιουργήθηκε η XML. Θα εξετάσουμε τα δείγματα δεδομένων σε HTML και θα προχωρήσουμε σταδιακά σε XML, δείχνοντας γιατί παρέχει έναν ανώτερο τρόπο αναπαραγωγής δεδομένων. Θα διερευνήσουμε τους λόγους για τους οποίους μπορεί να χρειαστεί να δημιουργήσετε μια προσαρμοσμένη γλώσσα σήμανσης και θα σας διδάξω πώς να το κάνετε. Θα καλύψουμε τα βασικά της σημείωσης XML και τον τρόπο εμφάνισης XML με δύο διαφορετικά είδη γλωσσών στυλ. Στη συνέχεια, θα βρούμε το Document Object Model, ένα ισχυρό εργαλείο για χειρισμό εγγράφων ως αντικειμένων (ή χειρισμό δομών αντικειμένων ως εγγράφων, ανάλογα με τον τρόπο που το βλέπετε). Θα εξετάσουμε τον τρόπο σύνταξης προγραμμάτων Java που εξάγουν πληροφορίες από έγγραφα XML, με ένα δείκτη σε ένα δωρεάν πρόγραμμα χρήσιμο για τον πειραματισμό με αυτές τις νέες ιδέες. Τέλος, θα ρίξουμε μια ματιά σε μια εταιρεία Διαδικτύου που βασίζει τη βασική τεχνολογική στρατηγική της σε XML και Java.

Είναι το XML για εσάς;

Αν και αυτό το άρθρο είναι γραμμένο για όσους ενδιαφέρονται για XML, έχει μια ειδική σχέση με το JavaWorld σειρά σε XML JavaBeans. (Δείτε πόρους για συνδέσμους σε σχετικά άρθρα.) Εάν έχετε διαβάσει αυτήν τη σειρά και δεν το "παίρνετε", αυτό το άρθρο θα πρέπει να διευκρινίζει πώς να χρησιμοποιήσετε το XML με φασόλια. Αν εσύ είναι το παίρνουμε, αυτό το άρθρο χρησιμεύει ως το τέλειο συνοδευτικό κομμάτι της σειράς XML JavaBeans, καθώς καλύπτει θέματα που δεν έχουν αγγίξει. Και, εάν είστε ένας από τους λίγους τυχερούς που εξακολουθούν να έχουν τα άρθρα XML JavaBeans για αναμονή, σας συνιστούμε να διαβάσετε πρώτα το παρόν άρθρο ως εισαγωγικό υλικό.

Μια σημείωση για την Java

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

Η XML ανοίγει τον Internet και τον προγραμματισμό Java σε φορητές λειτουργίες χωρίς πρόγραμμα περιήγησης. Η XML απελευθερώνει περιεχόμενο Internet από το πρόγραμμα περιήγησης με τον ίδιο τρόπο που η Java απελευθερώνει τη συμπεριφορά του προγράμματος από την πλατφόρμα. Το XML καθιστά διαθέσιμο το Διαδίκτυο περιεχόμενο σε πραγματικές εφαρμογές.

Η Java είναι μια εξαιρετική πλατφόρμα για τη χρήση XML και η XML είναι μια εξαιρετική αναπαράσταση δεδομένων για εφαρμογές Java. Θα επισημάνω μερικά από τα πλεονεκτήματα της Java με το XML καθώς προχωράμε.

Ας ξεκινήσουμε με ένα μάθημα ιστορίας.

Η προέλευση των γλωσσών σήμανσης

Το HTML που όλοι γνωρίζουμε και αγαπάμε (καλά, το ξέρουμε, ούτως ή άλλως) σχεδιάστηκε αρχικά από τον Tim Berners-Lee στο CERN (le Conseil Européen pour la Recherche Nucléaire, ή το Ευρωπαϊκό Εργαστήριο Φυσικής Σωματιδίων) στη Γενεύη για να επιτρέψει στους φυσικούς φυσικούς (και ακόμη και τους μη-σπασίκλες) να επικοινωνούν μεταξύ τους. Το HTML κυκλοφόρησε τον Δεκέμβριο του 1990 στο CERN και έγινε διαθέσιμο στο κοινό το καλοκαίρι του 1991 για τους υπόλοιπους από εμάς. Το CERN και ο Berners-Lee έδωσαν τις προδιαγραφές για HTML, HTTP και URL, στην παλιά παλιά παράδοση του Διαδικτύου κοινή χρήση και απόλαυση.

Ο Berners-Lee όρισε HTML σε SGML, την τυπική γενικευμένη γλώσσα σήμανσης. Το SGML, όπως το XML, είναι μια γλώσσα - μια γλώσσα που χρησιμοποιείται για τον ορισμό άλλων γλωσσών. Κάθε τόσο καθορισμένη γλώσσα ονομάζεται εφαρμογή SGML. Η HTML είναι μια εφαρμογή SGML.

Η SGML προέκυψε από έρευνα που έγινε κυρίως στην IBM σχετικά με την αναπαράσταση κειμένου στα τέλη της δεκαετίας του '60. Η IBM δημιούργησε το GML ("General Markup Language"), μια προγενέστερη γλώσσα της SGML και το 1978 το American National Standards Institute (ANSI) δημιούργησε την πρώτη του έκδοση SGML. Το πρώτο πρότυπο κυκλοφόρησε το 1983, με το σχέδιο προτύπου κυκλοφόρησε το 1985, και το πρώτο πρότυπο δημοσιεύθηκε το 1986. Αρκετά ενδιαφέρον, το πρώτο πρότυπο SGML δημοσιεύθηκε χρησιμοποιώντας ένα σύστημα SGML που αναπτύχθηκε από τον Anders Berglund στο CERN, τον οργανισμό που, ως έχουμε δει, μας έδωσε HTML και τον Ιστό.

Το SGML χρησιμοποιείται ευρέως σε μεγάλες βιομηχανίες και κυβερνήσεις όπως σε μεγάλες εταιρείες αεροδιαστημικής, αυτοκινητοβιομηχανίας και τηλεπικοινωνιών. Το SGML χρησιμοποιείται ως πρότυπο εγγράφου στο Υπουργείο Άμυνας των Ηνωμένων Πολιτειών και στην Υπηρεσία Εσωτερικών Εσόδων. (Για τους αναγνώστες εκτός των ΗΠΑ, οι IRS είναι οι φόροι.)

Ο Άλμπερτ Αϊνστάιν είπε ότι όλα πρέπει να γίνουν όσο το δυνατόν πιο απλά και όχι απλούστερα. Ο λόγος που το SGML δεν βρίσκεται σε περισσότερα μέρη είναι ότι είναι εξαιρετικά εξελιγμένο και περίπλοκο. Και το HTML, το οποίο μπορείτε να βρείτε παντού, είναι πολύ απλό. για πολλές εφαρμογές, είναι πολύ απλό.

HTML: Όλη η μορφή και καμία ουσία

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

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

  • Το HTML δεν είναι επεκτάσιμο

    Μια επεκτάσιμη γλώσσα σήμανσης θα επέτρεπε στους προγραμματιστές εφαρμογών να καθορίσουν προσαρμοσμένες ετικέτες για συγκεκριμένες καταστάσεις εφαρμογής. Εκτός αν είστε γορίλλας 600 κιλών (και ίσως όχι ακόμη και τότε), δεν μπορείτε να ζητήσετε από όλους τους κατασκευαστές προγραμμάτων περιήγησης να εφαρμόσουν όλες τις ετικέτες σήμανσης που είναι απαραίτητες για την εφαρμογή σας. Λοιπόν, έχετε κολλήσει με αυτό που οι μεγάλοι κατασκευαστές προγραμμάτων περιήγησης ή το W3C (World Wide Web Consortium) θα σας επιτρέψει να έχετε. Αυτό που χρειαζόμαστε είναι μια γλώσσα που μας επιτρέπει να δημιουργήσουμε τις δικές μας ετικέτες σήμανσης χωρίς να χρειαστεί να καλέσουμε τον κατασκευαστή του προγράμματος περιήγησης.

  • Η HTML είναι πολύ κεντρική στην προβολή

    Η HTML είναι μια καλή γλώσσα για σκοπούς προβολής, εκτός και αν χρειάζεστε πολύ ακριβή έλεγχο μορφοποίησης ή μετασχηματισμού (στην περίπτωση αυτή βρωμάει). Η HTML αντιπροσωπεύει ένα μείγμα λογικής δομής εγγράφων (τίτλοι, παράγραφοι και άλλα) με ετικέτες παρουσίασης (έντονη γραφή, ευθυγράμμιση εικόνας κ.ο.κ.). Δεδομένου ότι σχεδόν όλες οι ετικέτες HTML έχουν να κάνουν με τον τρόπο εμφάνισης πληροφοριών σε ένα πρόγραμμα περιήγησης, η HTML είναι άχρηστη για άλλες κοινές εφαρμογές δικτύου - όπως αναπαραγωγή δεδομένων ή υπηρεσίες εφαρμογών. Χρειαζόμαστε έναν τρόπο ενοποίησης αυτών των κοινών λειτουργιών με οθόνη, οπότε ο ίδιος διακομιστής που χρησιμοποιείται για την περιήγηση σε δεδομένα μπορεί επίσης, για παράδειγμα, να εκτελεί επιχειρηματικές λειτουργίες και να λειτουργεί με συστήματα παλαιού τύπου.

  • Το HTML δεν είναι συνήθως άμεσα επαναχρησιμοποιήσιμο

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

  • Η HTML παρέχει μόνο μία «προβολή» δεδομένων

    Είναι δύσκολο να γράψετε HTML που εμφανίζει τα ίδια δεδομένα με διαφορετικούς τρόπους με βάση τα αιτήματα των χρηστών. Το Dynamic HTML είναι μια αρχή, αλλά απαιτεί τεράστιο σενάριο και δεν αποτελεί γενική λύση σε αυτό το πρόβλημα. (Το δυναμικό HTML συζητείται λεπτομερέστερα παρακάτω.) Αυτό που χρειαζόμαστε είναι ένας τρόπος για να λάβουμε όλες τις πληροφορίες που ίσως θέλουμε να περιηγηθούμε ταυτόχρονα και να τις εξετάσουμε με διάφορους τρόπους στον πελάτη.

  • Η HTML έχει μικρή ή καθόλου σημασιολογική δομή

    Οι περισσότερες εφαρμογές Ιστού θα επωφεληθούν από την ικανότητα αναπαραγωγής δεδομένων με νόημα και όχι με διάταξη. Για παράδειγμα, μπορεί να είναι πολύ δύσκολο να βρείτε αυτό που ψάχνετε στο Διαδίκτυο, επειδή δεν υπάρχει ένδειξη για το νόημα των δεδομένων σε αρχεία HTML (εκτός από τις ετικέτες META, οι οποίες είναι συνήθως παραπλανητικές). Τύπος

    το κόκκινο

    σε μια μηχανή αναζήτησης και θα λάβετε συνδέσμους προς το Red Skelton, το κόκκινο ρέγγα, το κόκκινο snapper, το κόκκινο τρόμο, το Red Letter Day και πιθανώς μια σελίδα ή δύο από τα "Βιβλία που έχω κόκκινα". Το HTML δεν έχει τρόπο να καθορίσει τι σημαίνει ένα συγκεκριμένο στοιχείο σελίδας. Μια πιο χρήσιμη γλώσσα σήμανσης θα αντιπροσωπεύει πληροφορίες από την άποψη της σημασίας της. Αυτό που χρειαζόμαστε είναι μια γλώσσα που δεν μας λέει πώς να το κάνουμε

    απεικόνιση

    πληροφορίες, αλλά μάλλον, τι δεδομένο μπλοκ πληροφοριών

    είναι

    οπότε ξέρουμε τι να κάνουμε με αυτό.

Η SGML δεν έχει καμία από αυτές τις αδυναμίες, αλλά για να είναι γενική, είναι περίπλοκη τα μαλλιά (τουλάχιστον σε πλήρη μορφή). Η γλώσσα που χρησιμοποιείται για τη μορφοποίηση του SGML (η "γλώσσα στυλ"), που ονομάζεται DSSSL (Document Style Semantics and Specification Language), είναι εξαιρετικά ισχυρή αλλά δύσκολη στη χρήση. Πώς παίρνουμε μια γλώσσα που είναι σχεδόν τόσο εύκολη στη χρήση όσο HTML, αλλά έχει το μεγαλύτερο μέρος της SGML;

Προέλευση του XML

Καθώς ο Ιστός εξερράγη στη δημοτικότητα και οι άνθρωποι σε όλο τον κόσμο άρχισαν να μαθαίνουν για HTML, άρχισαν γρήγορα να αντιμετωπίζουν τους περιορισμούς που περιγράφονται παραπάνω. Τα βαρέα μέταλλα SGML, που συνεργάστηκαν με τη SGML για χρόνια σε σχετική αφάνεια, βρήκαν ξαφνικά ότι οι καθημερινοί άνθρωποι είχαν κάποια κατανόηση της έννοιας της σήμανσης (δηλαδή, HTML). Οι ειδικοί της SGML άρχισαν να εξετάζουν τη δυνατότητα άμεσης χρήσης του SGML στον Ιστό, αντί να χρησιμοποιούν μόνο μία εφαρμογή του (και πάλι, HTML). Ταυτόχρονα, ήξεραν ότι το SGML, αν και ισχυρό, ήταν απλά πολύ περίπλοκο για χρήση από τους περισσότερους ανθρώπους.

Το καλοκαίρι του 1996, ο Jon Bosak (επί του παρόντος διαδικτυακός αρχιτέκτονας τεχνολογίας πληροφοριών της Sun Microsystems) έπεισε το W3C να του επιτρέψει να σχηματίσει επιτροπή για τη χρήση του SGML στον Ιστό. Δημιούργησε μια ομάδα υψηλής ισχύος από τον κόσμο της SGML. Μέχρι τον Νοέμβριο του ίδιου έτους, αυτοί οι άνθρωποι είχαν δημιουργήσει τις αρχές μιας απλοποιημένης μορφής SGML που ενσωμάτωσε δοκιμασμένα και αληθινά χαρακτηριστικά του SGML αλλά με μειωμένη πολυπλοκότητα. Αυτό ήταν, και είναι, XML.

Τον Μάρτιο του 1997, ο Bosak κυκλοφόρησε το ορόσημο χαρτί του, "XML, Java and the Future of the Web" (βλ. Πόρους). Τώρα, δύο χρόνια αργότερα (ένας πολύ μεγάλος χρόνος στη ζωή του Διαδικτύου), το σύντομο χαρτί της Bosak εξακολουθεί να είναι μια καλή, αν χρονολογηθεί, εισαγωγή στο γιατί η χρήση XML είναι μια τόσο εξαιρετική ιδέα.

Το SGML δημιουργήθηκε για γενική δομή εγγράφων και το HTML δημιουργήθηκε ως εφαρμογή του SGML για έγγραφα στο Web. Το XML είναι μια απλοποίηση του SGML για γενική χρήση του Ιστού.

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

Όλη αυτή η συζήτηση για την «εφεύρεση των δικών σας ετικετών» είναι αρκετά ομιχλώδης: Τι είδους ετικέτες θα ήθελε να εφεύρει ένας προγραμματιστής και πώς θα χρησιμοποιηθεί το XML που προκύπτει; Σε αυτήν την ενότητα, θα δούμε ένα παράδειγμα που συγκρίνει και αντιπαραβάλλει την αναπαράσταση πληροφοριών σε HTML και XML. Σε μια μεταγενέστερη ενότητα ("XSL: Μου αρέσει το στυλ σου") θα δούμε την οθόνη XML.

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

Παράδειγμα HTML

Ρίξτε μια ματιά στο μικρό κομμάτι του HTML στην καταχώριση 1:

   Lime Jello Marshmallow Cottage Cheese Surprise 

Lime Jello Marshmallow Cottage Cheese Surprise

Το αγαπημένο της γιαγιάς μου (μπορεί να ξεκουραστεί ειρηνικά).

Συστατικά

ΠοτΜονάδεςΕίδος
1κουτίζελατίνη ασβέστη
500σολπολύχρωμα μικροσκοπικά marshmallows
500mlτυρί cottage
παύλαΣάλτσα Tabasco (προαιρετικά)

Οδηγίες

  1. Ετοιμάστε ζελατίνη ασβέστη σύμφωνα με τις οδηγίες της συσκευασίας ...

Λίστα 1. Κάποια HTML

(Μια εκτυπώσιμη έκδοση αυτής της καταχώρησης μπορεί να βρεθεί στο example.html.)

Κοιτάζοντας τον κώδικα HTML στη λίστα 1, είναι πιθανό να είναι ξεκάθαρο για οποιονδήποτε ότι αυτή είναι μια συνταγή για κάτι (κάτι απαίσιο, αλλά ωστόσο μια συνταγή). Σε ένα πρόγραμμα περιήγησης, το HTML μας παράγει κάτι σαν αυτό:

Lime Jello Marshmallow Cottage Cheese Surprise

Το αγαπημένο της γιαγιάς μου (μπορεί να ξεκουραστεί ειρηνικά).

Συστατικά

ΠοτΜονάδεςΕίδος
1κουτίζελατίνη ασβέστη
500σολπολύχρωμα μικροσκοπικά marshmallows
500mlΤυρί cottage
 παύλαΣάλτσα Tabasco (προαιρετικά)

Οδηγίες

  1. Προετοιμάστε ζελατίνη ασβέστη σύμφωνα με τις οδηγίες της συσκευασίας ...

Λίστα 2. Πώς μοιάζει ο HTML στην καταχώριση 1 σε ένα πρόγραμμα περιήγησης

Τώρα, υπάρχουν ορισμένα πλεονεκτήματα στην παρουσίαση αυτής της συνταγής σε HTML, ως εξής:

  • Είναι αρκετά ευανάγνωστο. Η σήμανση μπορεί να είναι λίγο κρυπτική, αλλά αν είναι σωστά σχεδιασμένη, είναι πολύ εύκολο να ακολουθηθεί.

  • Το HTML μπορεί να εμφανιστεί από σχεδόν οποιοδήποτε πρόγραμμα περιήγησης HTML, ακόμη και ένα χωρίς δυνατότητα γραφικών. Αυτό είναι ένα σημαντικό σημείο: Η οθόνη είναι ανεξάρτητη από το πρόγραμμα περιήγησης. Εάν υπήρχε μια φωτογραφία από τα αποτελέσματα της σύνταξης αυτής της συνταγής (και σίγουρα ελπίζουμε ότι δεν υπάρχει), θα εμφανιζόταν σε ένα πρόγραμμα περιήγησης γραφικών αλλά όχι σε ένα πρόγραμμα περιήγησης κειμένου.

  • Θα μπορούσατε να χρησιμοποιήσετε ένα διαδοχικό φύλλο στυλ (CSS - θα μιλήσουμε λίγο για αυτά που ακολουθούν) για γενικό έλεγχο της μορφοποίησης.

Ωστόσο, υπάρχει ένα μεγάλο πρόβλημα με το HTML ως μορφή δεδομένων. ο έννοια από τα διάφορα κομμάτια δεδομένων στο έγγραφο χάνεται. Είναι πολύ δύσκολο να πάρεις γενικό HTML και να καταλάβεις τι σημαίνουν τα δεδομένα στο HTML. Το γεγονός ότι υπάρχει αυτής της συνταγής με ένα (ποσότητα) 500 ml (από το τυρί cottage θα ήταν πολύ δύσκολο να εξαχθεί από αυτό το έγγραφο με τρόπο που γενικά έχει νόημα.

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

Σίγουρα, θα μπορούσατε να γράψετε ένα πρόγραμμα που αρπάζει τις κεφαλίδες από το έγγραφο, διαβάζει τις κεφαλίδες στηλών πίνακα, υπολογίζει τις ποσότητες και τις μονάδες κάθε συστατικού και ούτω καθεξής. Το πρόβλημα είναι ότι ο καθένας διαμορφώνει τις συνταγές με διαφορετικό τρόπο. Τι γίνεται αν προσπαθείτε να λάβετε αυτές τις πληροφορίες από, για παράδειγμα, τον ιστότοπο της Julia Childs και συνεχίζει να αναστατώνει τη μορφοποίηση; Εάν η Τζούλια αλλάξει τη σειρά των στηλών ή σταματήσει να χρησιμοποιεί πίνακες, θα διακόψει το πρόγραμμά σας! (Αν και πρέπει να ειπωθεί: Εάν η Τζούλια αρχίσει να δημοσιεύει συνταγές όπως αυτή, μπορεί να θέλει να σκεφτεί να αλλάξει καριέρα.)

Τώρα, φανταστείτε ότι αυτή η σελίδα συνταγών προήλθε από δεδομένα σε μια βάση δεδομένων και θα θέλατε να μπορείτε να μεταφέρετε αυτά τα δεδομένα. Ίσως θέλετε να το προσθέσετε στην τεράστια βάση δεδομένων συνταγών σας στο σπίτι, όπου μπορείτε να την αναζητήσετε και να τη χρησιμοποιήσετε όσο θέλετε. Δυστυχώς, η εισαγωγή σας είναι HTML, επομένως θα χρειαστείτε ένα πρόγραμμα που μπορεί να διαβάσει αυτόν τον HTML, να καταλάβει τι είναι όλα τα "Συστατικά", "Οδηγίες", "Μονάδες" κ.ο.κ. Είναι πολλή δουλειά. Ειδικά δεδομένου ότι όλες αυτές οι σημασιολογικές πληροφορίες - και πάλι, η έννοια των δεδομένων - υπήρχαν σε αυτήν την αρχική βάση δεδομένων αλλά ήταν ασαφείς κατά τη διαδικασία μετατροπής σε HTML.

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

Παράδειγμα XML

Ας δημιουργήσουμε μια γλώσσα σήμανσης για να περιγράψουμε συνταγές και να ξαναγράψουμε τη συνταγή μας σε αυτήν τη γλώσσα, όπως στην Καταχώριση 3.

  Lime Jello Marshmallow Cottage Cheese Surprise Το αγαπημένο της γιαγιάς μου (μπορεί να ξεκουραστεί ειρηνικά). 1 ασβέστη ζελατίνη 500 πολύχρωμα μικροσκοπικά marshmallows 500 Τυρί cottage Tabasco σάλτσα Ετοιμάστε ασβέστη ζελατίνη σύμφωνα με τις οδηγίες της συσκευασίας 

Λίστα 3. Μια προσαρμοσμένη γλώσσα σήμανσης για συνταγές

Δεν θα σας προκαλέσει έκπληξη, καθώς είστε ο έξυπνος αναγνώστης σας, ότι αυτή η συνταγή στη νέα της μορφή είναι στην πραγματικότητα ένα έγγραφο XML. Ίσως το γεγονός ότι το αρχείο ξεκίνησε με την περίεργη κεφαλίδα

το έδωσε? Στην πραγματικότητα, κάθε αρχείο XML πρέπει να ξεκινά με αυτήν την κεφαλίδα. Απλώς εφεύραμε ετικέτες σήμανσης που έχουν μια συγκεκριμένη έννοια. για παράδειγμα, "An είναι ένα (ποσότητα σε καθορισμένες μονάδες) ενός , που είναι πιθανώς προαιρετικόςΤο έγγραφο XML περιγράφει τις πληροφορίες στη συνταγή με όρους συνταγές, αντί για όρους πώς να το κάνετε απεικόνιση η συνταγή (όπως σε HTML). Η σημασιολογία, ή το νόημα των πληροφοριών, διατηρείται σε XML επειδή αυτό σχεδιάστηκε για να κάνει το σύνολο ετικετών.

Σημειώσεις για τη σημειογραφία

Είναι σημαντικό να διορθώσετε κάποια ονοματολογία. Στο σχήμα 1, βλέπετε ένα ετικέτα έναρξης, που ξεκινά μια κλειστή περιοχή κειμένου, γνωστή ως Είδος, σύμφωνα με την όνομα ετικέτας. Όπως και στο HTML, οι ετικέτες XML ενδέχεται να περιλαμβάνουν μια λίστα με γνωρίσματα (που αποτελείται από ένα όνομα χαρακτηριστικού και ένα τιμή χαρακτηριστικού.) Ο Είδος ορίζεται από την ετικέτα τελειώνει με το τελική ετικέτα.

Δεν περικλείει κάθε ετικέτα κείμενο. Σε HTML, το

Η ετικέτα σημαίνει "αλλαγή γραμμής" και δεν περιέχει κείμενο. Σε XML, τέτοια στοιχεία δεν επιτρέπονται. Αντ 'αυτού, το XML έχει κενές ετικέτες, συμβολίζεται με κάθετο πριν από την τελική αγκύλη ορθής γωνίας στην ετικέτα. Το σχήμα 2 δείχνει μια κενή ετικέτα από τη συνταγή XML. Λάβετε υπόψη ότι οι κενές ετικέτες ενδέχεται να έχουν χαρακτηριστικά. Αυτό το παράδειγμα κενής ετικέτας είναι τυπική συντομογραφία XML .

Εκτός από αυτές τις συμβολικές διαφορές από το HTML, οι δομικοί κανόνες της XML είναι πιο αυστηροί. Κάθε έγγραφο XML πρέπει να είναι καλοδιαμορφωμένο. Τι σημαίνει αυτό? Συνέχισε να διαβάζεις!

Ο λα λα! Καλά σχηματισμένο XML

Η έννοια της καλής διαμόρφωσης προέρχεται από τα μαθηματικά: Είναι δυνατό να γράψετε μαθηματικές εκφράσεις που δεν σημαίνουν τίποτα.Για παράδειγμα, η έκφραση

2 ( + + 5 (=) 9 > 7

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

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

  • Χωρίς κλειστές ετικέτες

    Μπορείτε να ξεφύγετε με όλα τα είδη wacko σε HTML. Για παράδειγμα, στα περισσότερα προγράμματα περιήγησης HTML, μπορείτε να "ανοίξετε" ένα στοιχείο λίστας με

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

  • Δεν επικαλύπτονται ετικέτες

    Μια ετικέτα που ανοίγει μέσα σε μια άλλη ετικέτα πρέπει να κλείσει πριν κλείσει η ετικέτα που περιέχει. Για παράδειγμα, η ακολουθία

    Ας κλείσουμε το όλο θέμα

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

    Ας κλείσουμε το όλο θέμα

    Με άλλα λόγια, η δομή του εγγράφου πρέπει να είναι αυστηρά ιεραρχική.

  • Οι τιμές χαρακτηριστικών πρέπει να περικλείονται σε εισαγωγικά

    Σε αντίθεση με το HTML, το XML δεν επιτρέπει τιμές "γυμνού" χαρακτηριστικού (δηλαδή, όπως ετικέτες HTML

    , όπου δεν υπάρχουν εισαγωγικά γύρω από την τιμή του χαρακτηριστικού). Κάθε τιμή χαρακτηριστικού πρέπει να έχει εισαγωγικά (
    ).

  • Οι χαρακτήρες κειμένου () και (") πρέπει πάντα να αντιπροσωπεύονται από" οντότητες χαρακτήρων "

    Για να αντιπροσωπεύσετε αυτούς τους τρεις χαρακτήρες (αγκύλη αριστεράς γωνίας, αγκύλη δεξιάς γωνίας και διπλά εισαγωγικά) στο τμήμα κειμένου του XML (όχι στη σήμανση), πρέπει να χρησιμοποιήσετε τις ειδικές οντότητες χαρακτήρων (

    <

    ), (

    >

    ), και (

    "

    ), αντίστοιχα. Αυτοί οι χαρακτήρες είναι ειδικοί χαρακτήρες για XML. Ένα αρχείο XML που χρησιμοποιεί, για παράδειγμα, τον χαρακτήρα διπλού εισαγωγικού στο κείμενο που περικλείεται σε ετικέτες σε ένα αρχείο XML δεν είναι σωστά διαμορφωμένος και ο σωστά σχεδιασμένος αναλυτής XML θα προκαλέσει σφάλμα για τέτοια είσοδο.

«Καλώς σχηματισμένο» σημαίνει «αναλύσιμο»

Ένα γενικό XML αναλυτής είναι ένα πρόγραμμα ή τάξη που μπορεί να διαβάσει οποιοδήποτε καλά σχηματισμένο XML στην είσοδό του. Πολλοί προμηθευτές προσφέρουν τώρα προγράμματα ανάλυσης XML στην Java δωρεάν; (θα βρείτε συνδέσμους προς αυτά τα πακέτα στους πόρους στο κάτω μέρος αυτού του άρθρου). Οι αναλυτές XML αναγνωρίζουν καλά σχηματισμένα έγγραφα και παράγουν μηνύματα σφάλματος (όπως θα έκανε ένας μεταγλωττιστής) όταν λαμβάνουν είσοδο που δεν είναι καλά διαμορφωμένη. Όπως θα δούμε, αυτή η λειτουργικότητα είναι πολύ βολική για τον προγραμματιστή: Απλώς καλείτε τον αναλυτή που έχετε επιλέξει και φροντίζει για την ανίχνευση σφαλμάτων και ούτω καθεξής. Ενώ όλοι οι αναλυτές XML ελέγχουν την καλή διαμόρφωση των εγγράφων (που σημαίνει, όπως έχουμε δει, ότι όλες οι ετικέτες έχουν νόημα, τοποθετούνται σωστά και ούτω καθεξής), επικύρωση Οι αναλυτές XML προχωρούν ένα βήμα παραπέρα. Η επικύρωση των αναλυτών επιβεβαιώνει επίσης εάν το έγγραφο είναι έγκυρος; δηλαδή, ότι η δομή και ο αριθμός των ετικετών έχουν νόημα.

Για παράδειγμα, τα περισσότερα προγράμματα περιήγησης θα εμφανίσουν ένα έγγραφο που (ανόητα) έχει δύο στοιχεία, αλλά πώς μπορεί να είναι αυτό; Μόνο ένας τίτλος ή κανένας τίτλος έχει νόημα.

Για ένα άλλο παράδειγμα, φανταστείτε ότι στην λίστα 3 το συστατικό "τυρί cottage" μοιάζει με αυτό:

  500 9 Τυρί cottage 

Αυτό το έγγραφο XML είναι σίγουρα καλά διαμορφωμένο, αλλά δεν έχει νόημα. Δεν είναι δομικά έγκυρος. Είναι ανοησία για ένα να περιέχει ένα <Ποτ>. Τι είναι από αυτό ?

Το πρόβλημα είναι ότι έχουμε ένα έγγραφο που είναι καλά διαμορφωμένο, αλλά δεν είναι πολύ χρήσιμο επειδή το XML δεν έχει νόημα. Χρειαζόμαστε έναν τρόπο να καθορίσουμε τι κάνει ένα έγγραφο XML έγκυρο. Για παράδειγμα, πώς μπορούμε να προσδιορίσουμε ότι a ετικέτα μπορεί να περιέχει μόνο κείμενο (και όχι άλλα στοιχεία) και να αναφέρει ως λάθη οποιαδήποτε άλλη περίπτωση;

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