Περιγραφή της δομής ενός εγγράφου XML με χρήση DTD – Document Type Definition. Εισαγωγή στο XML DTD

Φύλλο εξαπάτησης DTD .

DTD – Ένας από τους τρόπους τυπικής περιγραφής της διάταξης του εγγράφου XML , κατασκευασμένο σε γλώσσα κατανοητή από το πρόγραμμα του αναλυτή.

Επί του παρόντος ο χρόνος τρέχειάρνηση χρήσης DTD υπέρ XSD (Ορισμός σχήματος XML ), για διάφορους λόγους:

  • DTD χρήσεις διαφορετικές από XML σύνταξη.
  • Δεν υπάρχει πληκτρολόγηση κόμβου.
  • Δεν υπάρχει υποστήριξη για χώρους ονομάτων.

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

ΚΑΤΑΣΚΕΥΕΣ DTD

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

  • ΣΤΟΙΧΕΙΟ (υποδεικνύει ότι ανακοινώνεται στοιχείο )
  • ΑΤΤΛΙΣΤ (λίστα χαρακτηριστικών )
  • ΟΝΤΟΤΗΤΑ (ουσία )
  • ΣΗΜΕΙΟΓΡΑΦΙΑ (ονομασία )

η δήλωση σήμανσης τελειώνει με " >

ΔΗΛΩΣΗ ΤΥΠΟΥ ΣΤΟΙΧΕΙΟΥ

(κάθε στοιχείο του εγγράφου πρέπει να περιγράφεται)

Περιεχόμενο:

  • ΑΔΕΙΑΖΩ – άδειο (για παράδειγμα
    )
  • ΟΠΟΙΟΣ – οποιοδήποτε περιεχόμενο (σπάνιο)
  • (#PCDATA) – μόνο δεδομένα χαρακτήρων
  • (λίστα ονομάτων ένθετων στοιχείων που χωρίζονται με κόμμα) – τα ένθετα στοιχεία πρέπει να εμφανίζονται στο έγγραφο με τη σειρά που αναφέρονται στη δήλωση. Δηλώνεται μόνο ένα επίπεδο φωλιάς. Τα στοιχεία μπορούν να ομαδοποιηθούν χρησιμοποιώντας αγκύλες.
    Χρησιμοποιώντας ένα διαχωριστικό | μεταξύ στοιχείων υποδηλώνει ότι εμφανίζεται ένα από τα διαχωρισμένα στοιχεία.
    Μετά από στοιχεία ή παρενθέσεις:
    • ? – εμφανίζεται 0 ή 1 φορά
    • * – 0 ή πολλές φορές
    • + – 1 ή πολλές φορές

ΔΗΛΩΣΗ ΧΑΡΑΚΤΗΡΙΣΤΙΚΩΝ

Τα χαρακτηριστικά δηλώνονται αφού δηλωθεί το ίδιο το στοιχείο. Όλα τα χαρακτηριστικά ενός στοιχείου δηλώνονται ταυτόχρονα, σε μία λίστα.

Για κάθε χαρακτηριστικό καταγράφεται το όνομα, ο τύπος και η υποχρεωτική του κατάσταση.

Τύποι χαρακτηριστικών:
  • CDATA – (Σύνολο δεδομένων χαρακτήρων ) συμβολοσειρά χαρακτήρων
  • Λίστα τιμών χαρακτηριστικών σε παρένθεση, που παρατίθεται με "|"
  • ταυτότητα - μοναδικό αναγνωριστικό
  • IDREF – ένα αναγνωριστικό που περιέχει μία από τις τιμές των χαρακτηριστικών ταυτότητα , χρησιμοποιείται ως αναφορά σε άλλα στοιχεία
  • IDREFS – ένα αναγνωριστικό που περιέχει ένα σύνολο τιμών χαρακτηριστικών τύπου ταυτότητα Το , που παρατίθεται χωρισμένο με κενό, χρησιμοποιείται επίσης ως σύνδεσμος για πολλά στοιχεία ταυτόχρονα.
  • ΟΝΤΟΤΗΤΑ – το όνομα της οντότητας που δεν έχει ελεγχθεί από τον αναλυτή ( δηλώνεται στην ίδια περιγραφήDTD )
  • ΟΝΤΟΤΗΤΕΣ – ονόματα οντοτήτων που δεν έχουν ελεγχθεί από τον αναλυτή.
  • NMTOKEN – μια λέξη που περιέχει μόνο χαρακτήρες που χρησιμοποιούνται στα ονόματα ( ονόματα άλλων στοιχείων ή χαρακτηριστικών, για παράδειγμα να αναφέρονται σε αυτά)
  • NMTOKENS – λέξεις που παρατίθενται χωρισμένες με κενά
  • ΣΗΜΕΙΟΓΡΑΦΙΑ – χαρακτηρισμός ( ονομασίες που αποκρυπτογραφούνται στην περιγραφήDTD)
  • ΣΗΜΕΙΩΣΕΙΣ – λίστα σημειώσεων
σημάδι υποχρέωσης:
  • Προεπιλεγμένη τιμή χαρακτηριστικού– υποδεικνύεται σε εισαγωγικά και σημαίνει ότι το χαρακτηριστικό είναι προαιρετικό.
  • # ΑΠΑΙΤΕΙΤΑΙ– το χαρακτηριστικό πρέπει να γραφτεί στο στοιχείο.
  • # ΥΠΟΝΟΗΤΑ– το χαρακτηριστικό είναι προαιρετικό, δεν έχει προεπιλεγμένη τιμή.
  • # ΣΤΑΘΕΡΟΣ– το χαρακτηριστικό έχει μόνο μία τιμή, η γάτα γράφεται αμέσως χωρισμένη με κενό.

Όταν χρησιμοποιείτε χώρους ονομάτων, πρέπει πάντα να προσδιορίζετε την κατάλληλη ( QName), όχι τοπική ονομασία.

Τα χαρακτηριστικά δεν περιλαμβάνονται στον προεπιλεγμένο χώρο ονομάτων.

Ιδιότητες " xml:lang " Και " xml:space ” πρέπει επίσης να δηλωθεί σε DTD σε περίπτωση χρήσης τους

ΔΗΛΩΤΕΣ ΦΟΡΕΙΣ

(ξεκινήστε με "&" και τελειώστε με ";")

Εσωτερικές οντότητες– ορίζονται κατά τη δήλωση μιας οντότητας.

- μπορεί να χρησιμοποιηθεί περαιτέρω στο πολύ DTD Παρακάτω η αγγελία.

Εξωτερικές οντότητες– περιέχεται σε ξεχωριστό αρχείο ή ενσωματώνεται στο πρόγραμμα αναλυτή.

Παραμετροποιημένες οντότητες– χρησιμοποιείται μόνο εντός της περιγραφής DTD

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

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

ΠΡΟΚΑΘΟΡΙΣΜΕΝΕΣ ΟΝΤΟΤΗΤΕΣ ΣΕ XML

ΣΥΜΒΟΛΟ ΑΝΑΚΟΙΝΩΣΗΣ ( ΣΗΜΕΙΟΓΡΑΦΙΑ)

Δηλώνονται σαν οντότητες, μπορούν επίσης να είναι εσωτερικές και εξωτερικές.

Εσωτερικός

Εξωτερικός

ΣΥΣΤΗΜΑ | ΔΗΜΟΣΙΟ - σε αυτή την περίπτωση είναι ισοδύναμα γιατί στο κοινό δεν υπάρχει απαραίτητα γνωστός σύνδεσμος.

ΚΑΤΑΛΥΜΑ DTD

Ή σε ξεχωριστό αρχείο " *.dtd », αναφέροντας το όνομά του σε εισαγωγικά στο δεύτερο μέρος του προλόγου DOCTYPE , ή συμπεριλάβετε την περιγραφή απευθείας στο δεύτερο μέρος του προλόγου, περικλείοντάς τον σε αγκύλες.

]> μπλα

Σε αυτό το κεφάλαιο, θα συζητήσουμε για τα χαρακτηριστικά DTD. Η ιδιότητα δίνει περισσότερες πληροφορίεςσχετικά με ένα στοιχείο, ή ακριβέστερα ορίζει μια ιδιότητα του στοιχείου. Ένα χαρακτηριστικό XML έχει πάντα τη μορφή ζεύγους im-value. Ένα στοιχείο μπορεί να έχει οποιονδήποτε αριθμό μοναδικών χαρακτηριστικών.

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

Σύνταξη

Η βασική σύνταξη για τη δήλωση χαρακτηριστικών DTD είναι η εξής:

Στην παραπάνω σύνταξη

    Ξεκινήστε τα χαρακτηριστικά DTD με

    στοιχείο-όνομακαθορίζει το όνομα του στοιχείου στο οποίο εφαρμόζεται το χαρακτηριστικό.

    χαρακτηριστικό-όνομακαθορίζει το όνομα του χαρακτηριστικού που περιλαμβάνεται στο στοιχείο ονόματος.

    χαρακτηριστικό-τύποςορίζει τον τύπο των χαρακτηριστικών. Θα συζητήσουμε περισσότερα για αυτό στις επόμενες ενότητες.

    χαρακτηριστικό με τιμήπαίρνει μια σταθερή τιμή που πρέπει να καθορίσουν τα χαρακτηριστικά. Θα συζητήσουμε περισσότερα για αυτό στις επόμενες ενότητες.

Παράδειγμα

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

]>

Τανμάι Πατίλ

Ας δούμε τον παραπάνω κώδικα:

    Ξεκινήστε με μια δήλωση XML με την ακόλουθη δήλωση:

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

    Το DOCTYPE λέει στον αναλυτή ότι το DTD σχετίζεται με αυτό το έγγραφο XML. Η δήλωση DOCTYPE έχει ένα θαυμαστικό (!) στην αρχή του ονόματος του στοιχείου.

    Ακολουθώντας το σώμα DTD. Εδώ δηλώσαμε το στοιχείο και το χαρακτηριστικό:

Ταυτοποίησηχαρακτηριστικό για όνοματο στοιχείο ορίζεται ως:

Εδώ είναι ο τύπος του χαρακτηριστικού CDATAκαι το νόημά του #ΑΠΑΙΤΕΙΤΑΙ.

Κανόνες δήλωσης χαρακτηριστικών

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

    Τα χαρακτηριστικά μπορούν να εμφανίζονται μόνο σε ετικέτες έναρξης ή κενές.

    Η λέξη-κλειδί ATTLIST πρέπει να βρίσκεται στην κορυφή

    Δεν θα επιτρέπονται ονόματα διπλών χαρακτηριστικών στη λίστα χαρακτηριστικών για ένα δεδομένο στοιχείο.

Τύποι χαρακτηριστικών

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

    Τύπος συμβολοσειράς

    Τύποι Tokenized

    Τύποι που αναφέρονται

Ο παρακάτω πίνακας παρέχει μια περίληψη των διαφορετικών τύπων χαρακτηριστικών:

Τύπος Περιγραφή
CDATA Δεδομένα χαρακτήρων CDATA (κείμενο και χωρίς αύξηση τιμής). Τύπος χαρακτηριστικού συμβολοσειράς.
Ταυτοποίηση Αυτός είναι ένας μοναδικός προσδιοριστής χαρακτηριστικών. Δεν πρέπει να εμφανίζεται περισσότερες από μία φορές. Τύπος χαρακτηριστικού Tokenized.
IDREF Χρησιμοποιείται για την αναφορά της ταυτότητας ενός άλλου στοιχείου. Χρησιμοποιείται για τη δημιουργία σύνδεσης μεταξύ στοιχείων. Τύπος χαρακτηριστικού Tokenized.
IDREFS Χρησιμοποιείται για αναφορά πολλαπλών αναγνωριστικών. Τύπος χαρακτηριστικού Tokenized.
ΠΡΑΓΜΑΤΙΚΟΤΗΤΑ Αντιπροσωπεύει την εξωτερική πραγματικότητα στο έγγραφο. Τύπος χαρακτηριστικού Tokenized.
ΠΡΑΓΜΑΤΙΚΟΤΗΤΑ Αντιπροσωπεύει μια λίστα εξωτερικών πραγματικοτήτων σε ένα έγγραφο. Τύπος χαρακτηριστικού Tokenized.
NMTOKEN Είναι παρόμοιο με το CDATA και το χαρακτηριστικό value αποτελείται από ένα έγκυρο όνομα XML. Τύπος χαρακτηριστικού Tokenized.
NMTOKENS Είναι παρόμοιο με το CDATA και το χαρακτηριστικό value αποτελείται από μια λίστα με ένα έγκυρο όνομα XML. Τύπος χαρακτηριστικού Tokenized.
ΣΗΜΕΙΟΓΡΑΦΙΑ Το στοιχείο θα αναφέρεται στη δηλωμένη σημείωση στο έγγραφο DTD. Απαριθμημένος τύπος χαρακτηριστικού.
Ονομασία Σας επιτρέπει να ορίσετε μια συγκεκριμένη λίστα τιμών όπου μία από τις τιμές πρέπει να ταιριάζει. Απαριθμημένος τύπος χαρακτηριστικού.

Δήλωση ενός χαρακτηριστικού με μια τιμή

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

    μπορεί να έχει προεπιλεγμένη τιμή

    μπορεί να έχει σταθερή τιμή

  • υποδηλώνει

Αυτόματα αποδεκτές τιμές

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

Σύνταξη

Η ακόλουθη σύνταξη τιμών:

όπου είναι οι προεπιλεγμένες τιμές έννοιαένα συγκεκριμένο χαρακτηριστικό με μια τιμή.

Παράδειγμα

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

]>

Τανμάι Πατίλ

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

ΣΤΑΘΕΡΕΣ τιμές

Η λέξη-κλειδί #FIXED που ακολουθεί μια σταθερή τιμή χρησιμοποιείται όταν θέλετε να καθορίσετε ότι ένα χαρακτηριστικό με μια τιμή είναι σταθερό και δεν μπορεί να αλλάξει. Η γενική χρήση σταθερών χαρακτηριστικών ορίζει τους αριθμούς έκδοσης.

Σύνταξη

Ακολουθεί η σύνταξη σταθερής τιμής:

όπου #FIXED είναι ένα συγκεκριμένο χαρακτηριστικό με μια τιμή.

Παράδειγμα

Το παρακάτω είναι ένα απλό παράδειγμα δήλωσης χαρακτηριστικών με ΣΤΑΘΕΡΗ τιμή:

]>

Σε αυτό το παράδειγμα χρησιμοποιήσαμε τη λέξη-κλειδί #FIXED όπου υποδεικνύει ότι η τιμή "tutorialspoint" είναι η μόνη τιμή για όνομαΧαρακτηριστικό στοιχείο. Αν προσπαθήσουμε να αλλάξουμε ένα χαρακτηριστικό με μια τιμή μετά από αυτό, δίνει ένα σφάλμα.

Ακολουθεί μη έγκυρο DTD:

]>

είμαστε μια δωρεάν διαδικτυακή σχολή διδασκαλίας

ΑΠΑΙΤΟΥΜΕΝΕΣ τιμές

Όταν θέλετε να καθορίσετε ότι απαιτείται ένα χαρακτηριστικό, χρησιμοποιήστε τη λέξη-κλειδί #REQUIRED.

Σύνταξη

Ακολουθώντας τη σύνταξη #REQUIRED:

όπου #REQUIRED είναι ένας συγκεκριμένος τύπος χαρακτηριστικού.

Παράδειγμα

Ακολουθεί ένα απλό παράδειγμα δήλωσης χαρακτηριστικών DTD με τη λέξη-κλειδί #REQUIRED:

]>

Τανμάι Πατίλ

Σε αυτό το παράδειγμα, χρησιμοποιήσαμε τη λέξη-κλειδί #REQUIRED για να το προσδιορίσουμε ταυτοποίησηπρέπει να παρέχεται χαρακτηριστικό στοιχείο ονόματος-όνομα

ΥΠΟΝΟΗΤΕΣ έννοιες

Όταν δηλώνετε χαρακτηριστικά, πρέπει πάντα να προσδιορίζετε μια δήλωση τιμής. Εάν το χαρακτηριστικό που δηλώνετε δεν έχει προεπιλεγμένη τιμή, δεν έχει σταθερή τιμή και δεν απαιτείται, τότε πρέπει να δηλώσετε αυτό το χαρακτηριστικό ως υπονοείται. Η λέξη-κλειδί #IMPLIED χρησιμοποιείται για να ορίσει το χαρακτηριστικό ως υπονοείται.

Σύνταξη

Ακολουθώντας τη σύνταξη #IMPLIED:

όπου #IMPLIED είναι ένας συγκεκριμένος τύπος χαρακτηριστικού.

Παράδειγμα

Ακολουθώντας ένα απλό παράδειγμα #IMPLIED

]>

Σε αυτό το παράδειγμα χρησιμοποιήσαμε τη λέξη-κλειδί #IMPLIED καθώς δεν θέλουμε να καθορίσουμε κανένα χαρακτηριστικό που θα συμπεριληφθεί όνομαστοιχείο. Είναι προαιρετικό.

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

Γιατί χρειάζεστε ένα DTD;

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

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

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

Συγγραφή ορισμών DTD: γενικές αρχές.

Συσχέτιση ενός DTD με ένα έγγραφο XML

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

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

..

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

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

Το εσωτερικό μπλοκ δήλωσης της σήμανσης της ετικέτας DOCTYPE αποτελείται από μια αριστερή αγκύλη, μια λίστα δηλώσεων και μια δεξιά αγκύλη:

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

Τα εξωτερικά DTD είναι πιο ευέλικτα από ορισμένες απόψεις. Σε αυτήν την περίπτωση, η δήλωση DOCTYPE αποτελείται από τη συνήθη λέξη-κλειδί και το όνομα του ριζικού στοιχείου, ακολουθούμενη από μια άλλη λέξη-κλειδί, SYSTEM ή PUBLIC, που υποδεικνύει την πηγή του εξωτερικού ορισμού DTD, ακολουθούμενη από τον εντοπισμό αυτού του ορισμού. Εάν η λέξη-κλειδί είναι SYSTEM , το DTD πρέπει να βρίσκεται άμεσα και ρητά στην καθορισμένη διεύθυνση URL.

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

Η λέξη-κλειδί PUBLIC προορίζεται για γνωστά λεξικά. Μια εφαρμογή που αναλύει ένα έγγραφο από αυτό το λεξικό πρέπει να χρησιμοποιήσει κάποια στρατηγική για να βρει το κατάλληλο DTD.

Το πρότυπο XML 1.0 επιτρέπει σε μια PUBLIC δήλωση να έχει και δημόσιο URI και αναγνωριστικό συστήματος. Εάν μια εφαρμογή ή αναλυτής που εκτελεί ένα έγγραφο δεν μπορεί να βρει ένα DTD από ένα URI με τη λέξη-κλειδί PUBLIC, πρέπει να χρησιμοποιήσει το αναγνωριστικό συστήματος.

Βασικές δηλώσεις σήμανσης

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

Οι δύο πρώτοι τύποι σχετίζονται με τις πληροφορίες που αναμένουμε να βρούμε σε ένα έγγραφο XML - στοιχεία και χαρακτηριστικά.

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

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

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

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

Το DTD μπορεί να συμπεριληφθεί απευθείας στο έγγραφο XML, με αναφορά μέσω URL ή σε συνδυασμό των δύο. Όταν συμπεριλαμβάνετε ένα DTD απευθείας σε ένα έγγραφο XML, ο ορισμός του DTD εμφανίζεται αμέσως μετά τον πρόλογο:

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

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

Όπως και με την εσωτερική δήλωση DTD, το root_element_name πρέπει να ταιριάζει με το όνομα του ριζικού στοιχείου στις ετικέτες που περιέχουν ολόκληρο το έγγραφο XML. Το χαρακτηριστικό SYSTEM υποδεικνύει ότι το some_dtd.dtd βρίσκεται στον τοπικό διακομιστή. Ωστόσο, το αρχείο some_dtd.dtd μπορεί επίσης να αναφέρεται από την απόλυτη διεύθυνση URL του. Τέλος, η διεύθυνση URL του εξωτερικού DTD, που βρίσκεται σε έναν τοπικό ή απομακρυσμένο διακομιστή, καθορίζεται σε εισαγωγικά.

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

Επιστρέφοντας στη Λίστα 14.1, βλέπουμε ότι το cookbook είναι το όνομα του ριζικού στοιχείου και το cookbook.dtd είναι το όνομα του αρχείου DTD. Τα περιεχόμενα του DTD παρουσιάζονται στην Λίστα 14.2 και λεπτομερείς περιγραφές κάθε σειράς δίνονται παρακάτω.

Λίστα 14.2. DTD για τη λίστα 14.1 (cookbook.dtd)

] >

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

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

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

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

Εδώ είναι ο πρώτος ορισμός μιας ετικέτας που δεν περιέχει ένθετες ετικέτες. Εξ ορισμού, περιέχει #PCDATA, το οποίο είναι δεδομένα αυθαίρετων χαρακτήρων που δεν θεωρούνται μέρος της σήμανσης.

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

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

Το στοιχείο διεργασίας περιέχει μία ή περισσότερες περιπτώσεις του στοιχείου βήματος.

Το στοιχείο βήματος, όπως και το στοιχείο συστατικού, αντιστοιχεί σε ένα μεμονωμένο στοιχείο σε μια λίστα υψηλότερου επιπέδου. Επομένως, πρέπει να περιέχει δεδομένα χαρακτήρων.

Σημειώστε ότι το στοιχείο συνταγής στη Λίστα 14.1 περιέχει ένα χαρακτηριστικό. Αυτό το χαρακτηριστικό, κατηγορία, καθορίζει τη γενική κατηγορία στην οποία ανήκει η συνταγή - στο παράδειγμα που δίνεται, η κατηγορία "Ιταλικά" (Ιταλικά). Ο ορισμός ATTLIST καθορίζει τόσο το όνομα του στοιχείου όσο και το όνομα του χαρακτηριστικού. Επιπλέον, η αντιστοίχιση κάθε συνταγής σε μια συγκεκριμένη κατηγορία απλοποιεί την ταξινόμηση, οπότε το χαρακτηριστικό δηλώνεται υποχρεωτικό (#REQUIRED).

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

Για να ολοκληρώσω αυτήν την ενότητα, θα παράσχω μια περίληψη των κύριων στοιχείων ενός τυπικού αρχείου DTD:

  • Δηλώσεις τύπου στοιχείου·
  • δηλώσεις χαρακτηριστικών·
  • ID, IDREF και IDREFS.
  • δηλώσεις οντοτήτων.

Έχουμε ήδη δει μερικά από αυτά τα στοιχεία στη Λίστα 14.2. Κάθε στοιχείο θα περιγραφεί λεπτομερέστερα παρακάτω.

Δηλώσεις στοιχείων

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

Ο ακόλουθος ορισμός του στοιχείου διεργασίας λέει ότι περιέχει ακριβώς ένα ένθετο στοιχείο που ονομάζεται βήμα:

Ωστόσο, οι διαδικασίες με ένα βήμα είναι αρκετά σπάνιες - πιθανότατα θα υπάρξουν πολλά βήματα. Για να υποδείξετε ότι ένα στοιχείο περιέχει μία ή περισσότερες περιπτώσεις ενός ένθετου στοιχείου βήματος, χρησιμοποιήστε τη σημαία επανάληψης:

Ο αριθμός των ένθετων στοιχείων μπορεί να ρυθμιστεί με διάφορους τρόπους. Μια πλήρης λίστα τελεστών στοιχείων δίνεται στον πίνακα. 14.1.

Πίνακας 14.1. Χειριστές στοιχείων

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

Δεδομένου ότι οι δυνατότητες επανάληψης δεν καθορίζονται, κάθε ετικέτα πρέπει να εμφανίζεται ακριβώς μία φορά.

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

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

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

Δηλώσεις Ιδιοτήτων

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

ElementName καθορίζει το όνομα του στοιχείου που θα συμπεριληφθεί στην ετικέτα. Στη συνέχεια παρατίθενται τα χαρακτηριστικά που σχετίζονται με το στοιχείο. Κάθε δήλωση χαρακτηριστικού αποτελείται από τρία κύρια στοιχεία: ένα όνομα, έναν τύπο δεδομένων και μια σημαία που καθορίζει τα χαρακτηριστικά αυτού του χαρακτηριστικού. Δηλώσεις άλλων χαρακτηριστικών μπορούν να τοποθετηθούν αντί της έλλειψης(...).

Είδαμε ήδη μια απλή δήλωση χαρακτηριστικών στη Λίστα 14.2:

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

Δεν είναι απαραίτητο να μορφοποιήσετε τις διαφημίσεις σας με αυτόν τον τρόπο. Ωστόσο, οι δηλώσεις πολλαπλών γραμμών είναι πιο σαφείς από τις δηλώσεις μίας γραμμής. Επιπλέον, καθώς απαιτούνται και τα δύο χαρακτηριστικά, η ετικέτα reci re δεν μπορεί να περιοριστεί μόνο σε ένα χαρακτηριστικό, πρέπει να περιλαμβάνει και τα δύο χαρακτηριστικά ταυτόχρονα. Για παράδειγμα, η ακόλουθη ετικέτα θα θεωρηθεί μη έγκυρη:

Γιατί; Επειδή λείπει το χαρακτηριστικό κατηγορίας. Μια έγκυρη ετικέτα πρέπει να περιέχει και τα δύο χαρακτηριστικά:

Οι ειδικές συνθήκες για την επεξεργασία χαρακτηριστικών περιγράφονται από τρεις σημαίες που παρατίθενται στον Πίνακα. 14.2.

Πίνακας 14.2. Σημαίες χαρακτηριστικών

Τύποι χαρακτηριστικών

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

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

Πολύ συχνά τα χαρακτηριστικά περιέχουν γενικά δεδομένα χαρακτήρων. Αυτά τα χαρακτηριστικά ονομάζονται χαρακτηριστικά CDATA. Το ακόλουθο παράδειγμα συναντήθηκε ήδη στην αρχή αυτής της ενότητας:

Ιδιότητες ID, IDREF και IDREFS

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

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

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

Σπαγγέτι alla Carbonara

Η συνταγή προσδιορίζεται μοναδικά με το αναγνωριστικό ital003. Σημειώστε ότι το χαρακτηριστικό redpe-id είναι τύπου ID, επομένως το ital003 δεν μπορεί να χρησιμοποιηθεί ως η τιμή του χαρακτηριστικού recipe-id ενός άλλου στοιχείου, διαφορετικά το έγγραφο θα θεωρηθεί συντακτικά μη έγκυρο. Τώρα ας πούμε ότι αργότερα θέλετε να αναφέρετε αυτήν τη συνταγή από άλλο έγγραφο - ας πούμε, από τη λίστα αγαπημένων συνταγών ενός χρήστη. Εδώ μπαίνουν στο παιχνίδι οι παραπομπές και το χαρακτηριστικό IDREF. Στο χαρακτηριστικό IDREF εκχωρείται ένα αναγνωριστικό που χρησιμοποιείται για την αναφορά του στοιχείου, παρόμοιο με τον τρόπο με τον οποίο χρησιμοποιείται μια διεύθυνση URL για τον προσδιορισμό μιας σελίδας σε έναν υπερσύνδεσμο. Εξετάστε το ακόλουθο απόσπασμα κώδικα XML:

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

Αμέτρητα χαρακτηριστικά

Όταν δηλώνετε ένα χαρακτηριστικό, μπορείτε να παραθέσετε όλες τις έγκυρες τιμές που γίνονται δεκτές από το χαρακτηριστικό. Στο παράδειγμά μας, αυτό θα ήταν βολικό επειδή μπορείτε να ορίσετε αμέσως μια λίστα έγκυρων κατηγοριών. Η παραπάνω δήλωση συντάσσεται ως εξής:

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

Απαριθμημένα χαρακτηριστικά με προεπιλεγμένη τιμή

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

Εάν το χαρακτηριστικό κατηγορίας δεν προσδιορίζεται ρητά, ορίζεται από προεπιλογή στα ιταλικά.

ENTITY και ENTITIES χαρακτηριστικά

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

Μπορείτε επίσης να δηλώσετε πολλές οντότητες ταυτόχρονα αντικαθιστώντας το ENTITY με ENTITIES. Οι τιμές διαχωρίζονται με κενά.

Χαρακτηριστικά NMTOKEN και NMTOKENS

Τα χαρακτηριστικά NMTOKEN είναι σειρές χαρακτήρων που περιλαμβάνονται σε ένα περιορισμένο σύνολο. Η δήλωση ενός χαρακτηριστικού τύπου NMTOKEN προϋποθέτει ότι η τιμή του χαρακτηριστικού συμμορφώνεται με τους καθορισμένους περιορισμούς. Συνήθως, η τιμή του χαρακτηριστικού NMTOKEN αποτελείται από μία λέξη:

Μπορείτε να δηλώσετε πολλά χαρακτηριστικά ταυτόχρονα αντικαθιστώντας το NMTOKEN με NMTOKEN. Οι τιμές διαχωρίζονται με κενά.

Δηλώσεις οντοτήτων

Μια δήλωση οντότητας είναι παρόμοια με την εντολή define σε ορισμένες γλώσσες προγραμματισμού, συμπεριλαμβανομένης της PHP. Οι αναφορές οντοτήτων αναφέρθηκαν εν συντομία στην προηγούμενη ενότητα, "Εισαγωγή της σύνταξης XML". Για κάθε ενδεχόμενο, επιτρέψτε μου να σας υπενθυμίσω ότι ένας σύνδεσμος οντότητας χρησιμοποιείται ως αντικατάσταση άλλου περιεχομένου. Όταν υποβάλλεται σε επεξεργασία ένα έγγραφο XML, όλες οι εμφανίσεις μιας οντότητας αντικαθίστανται από το περιεχόμενο που αντιπροσωπεύει. Υπάρχουν δύο τύποι οντοτήτων: εσωτερικές και εξωτερικές.

Εσωτερικές οντότητες

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

Κατά την επεξεργασία των εγγράφων, όλες οι περιπτώσεις &Πνευματικά δικαιώματα αντικαθίστανται με το κείμενο "Copyright 2000 YourCompanyName. Ολα τα δικαιώματα διατηρούνται." Όλος ο κώδικας XML στο κείμενο αντικατάστασης αντιμετωπίζεται σαν να υπήρχε στο αρχικό έγγραφο.

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

Εξωτερικές οντότητες

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

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

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

Πόροι XML

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

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

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

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

Δεν υπάρχουν προβλήματα με τον έλεγχο της ορθότητας του εγγράφου: εάν δεν εμφανιστούν σφάλματα και όλα εμφανίζονται όπως θέλαμε, τότε το έγγραφο είναι σωστό. Για παράδειγμα, αν γράψετε κάτι σαν " Γειά σου!", τότε το έγγραφό μας θα είναι απολύτως σωστό, αλλά θα αγνοηθεί από το πρόγραμμα περιήγησης. Γιατί; Επειδή το πρόγραμμα περιήγησης δεν γνωρίζει τι είδους "Z" είναι αυτό. Και αν ελέγξουμε την εγκυρότητα του εγγράφου μας χρησιμοποιώντας έναν επικυρωτή, τότε το έγγραφο δεν θα αναγνωριστεί ως τέτοιο. Πώς το γνωρίζει αυτό ο επικυρωτής και σε ποια βάση έβγαλε μια τέτοια ετυμηγορία;

Η εγκυρότητα ελέγχεται χρησιμοποιώντας έναν ορισμό τύπου εγγράφου (DTD). Για παράδειγμα, για "αυστηρό" HTML μοιάζει με αυτό.

Το DTD μπορεί να περιγραφεί τόσο μέσα στο έγγραφο όσο και μέσα ξεχωριστό αρχείο(παρόμοιο με το CSS: ενσωματωμένα και πρόσθετα φύλλα στυλ).

Δήλωση DTD

Η δήλωση DTD τοποθετείται πριν από το πρώτο (root) στοιχείο του εγγράφου, ξεκινώντας με την ακολουθία " ».

Το εσωτερικό DTD περιγράφεται ως εξής:

Ανάμεσα στις αγκύλες βρίσκεται το περιεχόμενο του DTD, το λεγόμενο εσωτερικό υποσύνολο, Για παράδειγμα:

] >

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

Αντίστοιχα, όλοι οι κανόνες είναι γραμμένοι σε αυτό το αρχείο, το λεγόμενο εξωτερικό υποσύνολο.

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

Γειά σου Κόσμε!

Αντί για τη λέξη-κλειδί "ΣΥΣΤΗΜΑ", η λέξη "ΔΗΜΟΣΙΟ" μπορεί να χρησιμοποιηθεί για να υποδείξει ότι το DTD προορίζεται για γενική χρήση:

Τα εσωτερικά και τα εξωτερικά υποσύνολα μπορούν να καθοριστούν ταυτόχρονα (και πάλι, παρόμοια με το CSS):

] >

Εδώ διαβάζονται πρώτα τα περιεχόμενα του αρχείου "catalog.dtd" και μετά τα περιεχόμενα που καθορίζονται μέσα στις αγκύλες.

Στοιχεία εγγράφου

Τα στοιχεία δηλώνονται στο DTD χρησιμοποιώντας τη λέξη-κλειδί "ELEMENT", ακολουθούμενη από το όνομα του στοιχείου και τα περιεχόμενά του, μέσα σε παρένθεση:

Εάν ένα στοιχείο έχει θυγατρικά στοιχεία, γράφεται ως εξής:

που αντιστοιχεί στο έγγραφο:

</book> </p><p>Αν ένα στοιχείο έχει πολλά <a href="https://radiobud.ru/el/life-hacks-for-windows/tehniki-raboty-s-dom-roditelskie-dochernie-i-sosednie-elementy.html">παιδικά στοιχεία</a>, τότε παρατίθενται χωρισμένα με κόμμα και πρέπει να ακολουθούν αυστηρά με την καθορισμένη σειρά:</p><p> <!ELEMENT book (title, author)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> </p><p>Το παραπάνω παράδειγμα έχει ως εξής. Το στοιχείο "βιβλίο" πρέπει να περιέχει μόνο ένα στοιχείο "τίτλος", ακολουθούμενο από μόνο ένα στοιχείο "συγγραφέας". Τα ίδια τα στοιχεία «τίτλος» και «συγγραφέας» δεν περιέχουν στοιχεία, αλλά μπορούν να περιέχουν μόνο κάποιο κείμενο.</p> <p>Οι ακόλουθοι ειδικοί χαρακτήρες μπορούν να χρησιμοποιηθούν για την ποσοτικοποίηση της παρουσίας ενός στοιχείου:</p> <ul><li>Ο χαρακτήρας "*" που ακολουθεί ένα στοιχείο σημαίνει ότι το στοιχείο μπορεί να είναι παρόν μία ή περισσότερες φορές ή να μην υπάρχει καθόλου (από μηδέν έως + άπειρο)</li> <li>Το σύμβολο "+" που ακολουθεί ένα στοιχείο σημαίνει ότι το στοιχείο μπορεί να εμφανιστεί μία ή περισσότερες φορές (από 1 έως + άπειρο)</li> <li>Σύμβολο "; ", μετά το στοιχείο, σημαίνει ότι το στοιχείο μπορεί είτε να απουσιάζει είτε να υπάρχει μόνο μία φορά (0 ή 1)</li> </ul> <!ELEMENT book (title, author)> ... <!ELEMENT book (title*, author)> ... <!ELEMENT book (title+, author)> ... <!ELEMENT book (title?, author)> <p>Εάν υπάρχει ανάγκη να υποδείξετε ένα από τα πολλά στοιχεία (είτε τίτλος είτε συγγραφέας - οποιοδήποτε από αυτά, αλλά όχι και τα δύο), πρέπει να χρησιμοποιήσετε το σύμβολο " | ":</p><p> <!ELEMENT book (title | author)> </p><p>Το κείμενο είναι επίσης ισότιμος συμμετέχων στο παιχνίδι. Η λέξη-κλειδί "PCDATA" υποδεικνύει δεδομένα χαρακτήρων προς ανάλυση, επομένως οποιοδήποτε κείμενο περιέχει χαρακτήρες σήμανσης ("< », « >" και " & ") θα αντιμετωπίζονται ως σήμανση. <a href="https://radiobud.ru/el/life-hacks-wi-fi/frilansery-dlya-sozdaniya-programm-na-android-mobilnye-prilozheniya-dlya.html">Μοιρασιά</a>κείμενο και στοιχεία καλείται <i>μικτό περιεχόμενο</i>. Κατά τη δήλωση μικτού περιεχομένου, πρέπει πρώτα να προσδιορίζεται το "PCDATA":</p><p> <!ELEMENT book (#PCDATA | title | author)> </p><p>Το ακόλουθο τμήμα εγγράφου ισχύει για το παραπάνω παράδειγμα:</p><p> <book> <title /> </book> <book> <author /> </book> <book>Χωρίς δεδομένα</book> </p><p>Ομάδες στοιχείων περικλείονται σε παρένθεση. Το στοιχείο "βιβλίο" πρέπει να περιέχει είτε κείμενο είτε (έναν "τίτλο", έναν ή περισσότερους "συγγραφέα" και ίσως ένα "pubyear" με αυτή τη σειρά):</p><p> <!ELEMENT book (#PCDATA | (title, author+, pubyear?))> <!ELEMENT disc (#PCDATA | title)*> </p><p>Το ακόλουθο τμήμα εγγράφου XML αντιστοιχεί σε αυτό το παράδειγμα:</p><p> <disc /> <book> <title /> <author /> <author /> </book> <book>Χωρίς δεδομένα</book> </p><p>Το στοιχείο μπορεί να είναι κενό. Ένα τέτοιο στοιχείο δεν μπορεί να περιέχει θυγατρικά στοιχεία ή κείμενο (για παράδειγμα, το στοιχείο "br" σε HTML). Ένα τέτοιο στοιχείο καθορίζεται με τη λέξη-κλειδί "EMPTY":</p><p> <!ELEMENT photo EMPTY> </p><p>Ένα στοιχείο μπορεί επίσης να δηλωθεί με τη λέξη-κλειδί "ΟΠΟΙΑΔΗΠΟΤΕ" που σημαίνει ότι το στοιχείο μπορεί να περιέχει στοιχεία και κείμενο, όλα αυτά, ακόμη και να είναι κενό.</p> <h3>Χαρακτηριστικά Στοιχείων</h3> <p>Τα στοιχεία σε ένα έγγραφο XML μπορούν να έχουν χαρακτηριστικά, τα οποία γράφονται ως "όνομα=τιμή" στις αρχικές ή κενές ετικέτες. Μια γενική δήλωση των χαρακτηριστικών ενός συγκεκριμένου στοιχείου ξεκινά με τη λέξη-κλειδί "ATTLIST", ακολουθούμενη από το όνομα του στοιχείου και τη δήλωση των ίδιων των χαρακτηριστικών:</p><p> <!ELEMENT title (#PCDATA)> <!ATTLIST title id CDATA #REQUIRED stock CDATA #IMPLIED> </p><p>Η λέξη-κλειδί "ΑΠΑΙΤΕΙΤΑΙ" υποδεικνύει ότι απαιτείται το χαρακτηριστικό. Η λέξη-κλειδί "ΣΥΝΟΠΤΟ", από την άλλη πλευρά, λέει ότι το χαρακτηριστικό είναι προαιρετικό.</p> <p>Τα χαρακτηριστικά μπορούν να έχουν μια λίστα επιτρεπόμενων τιμών:</p><p> <!ATTLIST title readonly (yes|no) #REQUIRED> </p><p>Η προεπιλεγμένη τιμή μπορεί επίσης να οριστεί:</p><p> <!ATTLIST title readonly (yes|no) #REQUIRED "yes">pubyear CDATA #IMPLIED "2007"></p><p>Ένα χαρακτηριστικό μπορεί επίσης να είναι σταθερά, δηλαδή μπορεί να έχει μόνο την τιμή που δηλώνεται στη δήλωση χαρακτηριστικών. Αυτό γίνεται χρησιμοποιώντας τη λέξη-κλειδί "ΔΙΟΡΘΩΘΕΙ":</p><p> <!ATTLIST title copyright <strong>#ΔΙΟΡΘΩΘΗΚΕ "udvikler"></p><p>Ο τύπος χαρακτηριστικού "CDATA" επιτρέπει οποιουσδήποτε χαρακτήρες εκτός από "< », « >", " & ", " " " Και " " ". Εάν χρησιμοποιούνται, αυτοί οι χαρακτήρες πρέπει να αντικατασταθούν με ειδικούς χαρακτήρες όπως "< » и т.п. Внимание : в DTD ключевое слово « CDATA » имеет другое значение, чем раздел « CDATA » в XML-документе!</p> <p>Εκτός από τον τύπο CDATA, τα χαρακτηριστικά μπορούν να έχουν τους ακόλουθους τύπους:</p> <ul><li>NMTOKEN - μπορεί να περιέχει μόνο γράμματα, αριθμούς, ". ", " - ", " _ " Και " : "</li> <li>NMTOKEN - μπορεί να περιέχει τους ίδιους χαρακτήρες με το "NMTOKEN" συν κενό, επιστροφή μεταφοράς, τροφοδοσία γραμμής και χαρακτήρες καρτέλας</li> </ul> <!ATTLIST title id CDATA #REQUIRED stock NMTOKEN #IMPLIED publisher NMTOKENS #IMPLIED> <p>Ένας άλλος τύπος χαρακτηριστικού, "ID", επιτρέπει τις ίδιες τιμές με τον τύπο NMTOKEN, αλλά η τιμή πρέπει να ξεκινά είτε με ένα γράμμα, "_" ή ":". Οποιοδήποτε στοιχείο μπορεί να έχει μόνο ένα χαρακτηριστικό του τύπου "ID". Ένα χαρακτηριστικό του τύπου "ID" δεν μπορεί να είναι σταθερά (δηλώνεται ως "FIXED"). Η τιμή ενός χαρακτηριστικού τύπου "ID" πρέπει να είναι μοναδική σε όλο το έγγραφο XML:</p><p> <!ELEMENT book (title, author)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ATTLIST title id ID #REQUIRED stock CDATA #IMPLIED> <!ATTLIST author id ID #REQUIRED city CDATA #IMPLIED> </p><p>Ένα χαρακτηριστικό στοιχείου μπορεί να είναι μια αναφορά σε ένα χαρακτηριστικό του τύπου "ID" άλλου στοιχείου. Για να γίνει αυτό, δηλώνεται ως χαρακτηριστικό του τύπου "IDREF". Εάν ένα χαρακτηριστικό πρέπει να αναφέρεται σε ένα χαρακτηριστικό του τύπου "ID" πολλών στοιχείων, τότε χρησιμοποιείται η λέξη-κλειδί "IDREFS":</p><p> <!ELEMENT book (title+, author, year, publisher)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ATTLIST title id ID #REQUIRED> <!ATTLIST author id ID #REQUIRED> <!ATTLIST year ref IDREF #REQUIRED> <!ATTLIST publisher from IDREFS #REQUIRED> </p><p>Στο έγγραφο XML θα μοιάζει με αυτό:</p><p> <book> <title id="t1" /> <title id="t2" /> <title id="t3" /> <author id="a1" /> <year ref="t2" /> <publisher from="t1 t2 a1" /> </book> </p><h3>Φορείς που δηλώνουν</h3> <p>Εκτός από τα στοιχεία και τα χαρακτηριστικά τους, μπορούμε να ορίσουμε <i>ουσία</i>, γραμμένο με τη λέξη-κλειδί "ENTITY":</p><p> <!ENTITY name "SuperMegaMaster"> </p><p> <userName>&name;</userName> </p><p>Ως αποτέλεσμα, το όνομα οντότητας "όνομα" θα αντικατασταθεί από την τιμή του, στην περίπτωσή μας "SuperMegaMaster".</p> <p>Και για να ολοκληρώσουμε την ευτυχία μας, πρέπει να προσθέσουμε ότι οι ιδιότητες των στοιχείων μπορούν να έχουν παρόμοιες οντότητες ως έννοιες - <i>οντότητα-χαρακτηριστικά</i>. Ορίζονται επίσης χρησιμοποιώντας τη λέξη-κλειδί "ENTITY", αλλά έχουν έναν περιορισμό - πρέπει να αναφέρονται σε εξωτερικές μη αναλυμένες οντότητες που ορίζονται στο εξωτερικό υποσύνολο του DTD:</p><p> <!DOCTYPE catalog [ <!ENTITY list SYSTEM "companyList.html" NDATA parse> <!ELEMENT catalog (user+)> <!ELEMENT user (name)> <!ATTLIST user company ENTITY #REQUIRED> <!ELEMENT name (#PCDATA)> ] > </p><p>Στο παραπάνω παράδειγμα, δηλώνεται μια οντότητα "list" που παραπέμπει σε ένα εξωτερικό έγγραφο "companyList.html". Η λέξη-κλειδί "NDATA" υποδηλώνει ότι το εξωτερικό έγγραφο δεν είναι έγγραφο XML. Στη συνέχεια, για το στοιχείο «χρήστης» δηλώνεται το χαρακτηριστικό «company», το οποίο είναι υποχρεωτικό και έχει τον τύπο «ENTITY», δηλαδή αναφέρεται σε κάποια οντότητα. Εφόσον στο παράδειγμά μας προσδιορίζεται μόνο μία οντότητα ("λίστα"), αυτή και μόνο αυτή μπορεί να είναι η τιμή του χαρακτηριστικού "company" στο έγγραφο XML:</p><p> <catalog> <user company="list"> <name>SuperMegaMaster</name> </user> </catalog> </p><p>Το μόνο που μένει είναι να καταλάβουμε τι σημαίνει "ανάλυση" στη γραμμή δήλωσης της οντότητας "λίστα"; Όταν χρησιμοποιείτε μη αναλυμένα δεδομένα, δηλαδή δεδομένα που δεν αναλύονται από τον αναλυτή XML, είναι καλό να παρέχετε πληροφορίες στην εφαρμογή (χρησιμοποιώντας <a href="https://radiobud.ru/el/internet/poluchit-dannye-iz-xml-1s-formirovanie-faila-xml-prostaya-vygruzka.html">αυτό το έγγραφο XML</a>), πώς να επεξεργαστείτε αυτήν την οντότητα, εάν είναι απαραίτητο. Για να γίνει αυτό, πρέπει να χρησιμοποιήσουμε τη σημείωση που καθορίζεται από τη λέξη-κλειδί "NOTATION" και να προσθέσουμε το DTD μας ως εξής:</p><p> <!NOTATION parse SYSTEM "iexlorer"> <!ENTITY list SYSTEM "companyList.html" NDATA parse> </p><p>Η λέξη "ανάλυση" στη δήλωση οντότητας του φύλλου υποδεικνύει πώς μπορείτε να αναλύσετε το αρχείο "companyList.html" - αναζητήστε μια σημείωση που ονομάζεται "ανάλυση" και ακολουθήστε τις οδηγίες του. Στην περίπτωσή μας, η εφαρμογή μπορεί να ανοίξει το MS InternetExplorer και να φορτώσει το έγγραφο "companyList.html" σε αυτό.</p> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> </article> <div class='yarpp-related'> <div class="related-items"> <div class="headline">Προτείνουμε άλλα άρθρα</div> <div class="items"> <div class="item"> <a href="https://radiobud.ru/el/life-hacks-for-smartphones/remont-sotovyh-telefonov-meizu-remont-telefonov-meizu-v-den-obrashcheniya.html" class="item__link"> <img src="/uploads/ff36ff6325b720c0676eef5527071257.jpg" width="220" height="170" alt="Επισκευή τηλεφώνου Meizu την ίδια μέρα Οι πιο συχνές κλήσεις στο κέντρο επισκευής της Meizu" class="item__image" / loading=lazy loading=lazy> <div class="item__title">Επισκευή τηλεφώνου Meizu την ίδια μέρα Οι πιο συχνές κλήσεις στο κέντρο επισκευής της Meizu</div> </a> </div> <div class="item"> <a href="https://radiobud.ru/el/program/privet-napishi-mne-svoi-nomer-telefona-odnoklassniki-privet.html" class="item__link"> <img src="/uploads/723e3423def13e650b9d7a2870c034af.jpg" width="220" height="170" alt="Γεια, στείλτε μου τον αριθμό τηλεφώνου σας" class="item__image" / loading=lazy loading=lazy> <div class="item__title">Γεια, στείλτε μου τον αριθμό τηλεφώνου σας</div> </a> </div> <div class="item"> <a href="https://radiobud.ru/el/instructions/chto-takoe-blog-wordpress-i-zachem-on-nuzhen-preimushchestva-i-nedostatki.html" class="item__link"> <img src="/uploads/21fe0d9120d20ea38e3ddf991ecb0527.jpg" width="220" height="170" alt="Πλεονεκτήματα και μειονεκτήματα του WordPress Τι είναι το WordPress και πώς να το χρησιμοποιήσετε" class="item__image" / loading=lazy loading=lazy> <div class="item__title">Πλεονεκτήματα και μειονεκτήματα του WordPress Τι είναι το WordPress και πώς να το χρησιμοποιήσετε</div> </a> </div> </div> </div> </div> </main> <aside class="sidebar"> <div class="section"> <div class="section__headline">Δημοφιλέστερος</div> <div class="sidebar-items"> <a class="sidebar-item" href="https://radiobud.ru/el/iron/strukturirovannaya-kabelnaya-sistema-9395-strukturirovannaya-kabelnaya.html"> <img src="/uploads/5679ea6502f442f1d16b2ff786c23800.jpg" width="75" height="75" alt="Σύστημα δομημένης καλωδίωσης (SCS)" class="sidebar-item__image" / loading=lazy loading=lazy> <div class="sidebar-item__title">Σύστημα δομημένης καλωδίωσης (SCS)</div> </a> <a class="sidebar-item" href="https://radiobud.ru/el/ios/twitch-servis-dlya-video-translyacii-strimov-tvich-twitch-chto-eto-i-kak.html"> <img src="/uploads/1f958fdf321dbf166a6a3c7b86b18479.jpg" width="75" height="75" alt="Twitch: τι είναι και πώς λειτουργεί;" class="sidebar-item__image" / loading=lazy loading=lazy> <div class="sidebar-item__title">Twitch: τι είναι και πώς λειτουργεί;</div> </a> <a class="sidebar-item" href="https://radiobud.ru/el/reviews/kak-prazdnovat-letnee-solncestoyanie-kak-prazdnovat-letnee-solncestoyanie.html"> <img src="/uploads/18a97b1c3a444ef58070da59202dc921.jpg" width="75" height="75" alt="Πώς να γιορτάσετε το Θερινό Ηλιοστάσιο Emmanuelle Daguerre: The Healing Solstice" class="sidebar-item__image" / loading=lazy loading=lazy> <div class="sidebar-item__title">Πώς να γιορτάσετε το Θερινό Ηλιοστάσιο Emmanuelle Daguerre: The Healing Solstice</div> </a> <a class="sidebar-item" href="https://radiobud.ru/el/internet/programmirovanie-mikrokontrollerov-dlya-nachinayushchih-legko-i.html"> <img src="/uploads/ace204ea07f98eba1735a36a4ab8ecb6.jpg" width="75" height="75" alt="Προγραμματισμός μικροελεγκτών AVR για αρχάριους Προγραμματισμός ελεγκτών avr για αρχάριους" class="sidebar-item__image" / loading=lazy loading=lazy> <div class="sidebar-item__title">Προγραμματισμός μικροελεγκτών AVR για αρχάριους Προγραμματισμός ελεγκτών avr για αρχάριους</div> </a> <a class="sidebar-item" href="https://radiobud.ru/el/life-hacks-for-ios/pochemu-planshet-ne-vyklyuchaetsya-chto-delat-zavis-planshet---chto-delat-vozmozhnye.html"> <img src="/uploads/2df7bea5ce83ad887e3040165488a737.jpg" width="75" height="75" alt="Παγωμένο tablet - τι να κάνετε;" class="sidebar-item__image" / loading=lazy loading=lazy> <div class="sidebar-item__title">Παγωμένο tablet - τι να κάνετε;</div> </a> <a class="sidebar-item" href="https://radiobud.ru/el/program/videonablyudenie-cherez-usb-kameru-besprovodnaya-usb-kamera-kupit.html"> <img src="/uploads/c5ad1ebb2eec805aceb765a476962621.jpg" width="75" height="75" alt="Ασύρματη κάμερα USB αγοράστε μια ασύρματη μίνι κάμερα υπολογιστή Ψηφιακή φωτογραφική μηχανή με έξοδο USB" class="sidebar-item__image" / loading=lazy loading=lazy> <div class="sidebar-item__title">Ασύρματη κάμερα USB αγοράστε μια ασύρματη μίνι κάμερα υπολογιστή Ψηφιακή φωτογραφική μηχανή με έξοδο USB</div> </a> </div> </div> <script> // <![CDATA[ $(document).ready(function() { var floatsidebar = $("#float-sidebar"); var offset = floatsidebar.offset(); var left = offset.left; var top = offset.top; var width = $("#float-sidebar").width(); var height = $("#float-sidebar").height(); $(window).scroll(function() { var scrollTop = $(window).scrollTop(); if (scrollTop >= top) { $('#float-sidebar').css({ left: left + 'px', position: 'fixed', top: "50px", width: width + "px" }); } else { $('#float-sidebar').css({ position: 'static', }); } }); }); // ]]> </script> <div id="float-sidebar"> <div id="laqybe1" style="height:500px;width:270px;" align="center"></div> </div> </aside> </div> <footer class="footer"> <div class="footer-left"> <div class="footer__logo"> <div class="footer__logo-sitename">radiobud.ru</div> </div> <div class="footer__copyright"> <p>© 2024 - radiobud.ru <br /></p> <p>Κριτικές, life hacks, παιχνίδια, προγράμματα</p> </div> <nav class="footer__nav-1"> <ul> <li class="menu-item type-post_type object-page "><a href="https://radiobud.ru/el/sitemap.xml">Χάρτης τοποθεσίας</a></li> </ul> </nav> </div> <nav class="footer__nav-2"><ul> <li class="menu-item type-taxonomy object-category "><a href="https://radiobud.ru/el/feedback.html">Επαφές</a></li> <li class="menu-item type-taxonomy object-category "><a href="">Διαφήμιση</a></li> <li class="menu-item type-taxonomy object-category "><a href="">Σχετικά με τον ιστότοπο</a></li> </ul></nav> <div class="footer__counters"> </div> <div class="footer__note"></div> </footer> </div> </div> <script type='text/javascript' src='https://radiobud.ru/wp-content/themes/radiobud.ru/js/scripts.js'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=4.9.1'></script> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "smooth_scroll":"1","visibility_show":"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c","visibility_hide":"\u0421\u043a\u0440\u044b\u0442\u044c","width":"Auto"} ; /* ]]> */ </script> <script type='text/javascript' src='https://radiobud.ru/wp-content/plugins/table-of-contents-plus/front.min.js?ver=1509'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.9.1'></script> <script async="async" type='text/javascript' src='https://radiobud.ru/wp-content/plugins/akismet/_inc/form.js?ver=4.0.2'></script> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> </body> </html>