Βασικές κατασκευές XML - στοιχεία XML, ετικέτες, χαρακτηριστικά, οδηγίες επεξεργασίας, ενότητες CDATA, σχόλια. στοιχεία XML. Κενά και μη κενά στοιχεία XML

  • Μετάφραση
  • Φροντιστήριο

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

Το κύριο πρόβλημα Είναι απλώς κείμενο. Ναι, μόνο το κείμενο - αυτό είναι το κύριο πρόβλημα. Σχεδόν τα πάντα μέσα σύστημα υπολογιστήαντιπροσωπεύεται από κείμενο (το οποίο, με τη σειρά του, αντιπροσωπεύεται από byte). Είναι δυνατόν κάποια κείμενα να προορίζονται για υπολογιστές, ενώ άλλα για ανθρώπους. Αλλά και τα δύο εξακολουθούν να παραμένουν κείμενο. Για να καταλάβετε για τι πράγμα μιλάω, εδώ είναι ένα μικρό παράδειγμα:
Homo Sapiens Ας υποθέσουμε ότι υπάρχει το αγγλικό κείμενο, το οποίο δεν θέλω να μεταφράσω στα ρωσικά
Δεν θα το πιστέψετε: αυτό είναι κείμενο. Μερικοί το αποκαλούν XML, αλλά είναι απλώς κείμενο. Μπορεί να μην είναι κατάλληλο για εμφάνιση στον δάσκαλο. Στα Αγγλικά, αλλά εξακολουθεί να είναι απλώς κείμενο. Μπορείς να το εκτυπώσεις σε μια αφίσα και να πας με αυτό σε συλλαλητήρια, μπορείς να το γράψεις σε ένα γράμμα στη μητέρα σου... είναι κείμενο.

Ωστόσο, θέλουμε ορισμένα μέρη αυτού του κειμένου να έχουν κάποιο νόημα στον υπολογιστή μας. Θέλουμε ο υπολογιστής να μπορεί να εξάγει τον συγγραφέα του κειμένου και το ίδιο το κείμενο ξεχωριστά, ώστε να μπορούμε να κάνουμε κάτι με αυτό. Για παράδειγμα, μετατρέψτε τα παραπάνω σε αυτό:
Ας υποθέσουμε ότι υπάρχει το αγγλικό κείμενο, το οποίο δεν θέλω να μεταφράσω στα ρωσικά από τον Homo Sapiens
Πώς ξέρει ο υπολογιστής πώς να το κάνει αυτό; Λοιπόν, γιατί πολύ βολικά τυλίξαμε ορισμένα μέρη του κειμένου με ειδικές λέξεις σε αστείες παρενθέσεις, όπως και. Εφόσον το έχουμε κάνει αυτό, μπορούμε να γράψουμε ένα πρόγραμμα που αναζητά αυτά τα συγκεκριμένα μέρη, εξάγει το κείμενο και το χρησιμοποιεί για κάποια δική μας εφεύρεση.

Με άλλα λόγια, χρησιμοποιήσαμε ορισμένους κανόνες στο κείμενό μας για να υποδείξουμε κάποιο ειδικό νόημα που κάποιος άλλος, ακολουθώντας τους ίδιους κανόνες, θα μπορούσε να χρησιμοποιήσει.
Εντάξει, δεν είναι τόσο δύσκολο να το καταλάβεις. Τι γίνεται αν θέλουμε να χρησιμοποιήσουμε αυτές τις αστείες παρενθέσεις που έχουν κάποιο ιδιαίτερο νόημα στο κείμενό μας, αλλά χωρίς να χρησιμοποιήσουμε αυτό ακριβώς το νόημα;.. Κάτι σαν αυτό:
Homo sapiens< n and y >
Οι χαρακτήρες "" δεν είναι τίποτα το ιδιαίτερο. Μπορούν νόμιμα να χρησιμοποιηθούν οπουδήποτε, σε οποιοδήποτε κείμενο, όπως στο παραπάνω παράδειγμα. Αλλά τι γίνεται με την ιδέα μας για ειδικές λέξεις, όπως; Αυτό σημαίνει ότι είναι και κάποιο είδος λέξης-κλειδιού; Σε XML - ίσως ναι. Ή ίσως όχι. Αυτό είναι διφορούμενο. Δεδομένου ότι οι υπολογιστές δεν είναι πολύ καλοί στην αντιμετώπιση ασάφειων, κάτι μπορεί να καταλήξει να δώσει ένα απροσδόκητο αποτέλεσμα, αν δεν κάνουμε κουκκίδες το i's εαυτοί μας και δεν επιλύσουμε τις ασάφειες.
Αυτό το δίλημμα μπορεί να λυθεί αντικαθιστώντας τα διφορούμενα σύμβολα με κάτι ξεκάθαρο.
Homo Sapiens Τα βασικά μαθηματικά μας λένε ότι αν x< n and y >Το n, το x δεν μπορεί να είναι μεγαλύτερο από το y.
Τώρα, το κείμενο θα πρέπει να γίνει εντελώς ξεκάθαρο. "".
Ο τεχνικός ορισμός αυτού είναι θωράκιση, ξεφεύγουμε από τους ιδιαίτερους χαρακτήρες όταν δεν θέλουμε να έχουν το δικό τους ιδιαίτερο νόημα.
απόδραση |iˈskāp| [όχι αντικ. ] απελευθερώνομαι [ με obj. ] να μην παρατηρώ / να μην θυμάμαι [...] [ με αντιβ. ] IT: λόγος για διαφορετική ερμηνεία [...]
Εάν ορισμένοι χαρακτήρες ή ακολουθίες χαρακτήρων σε ένα κείμενο έχουν ειδικές σημασίες, τότε πρέπει να υπάρχουν κανόνες που να καθορίζουν τον τρόπο χειρισμού καταστάσεων όπου αυτοί οι χαρακτήρες πρέπει να χρησιμοποιούνται χωρίς να επικαλείται το ειδικό νόημά τους. Ή, με άλλα λόγια, η απόδραση απαντά στην ερώτηση: "Αν αυτά τα σύμβολα είναι τόσο ιδιαίτερα, πώς μπορώ να τα χρησιμοποιήσω στο κείμενό μου;".
Όπως μπορείτε να δείτε στο παραπάνω παράδειγμα, το συμπλεκτικό σύμβολο (&) είναι επίσης ένας ειδικός χαρακτήρας. Αλλά τι γίνεται αν θέλουμε να γράψουμε"


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

Αναρτήθηκε από Πλάτωνας στις 2 Ιανουαρίου, 15:31

Λέγεται ότι είπα "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laborisp nisi equaealit ut aliqua."


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

Αναρτήθηκε από Pascal στις 23 Νοεμβρίου, 04:12

Τα βασικά μαθηματικά μας λένε ότι αν x< n and y >Το n, το x δεν μπορεί να είναι μεγαλύτερο από το y.


Χμ... Και πάλι αυτοί οι βεβηλωτές των παρενθέσεων μας. Λοιπόν, από τεχνική άποψη μπορεί να είναι διφορούμενα, αλλά το πρόγραμμα περιήγησης θα μας το συγχωρήσει, σωστά;


Εντάξει, ΣΤΟΠ, τι στο διάολο; Κάποιος φαρσέρ εισήγαγε ετικέτες javascript στο φόρουμ σας; Όποιος κοιτάζει αυτό το μήνυμα στον ιστότοπό σας τώρα κατεβάζει και εκτελεί σενάρια στο πλαίσιο του ιστότοπού σας που μπορούν να κάνουν ποιος ξέρει τι. Και αυτό δεν είναι καλό.

Δεν πρέπει να εκληφθεί κυριολεκτικά Στις παραπάνω περιπτώσεις, θέλουμε με κάποιο τρόπο να πούμε στο DB ή στο πρόγραμμα περιήγησής μας ότι αυτό είναι απλώς κείμενο, μην κάνετε τίποτα με αυτό! Με άλλα λόγια, θέλουμε να «αφαιρέσουμε» τις ειδικές έννοιες όλων των ειδικών χαρακτήρων και λέξεις-κλειδιάαπό οποιαδήποτε πληροφορία παρέχεται από τον χρήστη, γιατί δεν τον εμπιστευόμαστε. Τι να κάνω?

Τι? Τι λες αγόρι μου; Α, λέτε, «θωράκιση»; Και έχεις απόλυτο δίκιο, πάρε ένα μπισκότο!
Εάν εφαρμόσουμε διαφυγή στα δεδομένα χρήστη πριν τα συγχωνεύσουμε με το ερώτημα, τότε το πρόβλημα λύνεται. Για τα ερωτήματα της βάσης δεδομένων μας θα είναι κάτι σαν:
$name = $_POST["όνομα"]; $name = mysql_real_escape_string($name); $query = "SELECT phone_number ΑΠΟ χρήστες WHERE name = "$name""; $result = mysql_query($query);
Μόνο μια γραμμή κώδικα, αλλά πλέον κανείς δεν μπορεί να «χακάρει» τη βάση δεδομένων μας. Ας δούμε ξανά πώς θα φαίνονται τα ερωτήματα SQL, ανάλογα με την είσοδο του χρήστη:
Άλεξ
SELECT phone_number ΑΠΟ χρήστες WHERE name = "Alex"
McDonalds
SELECT phone_number FROM users WHERE name = "Mc\"Donalds"
Joe"; χρήστες DROP TABLE; --
SELECT phone_number ΑΠΟ χρήστες WHERE name = "Joe\"; DROP TABLE χρήστες. --"
Το mysql_real_escape_string τοποθετεί αδιακρίτως μια κάθετο προς τα εμπρός μπροστά από οτιδήποτε μπορεί να έχει κάποιο ιδιαίτερο νόημα.


Εφαρμόζουμε τη συνάρτηση htmlspecialchars σε όλα τα δεδομένα χρήστη πριν την εξάγουμε. Τώρα το μήνυμα του παρασίτου μοιάζει με αυτό:

Δημοσιεύτηκε από JackTR στις 18 Ιουλίου, 12:56


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

Αυτό μας φέρνει πίσω στο... Όλα τα παραπάνω καταδεικνύουν ένα πρόβλημα κοινό σε πολλά συστήματα: το κείμενο στο κείμενο πρέπει να διαφύγει εάν δεν υποτίθεται ότι έχει ειδικούς χαρακτήρες. Με την τοποθέτηση τιμές κειμένουστην SQL, πρέπει να διαφύγουν σύμφωνα με τους κανόνες SQL. Κατά την τοποθέτηση τιμών κειμένου σε HTML, πρέπει να γίνεται διαφυγή σύμφωνα με τους κανόνες HTML. Κατά την τοποθέτηση τιμών κειμένου σε (όνομα τεχνολογίας), πρέπει να διαγράφονται σύμφωνα με τους κανόνες (όνομα τεχνολογίας). Αυτό είναι όλο. Για λόγους πληρότητας, υπάρχουν, φυσικά, άλλοι τρόποι αντιμετώπισης των εισαγωγών χρήστη που μπορεί να περιέχουν ή να μην περιέχουν ειδικούς χαρακτήρες:
  • Επικύρωση
    Μπορείτε να ελέγξετε εάν η εισαγωγή χρήστη ταιριάζει με κάποια δεδομένη προδιαγραφή. Εάν θέλετε να εισαγάγετε έναν αριθμό και ο χρήστης εισάγει κάτι άλλο, το πρόγραμμα θα πρέπει να ενημερώσει τον χρήστη και να ακυρώσει την εισαγωγή. Αν όλα αυτά οργανωθούν σωστά, τότε δεν υπάρχει κίνδυνος να πιάσουμε το "DROP TABLE users" όπου ο χρήστης έπρεπε να βάλει "42". Αυτό δεν είναι πολύ πρακτικό για την αποφυγή ενέσεων HTML/SQL, επειδή... Συχνά χρειάζεται να αποδεχτείτε κείμενο ελεύθερης μορφής που μπορεί να περιέχει κόλπα. Συνήθως, η επικύρωση χρησιμοποιείται επιπρόσθετα με άλλα μέτρα.
  • Εξυγίανση
    Μπορείτε επίσης να αφαιρέσετε «αθόρυβα» όλα τα σύμβολα που θεωρείτε επικίνδυνα. Για παράδειγμα, απλώς αφαιρέστε οτιδήποτε μοιάζει με ετικέτα HTML για να αποφύγετε την προσθήκη στο φόρουμ σας. Το πρόβλημα είναι ότι μπορείτε να αφαιρέσετε απόλυτα νόμιμα μέρη του κειμένου.
    Προετοιμασμένες δηλώσεις SQL
    Υπάρχουν ειδικές λειτουργίες που κάνουν αυτό που θέλαμε: κάνουν τη βάση δεδομένων να κατανοήσει τις διαφορές μεταξύ του ίδιου του ερωτήματος SQL και των πληροφοριών που παρέχονται από τους χρήστες. Στην PHP μοιάζουν κάπως έτσι:
    $stmt = $pdo->prepare("SELECT phone_number FROM users WHERE name = ?"); $stmt->execute($_POST["name"]);
    Σε αυτή την περίπτωση, η αποστολή γίνεται σε δύο στάδια, με σαφή διάκριση μεταξύ της αίτησης και των μεταβλητών. Η βάση δεδομένων έχει τη δυνατότητα να κατανοήσει πρώτα τη δομή του αιτήματος και στη συνέχεια να το γεμίσει με τιμές.

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

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

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

IMHO, πολλοί άνθρωποι το κάνουν αυτό... αλλά η ερώτηση δεν είναι απολύτως σαφής: εάν καταλαβαίνετε ότι σύμφωνα με τα πρότυπα πρέπει να γράψετε εισαγωγικά ως ", αλλά είναι τεμπέλης, παρά το γεγονός ότι πολλοί ιστότοποι λειτουργούν έτσι, τότε τι περιμένεις να ακούσεις; Νομίζω ότι πρόκειται για αυτό , κανείς δεν ξέρει εάν η εμφάνιση των εισαγωγικών θα υποστηρίζεται σε νέες εκδόσεις προγραμμάτων περιήγησης, οπότε πιθανότατα μπορούμε να δώσουμε μια προφανή σύσταση: αν δεν θέλετε προβλήματα στο μέλλον, 100% - μείνετε στα πρότυπα :) Αλλά το ξέρετε ήδη αυτό ή περιμένετε επιβεβαίωση: ναι, είναι βαρετό αυτό είναι όλο, ξεχάστε το και σε 10 χρόνια όλα θα είναι ίδια, εγώ (Microsoft, Mozilla κ.λπ. ) εγγύηση;

Lynn "Coffee Man" [φάκελος]
ναι, παρεμπιπτόντως... τώρα είναι χρήσιμο να το διαβάσετε, πουθενά δεν αναφέρεται ότι τα εισαγωγικά πρέπει να αναπαρίστανται με τη μορφή "
http://www2.stack.ru/~julia/HTML401/charset.html:

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

σχετικά με το γεγονός ότι πρέπει να χρησιμοποιήσετε την οντότητα που αναφέρει μόνο και &:

Εάν ο συγγραφέας θέλει να τοποθετήσει τον χαρακτήρα "" (δεκαδικός κωδικός ASCII 62) στο κείμενο.

Για να αποφευχθεί η σύγχυση με τις αναφορές χαρακτήρων (το σημάδι έναρξης μιας αναφοράς χαρακτήρων), θα πρέπει να χρησιμοποιείται η αναφορά "&" (δεκαδικός κωδικός ASCII 38) αντί του χαρακτήρα "&". Επιπλέον, η αναφορά "&" θα πρέπει επίσης να χρησιμοποιείται σε τιμές χαρακτηριστικών, καθώς επιτρέπονται οι αναφορές χαρακτήρων εντός των τιμών χαρακτηριστικών CDATA.

Αλλά περιμένω κάτι σαν την απάντηση της Lynn: ότι στην πραγματικότητα δεν υπάρχει τέτοιο πρότυπο. Δεν μου πέρασε καν από το μυαλό - οι πληροφορίες μου προέρχονται από δημοφιλή σχολικά βιβλία και για λόγους "όλοι το κάνουν".

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

Ή τέλος: πώς το κάνεις μόνος σου;

&, παρεμπιπτόντως, θέτει ένα παρόμοιο ερώτημα. Το παραπάνω έγγραφο λέει "για να αποφευχθεί η σύγχυση". Αλλά η σύγχυση είναι δυνατή μόνο εάν το & ακολουθείται από έναν από τους παρεχόμενους κωδικούς. Τι γίνεται αν είναι, ας πούμε, μια διεύθυνση URL όπως "..../script?A=1&B=2" ; Διακινδυνεύω κάτι αν κατά λάθος όρισα αυτό το URL ως href (το οποίο, φυσικά, λειτουργεί σωστά κατά τη διάρκεια της δοκιμής); Οτιδήποτε άλλο εκτός από την εξαιρετικά απίθανη κατάσταση ότι σε 10 χρόνια (όταν ο ιστότοπος είναι ξεπερασμένος ή έχει ήδη ξαναγραφεί δέκα φορές) θα εμφανιστεί μια οντότητα με το υπερβολικό όνομα &B χωρίς τελικό. ? Με άλλα λόγια, πόσο προσεκτικά πρέπει να ελέγχονται όλες αυτές οι περιπτώσεις;

Daniel, αν είσαι σίγουρος ότι δεν έχεις προβλήματα με τους υπάρχοντες κωδικούς, τότε μπορείς να γράψεις απλά &. Εάν εμφανιστεί νέος κωδικός στο μέλλον, νομίζω ότι θα δηλωθεί ρητά όχι in Προδιαγραφές HTML 4.01, επομένως δεν θα πρέπει να επηρεάζει ένα κανονικά δηλωμένο έγγραφο. Ή αναμένετε να υποστηρίξετε μελλοντικά πρότυπα από απλή αλλαγήπεριγράμματα εγγράφου;

Daniel Alievsky [φάκελος]
Στην XML, ένα κανονικό εισαγωγικό ως κείμενο επίσης δεν δημιουργεί κανένα πρόβλημα (αντίστοιχα, σε XHTML, φυσικά). Τα εισαγωγικά IMHO συνήθως μεταφράζονται σε " για έναν μόνο λόγο - δεν θέλετε να γράψετε δύο συναρτήσεις για να μετατρέψετε το κείμενο σε ασφαλή μορφή κατά την αντικατάσταση σε XML/HTML/XHTML.

Ο σκοπός αυτού του μαθήματος:

  • Το BI πρέπει να γνωρίζει τη μορφή εγγραφής XML
  • Το BI πρέπει να μπορεί να συντάξει ένα έγγραφο με τη μορφή κώδικα XML
  • Το BI πρέπει να γνωρίζει τύπους δεδομένων και να μπορεί να τους χρησιμοποιεί
  • Σημείωση: Η XML δεν είναι τόσο συνοπτική όσο την περιγράφουμε σε αυτό το σεμινάριο. Λαμβάνουμε υπόψη μόνο εκείνα τα χαρακτηριστικά της γλώσσας XML που θα χρησιμοποιηθούν στο σύστημα ODA-TM.

    XML. Η βάση

    Η XML δημιουργήθηκε για τη δομή, αποθήκευση και μεταφορά πληροφοριών.

    Το ακόλουθο παράδειγμα, "Μια σημείωση από έναν φίλο σε έναν φίλο", έχει τη μορφή XML:

    Υπενθύμιση Nikolay Ivan Ελπίζω να μην έχετε ξεχάσει τη συνάντησή μας

    Οπτικά, αυτός ο κώδικας μπορεί να αναπαρασταθεί με την ακόλουθη μορφή (Εικ. 1.).

    Ο κωδικός έχει έναν αποστολέα και έναν παραλήπτη πληροφοριών, έχει επίσης κεφαλίδα και σώμα μηνύματος.

    Προορίζεται για επεξεργασία, αποστολή και εμφάνιση από κάποιον.

    Ωστόσο, αυτό το έγγραφο XML δεν κάνει τίποτα. Είναι απλώς πληροφορίες τυλιγμένες σε ετικέτες.

    XML - δέντρο

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

    Δημιουργήστε τις δικές σας ετικέτες χρησιμοποιώντας XML

    Δεν υπάρχει τυπική μορφή για τη δημιουργία ετικετών (περιγραφείς, στοιχεία).

    Η XML δεν έχει προκαθορισμένες ετικέτες.

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

    Η σύνταξη των κανόνων XML είναι πολύ απλή και λογική

    • Όλα τα στοιχεία XML πρέπει να έχουν ετικέτα κλεισίματος
    • Τα στοιχεία XML πρέπει να είναι σωστά ένθετα (το ένα μέσα στο άλλο και σε καμία περίπτωση να μην τέμνονται)
    • Τα έγγραφα XML πρέπει να έχουν ένα ριζικό στοιχείο (τα έγγραφα XML πρέπει να περιέχουν ένα στοιχείο που είναι το γονικό στοιχείο όλων των άλλων στοιχείων. Αυτό το στοιχείο ονομάζεται ριζικό στοιχείο.
    • Η τιμή του χαρακτηριστικού XML πρέπει να περικλείεται σε εισαγωγικά.
    Σχόλια

    Εάν πρέπει να κάνετε κάποιο τμήμα ενός εγγράφου XML εντελώς «αόρατο» για το πρόγραμμα αναλυτής, τότε μπορείτε να το μορφοποιήσετε ως σχόλιο γράφοντας τους χαρακτήρες μπροστά του< !-- , а после него - символы -->με δύο παύλες στη σειρά.

    Για παράδειγμα:

    < !-- Это комментарий -->

    Το πρόγραμμα του αναλυτή θα παρακάμψει ολόκληρη αυτή τη δομή χωρίς καν να την «κοιτάξει».

    Αυτή η σύνταξη σχολίου επιβάλλει δύο περιορισμούς σε αυτήν:

    • Δεν μπορείτε να γράψετε δύο παύλες στη σειρά σε ένα σχόλιο.
    • ένα σχόλιο δεν μπορεί να τελειώσει με παύλα.
    στοιχεία XML

    Ένα στοιχείο XML είναι τα πάντα, από την ετικέτα έναρξης του στοιχείου έως την ετικέτα τέλους του.

    Το στοιχείο μπορεί να περιέχει:

    • άλλα στοιχεία
    • κείμενο
    • γνωρίσματα
    • ή συνδυασμός όλων των παραπάνω...
    Κανόνες ονομασίας XML

    Τα στοιχεία XML πρέπει να ακολουθούν αυτούς τους κανόνες ονομασίας:

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

    Τα χαρακτηριστικά παρέχουν Επιπλέον πληροφορίεςσχετικά με στοιχεία που δεν αποτελούν μέρος των δεδομένων.

    Στο παρακάτω παράδειγμα, ο τύπος αρχείου δεν σχετίζεται με τα δεδομένα, αλλά είναι σημαντικός για λογισμικό που μπορεί να χειριστεί το στοιχείο:

    computer.gif

    Τα χαρακτηριστικά XML πρέπει να περικλείονται σε εισαγωγικά

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

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

    ή μπορείτε να χρησιμοποιήσετε αντικείμενα χαρακτήρων: &&

    Μερικά παραδείγματα χρήσης του τύπου δεδομένων Ημερομηνία

    Η ημερομηνία ως χαρακτηριστικό

    Υπενθύμιση Tove Jani Μην με ξεχάσετε αυτό το Σαββατοκύριακο!

    Η ημερομηνία ως στοιχείο

    10/01/2008 Υπενθύμιση Tove Jani Μην με ξεχάσετε αυτό το Σαββατοκύριακο!

    Η ημερομηνία ως εκτεταμένο στοιχείο

    01/10/2008 Υπενθύμιση Tove Jani Μην με ξεχάσετε αυτό το Σαββατοκύριακο!

    Χαρακτηριστικά Μεταδεδομένων

    Αυτά τα αναγνωριστικά μπορούν να χρησιμοποιηθούν για τον ορισμό στοιχείων XML.

    Παράδειγμα:

    Υπενθύμιση Tove Jani Μην με ξεχάσετε αυτό το Σαββατοκύριακο! Jani Tove Re: Υπενθύμιση δεν θα

    Τα δεδομένα σχετικά με τα δεδομένα πρέπει να αποθηκεύονται ως χαρακτηριστικά και τα ίδια τα δεδομένα πρέπει να αποθηκεύονται ως στοιχεία.

    XML. Τύπος δεδομένων Ενσωματωμένοι απλοί τύποι Ημερομηνία και ώρα
    • dateTime περιέχει την ημερομηνία και την ώρα στη μορφή CCYY-MM-DThh:mm:δδ
    • διάρκεια - αντιπροσωπεύει μια χρονική διάρκεια, η οποία εκφράζεται σε Γρηγοριανές ημέρες, ώρες, λεπτά και δευτερόλεπτα.

    Για παράδειγμα: εγγραφή P1Y2M3DT10H30M45Sσημαίνει ένα έτος (1Y), δύο μήνες (2M), τρεις ημέρες (3DT), δέκα ώρες (10H), τριάντα λεπτά (30M) και 45 δευτερόλεπτα (45S).

    Η καταχώρηση μπορεί να είναι συντομογραφία P120M σημαίνει 120 μήνες και T120M σημαίνει 120 λεπτά.

    • Ο χρόνος περιέχει την ώρα σε κανονική μορφή ωω:μμ:δδ
    • ημερομηνία περιέχει την ημερομηνία στη μορφή CCYY-MM-DD
    • Το gYearMonth εκχωρεί το έτος και τον μήνα στη μορφή CCYY-MM
    • gYear σημαίνει το έτος στη μορφή CCYY
    • Το gMonthDay περιέχει τον μήνα και την ημέρα στη μορφή ΜΜ-ΗΗ
    • gDay ημέρα του μήνα σε μορφή DD
    • gMonth μήνας σε μορφή ΜΜ
    Χορδές χαρακτήρων

    Η συμβολοσειρά είναι ο βασικός τύπος χαρακτήρων.

    Μια συμβολοσειρά χαρακτήρων ως ακολουθία χαρακτήρων Unicode, συμπεριλαμβανομένων των χαρακτήρων διαστήματος, καρτέλας, επιστροφής μεταφοράς και τροφοδοσίας γραμμής.

    • normalizedString - ένας υποτύπος του τύπου - αυτές είναι συμβολοσειρές που δεν περιέχουν τροφοδοσίες γραμμής "\n", μεταφορές επιστρέφει "\r" και οριζόντιες καρτέλες "\t".
      • διακριτικό - υποτύπος του κανονικοποιημένου τύπου συμβολοσειράς - όχι, εκτός από τα κύρια και τα τελικά κενά και πολλά διαδοχικά κενά.
        • γλώσσα - υποτύπος διακριτικού, που ορίζεται για την καταγραφή του ονόματος μιας γλώσσας σύμφωνα με τη σύσταση του RFC 1766, για παράδειγμα, ru, en, de, fr.
        • Το NMTOKEN είναι ένας υποτύπος διακριτικού, που χρησιμοποιείται μόνο σε χαρακτηριστικά για την καταγραφή των απαριθμημένων τιμών τους.
        • Όνομα - ένας υποτύπος διακριτικού, που αποτελείται από ονόματα XML - ακολουθίες γραμμάτων, αριθμών, παύλες, τελείες, άνω και κάτω παύλες, που ξεκινούν με ένα γράμμα (εκτός από την δεσμευμένη ακολουθία γραμμάτων X, x, M, m, L, lσε οποιονδήποτε συνδυασμό περιπτώσεων) ή υπογράμμιση. Ονόματα που ξεκινούν με συμβολοσειρά xml, χρησιμοποιούνται από την ίδια την προδιαγραφή XML.
          • Το NCName είναι ένας υποτύπος ονόματος που δεν περιέχει άνω και κάτω τελεία. Ορίζονται τρεις υποτύποι: ID, IDREF, ENTITY
    Δυαδικοί τύποι
    • boolen - δυαδικό, λογικό. Αποδέχεται τιμές: Σωστό ή Λάθος (1 ή 0)
    • base64Binary - Base64 κωδικοποιημένοι δυαδικοί ακέραιοι αριθμοί
    • hexBinary - δυαδικοί ακέραιοι αριθμοί σε δεκαεξαδική μορφή χωρίς πρόσθετους χαρακτήρες
    Πραγματικοί αριθμοί
    • Οι δεκαδικοί είναι πραγματικοί αριθμοί που γράφονται με σταθερό σημείο: 123,45, -0,48747798, κ.λπ.
    • Οι τύποι double και float συμμορφώνονται με το πρότυπο IEEE754-85, γραμμένο με σταθερή ή κινητή υποδιαστολή.
    Ολόκληροι αριθμοί
    • ακέραιος - ο βασικός ακέραιος τύπος που περιέχει αριθμούς με τάξη μηδέν, που νοείται ως υποτύπος δεκαδικός
    • αριθμός - ορίζει έναν αριθμό (χωρίς περιορισμούς στον αριθμό των ψηφίων). μπορεί να περιέχει πρόσημο, κλάσματα και εκθέτη. Οι αξίες αλλάζουν

    από 1,7976931348623157E+308 έως 2,2250738585072014E-308

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

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

    στοιχεία XML. Κενά και μη κενά στοιχεία XML

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

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

    Κενό στοιχείο XML

    Μη κενό στοιχείο XML

    Περιεχόμενο στοιχείου...

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

    Λογική οργάνωση εγγράφων XML. Δενδρική δομή δεδομένων XML

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

    Για να γίνει πιο εύκολη η κατανόηση των παραπάνω, ας δούμε την παρακάτω εικόνα με ένα παράδειγμα.

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

    Χαρακτηριστικά XML. Κανόνες για την εγγραφή χαρακτηριστικών σε XML

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

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

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

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

    Οδηγίες επεξεργασίας XML (οδηγίες επεξεργασίας). Δήλωση XML

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

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

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

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

    Εφόσον έχουμε ασχοληθεί με ψευδο-χαρακτηριστικά, ας δούμε τι σημαίνουν.

    • Κωδικοποίηση – είναι υπεύθυνη για την κωδικοποίηση του εγγράφου XML. Συνήθως χρησιμοποιείται κωδικοποίηση UTF8.
    • Έκδοση – η έκδοση της γλώσσας XML στην οποία είναι γραμμένο αυτό το έγγραφο. Συνήθως αυτή είναι η XML έκδοση 1.0.

    Λοιπόν, τώρα ας προχωρήσουμε στο τελικό μέρος του άρθρου και ας εξετάσουμε τέτοιες κατασκευές XML ως σχόλια και ενότητες CDATA.

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

    Χαρακτηριστικά XML

    ΣΕ Χαρακτηριστικά HTMLπαρέχετε πρόσθετες πληροφορίες σχετικά με τα στοιχεία:

    Τα χαρακτηριστικά XML πρέπει να περικλείονται σε εισαγωγικά

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

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

    Στοιχεία XML έναντι Ιδιοτήτων

    Ρίξτε μια ματιά στα ακόλουθα παραδείγματα:

    Βικτώρια
    Πέτροβα

    θηλυκός
    Βικτώρια
    Πέτροβα

    Στο πρώτο παράδειγμα, το σεξ είναι μια ιδιότητα. Στο τελευταίο, το σεξ είναι ένα στοιχείο. Και τα δύο παραδείγματα παρέχουν τις ίδιες πληροφορίες.

    Δεν υπάρχουν κανόνες σχετικά με το πότε να χρησιμοποιούνται χαρακτηριστικά και πότε να χρησιμοποιούνται στοιχεία. Τα χαρακτηριστικά είναι χρήσιμα σε HTML. Σε XML, σας συμβουλεύω να τα αποφεύγετε. Χρησιμοποιήστε στοιχεία.

    Ο αγαπημένος μου τρόπος

    Τα ακόλουθα τρία έγγραφα XML περιέχουν ακριβώς τις ίδιες πληροφορίες:

    Το χαρακτηριστικό XML date χρησιμοποιείται στο πρώτο παράδειγμα:

    Το στοιχείο εκτεταμένης ημερομηνίας χρησιμοποιείται στο τρίτο: (ΑΥΤΟΣ ΕΙΝΑΙ Ο ΑΓΑΠΗΜΕΝΟΣ ΜΟΥ ΤΡΟΠΟΣ):



    10
    01
    2008

    Πέτρος
    Σβέτα
    Υπενθύμιση

    Αποφύγετε τα χαρακτηριστικά XML;

    Μερικά από τα προβλήματα με τη χρήση των χαρακτηριστικών xml:

    • τα χαρακτηριστικά δεν μπορούν να περιέχουν πολλαπλές τιμές (τα στοιχεία μπορούν)
    • τα χαρακτηριστικά δεν μπορούν να περιέχουν δομές δέντρων (τα στοιχεία μπορούν)
    • τα χαρακτηριστικά είναι πιο δύσκολο να επεκταθούν (για μελλοντικές αλλαγές)

    Μην το κάνεις έτσι:


    Χαρακτηριστικά XML για Μεταδεδομένα


    Βάσια
    Σβέτα
    Υπενθύμιση
    Μην ξεχάσετε να με καλέσετε αύριο!


    Σβέτα
    Βάσια
    Re: Υπενθύμιση
    Εντάξει

    Τα παραπάνω χαρακτηριστικά id χρησιμοποιούνται για τον προσδιορισμό διαφορετικών σημειώσεων. Δεν αποτελούν μέρος της ίδιας της σημείωσης.

    Αυτό που προσπαθώ να πω εδώ είναι ότι τα μεταδεδομένα (δεδομένα σχετικά με δεδομένα) πρέπει να αποθηκεύονται ως χαρακτηριστικά xml και τα ίδια τα δεδομένα πρέπει να αποθηκεύονται ως στοιχεία.

    Σας ευχαριστώ για την προσοχή σας!.