Η XML σχεδόν πάντα χρησιμοποιείται κατά λάθος

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

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

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

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

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

Παρακάτω θα δώσω μερικά από τα πιο κοινά παραδείγματα λανθασμένα κατασκευασμένων κυκλωμάτων.

<roоt>
  <item name="name" value="John" />
  <item name="city" value="London" />
</roоt>

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

<root name="John" city="London" />

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

<roоt>
  <item key="name">John</item>
  <item key="city">London</item>
</roоt>

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

Μια σωστή έκφραση λεξικού σε XML θα μοιάζει κάπως έτσι:

<roоt>
  <item>
    <key>Name</key>
    <value>John</value>
  </item>
  <item>
    <key>City</key>
    <value>London</value>
  </item>
</roоt>

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

Το χειρότερο σχήμα XML; Παρεμπιπτόντως, το έπαθλο για το χειρότερο σχήμα XML που έχω δει ποτέ, Αποκτά τη μορφή αρχείου ρύθμισης παραμέτρων αυτόματης παροχής για τηλέφωνα τηλεφωνίας IP της Polycom. Τέτοια αρχεία απαιτούν λήψη αρχείων αιτήματος XML μέσω TFTP, το οποίο... Σε γενικές γραμμές, εδώ είναι ένα απόσπασμα από ένα τέτοιο αρχείο:

<softkey
        softkey.feature.directories="0"
        softkey.feature.buddies="0"
        softkey.feature.forward="0"
        softkey.feature.meetnow="0"
        softkey.feature.redial="1"
        softkey.feature.search="1"

        softkey.1.enable="1"
        softkey.1.use.idle="1"
        softkey.1.label="Foo"
        softkey.1.insert="1"
        softkey.1.action="..."

        softkey.2.enable="1"
        softkey.2.use.idle="1"
        softkey.2.label="Bar"
        softkey.2.insert="2"
        softkey.2.action="..." />

Αυτό δεν είναι το κακόγουστο αστείο κάποιου. Και αυτό δεν είναι δική μου εφεύρεση:

  • Τα στοιχεία χρησιμοποιούνται απλώς ως πρόθεμα για την επισύναψη χαρακτηριστικών, τα οποία έχουν τα ίδια ιεραρχικά ονόματα.
  • Εάν θέλετε να εκχωρήσετε τιμές σε πολλαπλές παρουσίες ενός συγκεκριμένου τύπου εγγραφής, πρέπει να χρησιμοποιήσετε ονόματα χαρακτηριστικών για να το κάνετε αυτό. που έχουν ευρετήρια.
  • Επιπλέον, χαρακτηριστικά που ξεκινούν με softkey., πρέπει να τοποθετηθεί σε στοιχεία <softkey/>, χαρακτηριστικά που ξεκινούν με feature., πρέπει να τοποθετηθεί σε στοιχεία <feature/> κ.λπ., παρά το γεγονός ότι φαίνεται εντελώς περιττό και εκ πρώτης όψεως ανούσιο.
  • Και τέλος, αν ελπίζατε ότι το πρώτο στοιχείο ενός ονόματος χαρακτηριστικού θα ήταν πάντα το ίδιο με το όνομα του στοιχείου - τίποτα τέτοιο! Για παράδειγμα, ιδιότητες up. πρέπει να προσαρτηθεί σε <userpreferences/>. Η σειρά επισύναψης ονομάτων χαρακτηριστικών σε στοιχεία είναι αυθαίρετη, σχεδόν εντελώς.

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

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

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

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

Με άλλα λόγια, ένα λεξικό (ένα κομμάτι δομημένων δεδομένων) μπορεί να μετατραπεί σε n διάφορα πιθανά έγγραφα (σε XML, PDF, χαρτί κ.λπ.), όπου n - Ο αριθμός των πιθανών συνδυασμών στοιχείων στο λεξικό και δεν έχουμε ακόμη λάβει υπόψη άλλες πιθανές μεταβλητές.

Ωστόσο, προκύπτει επίσης ότι εάν θέλετε να μεταφέρετε μόνο δεδομένα, τότε η χρήση ενός εγγράφου αναγνώσιμου από μηχανή για αυτό δεν θα είναι αποτελεσματική. Χρησιμοποιεί ένα μοντέλο, το οποίο σε αυτή την περίπτωση είναι περιττό· απλώς θα εμποδίσει. Επιπλέον, για να εξαγάγετε τα δεδομένα προέλευσης, θα χρειαστεί να γράψετε ένα πρόγραμμα. Δεν υπάρχει σχεδόν κανένα νόημα στη χρήση XML για κάτι που δεν θα μορφοποιηθεί ως έγγραφο κάποια στιγμή (για παράδειγμα, χρησιμοποιώντας CSS ή XSLT ή και τα δύο), καθώς αυτός είναι ο κύριος (αν όχι ο μοναδικός) λόγος για να το κάνετε αυτό. στο μοντέλο του εγγράφου.

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

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

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

Μέχρι σήμερα, τα μόνα σχήματα XML που γνωρίζω και τα οποία μπορώ πραγματικά να ονομάσω έγκυρη χρήση της μορφής είναι τα XHTML και DocBook.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο