Ανάλυση εννοιών
Εφόσον κατανοήσατε τον διαχωρισμό μεταξύ valid και well formed xml παρακάτω παραθέτονται αναλυτικά ορισμένες έννοιες που χρησιμοποιήθηκαν προηγουμένως .
Μια αναλυμένη οντότητα περιέχει κείμενο, ως ακολουθία
χαρακτήρων, η οποία μπορεί να αντιπροσωπεύει
δεδομένα χαρακτήρων ή δεδομένα markup (markup or character data). Ο
χαρακτήρας είναι μια ατομική μονάδα κειμένου
όπως καθορίστηκε από το ISO/IEC 10646. Νόμιμοι
χαρακτήρες είναι το κενό(tab), ο χαρακτήρας
επιστροφής (carriage return), η γραμμή ανατροφοδότησης(line feed) καθώς και οι
νόμιμοι γραφικοί χαρακτήρες του UNICODE και του ISO/IEC 10646. Η
χρήση των συμβατών χαρακτήρων έχει αποτραπεί.
Ο μηχανισμός κωδικοποίησης χαρακτήρων σε bit πρότυπα ποικίλει από οντότητα σε οντότητα. Όλοι οι XML επεξεργαστές θα πρέπει να αποδεχτούν τις κωδικοποιήσεις UTF-8 και UTF-16 του 10646.
Παρακάτω παρατίθενται σύμβολα που χρησιμοποιούνται ευρύτατα στην γραμματική.
s (white space) περιέχει έναν ή περισσότερους κενούς(#x20) χαρακτήρες, τον χαρακτήρα επιστροφής, την γραμμή ανατροφοδότησης και τα tabs.
White
Space
[3] |
S |
::=
|
(#x20
| #x9 | #xD | #xA)+ |
Οι χαρακτήρες ταξινομούνται για περισσότερη εμπιστοσύνη ως γράμματα, ψηφία ή άλλοι χαρακτήρες. Τα γράμματα αποτελούνται από μια αλφαβητική ή συλλαβική βάση χαρακτήρων που πιθανόν ακολουθούνται από έναν ή περισσότερους συνδυασμούς χαρακτήρων ή από έναν ιδεογραφικό χαρακτήρα.
Το Name είναι μια ένδειξη που ξεκινάει με ένα γράμμα ή με έναν χαρακτήρα στίξης, και συνεχίζει με γράμματα, ψηφία, παύλες, υπογραμμίσεις, σύμβολα ή τελείες γνωστά ως χαρακτήρες ονόματος (name characters). Τα names που ξεκινούν με το string “xml” ή οποιοδήποτε string που να ταιριάζει ((‘X’! ‘x’) (‘M’!’m’) (‘L’!’l’)), είναι δεσμευμένα για τυποποίηση σε αυτήν την έκδοση ή σε μελλοντικές αυτής της προδιαγραφής.
ΣΗΜΕΙΩΣΗ: ο χαρακτήρας «σύμβολο»(colon character) στα names της XML είναι δεσμευμένο για πειραματισμούς με τα με name spaces. Η έννοια αυτή αναμένεται να τυποποιηθεί στο μέλλον σε σημείο που τα έγγραφα που χρησιμοποιούν το σύμβολο για πειραματικούς σκοπούς να πρέπει να εκσυγχρονιστούν. (Δεν υπάρχει καμία εγγύηση ότι οποιοσδήποτε μηχανισμός name space που υιοθετήθηκε για την XML θα χρησιμοποιεί στην πραγματικότητα το σύμβολο ως χαρακτήρα αρχής ή τέλους). Στην πράξη, αυτό σημαίνει ότι οι συγγραφείς δεν θα χρησιμοποιούν το colon στα names της XML παρά μόνον ως μέρος των πειραμάτων name space, αλλά αυτοί οι επεξεργαστές XML θα πρέπει να αποδεχτούν το colon ως name character.
Το Nmtoken (name token) αποτελεί μια μίξη των name character.
Names and Tokens
[4] |
NameChαr |
::= |
Letter
| Digit | '.' |
'-' | '_' | ':' | CombiningChar
| Extender |
[5] |
Name |
::= |
|
[6] |
Names |
::= |
|
[7] |
Nmtoken |
::= |
(NameChar)+ |
[8] |
Nmtokens |
::= |
Το literal data είναι οποιοδήποτε string ανάθεσης τιμής που δεν περιλαμβάνει τη χρήση των εισαγωγικών ως χαρακτήρα αρχής ή τέλους γι αυτό το string. Τα literals χρησιμοποιούνται για να καθορίσουν τις τιμές των εσωτερικών οντοτήτων/internal entities(EntityValue), τις τιμές των χαρακτηριστικών/value of attributes(AttValue) και τους εξωτερικούς αναγνωριστές/external identifiers (SystemLiteral). Προσέξτε ότι ένα SystemLiteral μπορεί να αναλυθεί χωρίς έλεγχο για markup.
Literals
[9] |
EntityValue |
::= |
'"' ([^%&"] | PEReference
| Reference)*
'"' |
|
|
|
| "'" ([^%&'] | PEReference
| Reference)*
"'" |
[10] |
AttValue |
::= |
'"' ([^<&"] | Reference)*
'"' |
|
|
|
| "'" ([^<&'] | Reference)*
"'" |
[11] |
SystemLiteral |
::= |
('"' [^"]* '"') |
("'" [^']* "'") |
[12] |
PubidLiteral |
::= |
|
[13] |
PubidChar |
::= |
#x20 | #xD | #xA | [a-zA-Z0-9] |
[-'()+,./:=?;!*#@$_%] |
Το κείμενο(text) αποτελείται από ένα συνδυασμό character data & markup. To markup παίρνει τη μορφή των χαρακτήρων αρχής(start tags), τέλους(end tags), του
κενού(empty element tags), των οντοτήτων(entity references), των
χαρακτήρων(character references), των σχολίων(comments),των
χαρακτήρων αρχής ή τέλους σε ένα CDATA section(CDATA section delimiters), των
δηλώσεων του κειμένου(document type declarations) και
των οδηγιών επεξεργασίας(processing instructions).
Το κείμενο που δεν είναι markup αποτελεί τον character data του εγγράφου.
Οι χαρακτήρες &,< μπορούν να εμφανιστούν στην αληθινή τους μορφή μόνον όταν χρησιμοποιούνται σαν χαρακτήρες markup αρχής ή τέλους, ή μέσα σε σχόλιο, σε οδηγίες επεξεργασίας, ή σε CDATA section. Για να εμφανισθούν αλλού πρέπει να χρησιμοποιηθούν είτε σε αναφορές αριθμητικών χαρακτήρων ή αντιστοίχως σε string “&” και “<”. Το σύμβολο > μπορεί να αναπαρασταθεί χρησιμοποιώντας το string “>”.
Στα περιεχόμενα των στοιχείων, τα δεδομένα χαρακτήρων είναι οποιοδήποτε string στοιχείων που δεν περιλαμβάνουν τον χαρακτήρα αρχής από οποιοδήποτε markup. Σε ένα CDATA section τα δεδομένα χαρακτήρων είναι οποιοδήποτε string χαρακτήρων που δεν περιλαμβάνουν χαρακτήρα κλεισίματος αρχής ή τέλους της CDATA section, “]]>”.
Για να επιτραπεί στις τιμές των χαρακτηριστικών να περιέχουν και μονά και διπλά εισαγωγικά, η απόστροφος ή μονά εισαγωγικά (‘) μπορούν να αναπαρασταθούν ως “'” ενώ τα διπλά εισαγωγικά (“) ως “"”.
Character Data
[14] |
CharData |
::= |
[^<&]* - ([^<&]* ']]>'
[^<&]*) |
Τα σχόλια μπορούν να εμφανιστούν οπουδήποτε στο κείμενο έξω από το markup; επιπροσθέτως, μπορεί να εμφανιστούν στην περιοχή δηλώσεων του εγγράφου όπου επιτρέπεται από την γραμματική. Δεν είναι μέρος των χαρακτήρων δεδομένων; ένας XML επεξεργαστής δίνει τη δυνατότητα σε μια εφαρμογή να ανακτήσει το κείμενο των σχολίων. Για συμβατότητα, ο χαρακτήρας “- -”(διπλή παύλα) δεν θα πρέπει να υπάρχει μεταξύ των σχολίων.
Ένα παράδειγμα σχολίου είναι το εξής:
<!-- declarations for <head> & <body> --> |
Οι οδηγίες επεξεργασίας (PI) επιτρέπουν στα έγγραφα να περιέχουν οδηγίες για τις διάφορες εφαρμογές
Processing
Instructions
[16] |
PI |
::= |
|
[17] |
PITarget |
::= |
Name - (('X'
| 'x') ('M' | 'm') ('L' | 'l')) |
Οι οδηγίες επεξεργασίας δεν είναι μέρος των character data των εγγράφων, αλλά πρέπει να διέρχονται μέσα από τις εφαρμογές. Ξεκινούν με έναν στόχο –target (PITarget) που χρησιμοποιείται να προσδιορίσει την εφαρμογή στην οποία απευθύνεται η οδηγία. Τα target names “XML”, “xml” είναι δεσμευμένα για τυποποίηση σε αυτήν ή σε μελλοντικές εκδόσεις αυτής της προδιαγραφής. Ο XML μηχανισμός σχολίων μπορεί να χρησιμοποιείται στις τυπικές δηλώσεις των PI targets
Τα CDATA Sections μπορούν να λάβουν χώρα οπουδήποτε υπάρχουν character data. Χρησιμοποιούνται να αποφεύγουν κείμενο το οποίο περιέχει χαρακτήρες οι οποίοι αναγνωρίζονται ως markup. Τα CDATA Sections ξεκινούν με τον συμβολισμό “<![CDATA[“ και τελειώνουν με τον εξής “]]>”.
CDATA Sections
[18] |
CDSect |
::= |
|
[19] |
CDStart |
::= |
'<![CDATA[' |
[20] |
CData |
::= |
|
[21] |
CDEnd |
::= |
']]>' |
Σε ένα CDATA Section, μόνον το string CDEND αναγνωρίζεται ως markup, έτσι ώστε τα αριστερά άγκιστρα και το σύμβολο & να υπάρχουν στην πραγματική τους μορφή’ δεν μπορούν να αποφευχθούν χρησιμοποιώντας “<” και “&”. Τα CDATA Sections δεν μπορούν να φωλιαστούν.
Ένα παράδειγμα από CDATA Section στο οποίο τα
“<greeting>” και “/greeting>” αναγνωρίζονται ως character data και όχι
ως markup:
<![CDATA[<greeting>Hello, world!</greeting>]]> |
Τα XML έγγραφα
ξεκινούν με μια XML δήλωση η
οποία καθορίζει την έκδοση της XML που
χρησιμοποιείται. Για παράδειγμα το παρακάτω
είναι ένα XML έγγραφο καλά αναπτυγμένο αλλά όχι
έγκυρο:
<?xml version="1.0"?> |
Όπως και
αυτό:
<greeting>Hello, world!</greeting> |
Η έκδοση νούμερο “1.0” πρέπει να χρησιμοποιείται για να υποδηλώσει συμμόρφωση στην έκδοση αυτής της προδιαγραφής ; είναι λάθος για ένα έγγραφο να χρησιμοποιεί την έκδοση 1 εάν δεν συμβαδίζει με την έκδοση αυτής της προδιαγραφής. Ήταν στόχος της ομάδας εργασίας της XML να δώσει σε επόμενες εκδόσεις αυτής της προδιαγραφής αριθμούς διαφορετικούς της μονάδος, αλλά αυτή η πρόθεση δεν υποδηλώνει υπόσχεση να παραχθούν νέες μελλοντικές εκδόσεις της XML, ούτε ότι αν παραχθούν να χρησιμοποιηθεί συγκεκριμένος τρόπος αρίθμησης. Εφόσον δεν αποκλείονται μελλοντικές εκδόσεις, αυτό το σχέδιο παρέχεται ως μέσο για να εμφανιστεί η πιθανότητα της αυτόματης αναγνώρισης έκδοσης, εάν αυτό κριθεί απαραίτητο. Οι επεξεργαστές μπορεί να εμφανίσουν μήνυμα λάθους εάν λαμβάνουν έγγραφα άλλης έκδοσης την οποία δεν υποστηρίζουν.
Η λειτουργία του markup σε ένα XML έγγραφο είναι να περιγράφει την αποθηκευμένη μνήμη και τη λογική δομή και να συνδέει ζεύγη απόδοσης τιμής με τις λογικές δομές του. Η XML παρέχει έναν μηχανισμό, τη δήλωση εγγράφου (document type declaration) για να καθορίζει τους περιορισμούς σε μια λογική δομή και να υποστηρίξει τη χρήση των προκαθορισμένων μονάδων αποθήκευσης. Ένα έγγραφο XML είναι έγκυρο(valid) εάν έχει μια συνδεδεμένη δήλωση εγγράφου και αν το έγγραφο συμφωνεί με τους περιορισμούς που εκφράζονται σε αυτό.
Το document type declaration πρέπει να εμφανίζεται πριν από το πρώτο στοιχείο του εγγράφου.
Prolog
[22] |
prolog |
::= |
XMLDecl? Misc*
(doctypedecl
Misc*)? |
[23] |
XMLDecl |
::= |
'<?xml' VersionInfo
EncodingDecl?
SDDecl? S?
'?>' |
[24] |
VersionInfo |
::= |
S 'version' Eq (' VersionNum
' | " VersionNum
") |
[25] |
Eq |
::= |
|
[26] |
VersionNum |
::= |
([a-zA-Z0-9_.:] | '-')+ |
[27] |
Misc |
::= |
Το XML document type declaration περιέχει δηλώσεις markup που παρέχουν γραμματική για μια κατηγορία εγγράφων. Αυτή η γραμματική είναι γνωστή ως document type definition, ή DTD. Η δήλωση εγγράφων δίνει έμφαση σε ένα εξωτερικό υποσύνολο (μια ειδική κατηγορία εξωτερικής οντότητας) περιέχοντας δηλώσεις markup, ή μπορεί να περιέχει δηλώσεις markup απ’ ευθείας σε ένα εσωτερικό υποσύνολο, ή και τα δυο. Το DTD για ένα έγγραφο αποτελείται και από τα δυο υποσύνολα μαζί.
Μια δήλωση markup είναι δήλωση τύπου στοιχείου (element type declaration), δήλωση λίστας χαρακτηριστικών (attribute-list declaration), δήλωση οντότητας (entity declaration) ή δήλωση σχολίων (notation declaration). Αυτές οι δηλώσεις μπορεί να περιέχονται ως σύνολο ή ως μέρος μέσα στις οντότητες παραμέτρων (parameter entities), όπως περιγράφονται παρακάτω.
Document Type Definition
[28] |
DocTypedecl |
::= |
'<!DOCTYPE' S Name (S
ExternalID)?
S?
('[' (markupdecl
| PEReference |
S)* ']' S?)?
'>' |
[ |
VC: Root Element Type
] |
[29] |
Markupdecl |
::= |
elementdecl
| AttlistDecl |
EntityDecl
| NotationDecl
| PI | Comment
|
[ |
|
|
|
|
|
[ |
WFC: PEs in Internal
Subset ] |
Περιορισμός Valid: Μοντέλο Τύπου Βάσης
Το Name στη δήλωση τύπου εγγράφου πρέπει να ταιριάζει με τον τύπο στοιχείου του στοιχείου βάσης.
Περιορισμός Valid: Ιδανική Δήλωση / PE Φώλιασμα
Οι παράμετροι οντότητας του κειμένου αντικατάστασης πρέπει να είναι κατάλληλα φωλιασμένες με δηλώσεις markup. Με άλλα λόγια, εάν είτε ο πρώτος χαρακτήρας είτε ο τελευταίος χαρακτήρας μιας δήλωσης markup (markupdecl παραπάνω) περιέχεται σε ένα κείμενο αντικατάστασης για μια αναφορά παραμέτρων οντοτήτων (parameter entity reference), και οι δυο θα πρέπει να περιέχονται στο ίδιο κείμενο αντικατάστασης.
Περιορισμός Well-formed: PE σε
εσωτερικά υποσύνολα
Στο εσωτερικό DTD υποσύνολο, οι αναφορές παραμέτρων οντοτήτων μπορούν να πραγματοποιηθούν μόνον όπου υπάρχουν δηλώσεις markup και όχι μέσα σε αυτές. (Αυτό δεν εφαρμόζεται σε αναφορές που πραγματοποιούνται σε εξωτερικές παραμέτρους οντοτήτων ή σε εξωτερικά υποσύνολα).
Όπως και στα εσωτερικά υποσύνολα, τα εξωτερικά υποσύνολα και οποιαδήποτε εξωτερική παράμετρος οντοτήτων που αναφέρονται στο DTD πρέπει να περιλαμβάνει ένα σύνολο ολοκληρωμένων δηλώσεων markup των τύπων που επιτρέπονται από τον συμβολισμό markupdecl , και να διασπείρονται με το κενό ή τις αναφορές παραμέτρων οντοτήτων. Παρ’ όλα αυτά τμήματα των περιεχομένων των εξωτερικών παραμέτρων οντοτήτων ή των εξωτερικών υποσυνόλων μπορούν να αγνοηθούν χρησιμοποιώντας την υποθετική κατασκευή τμήματος; αυτό δεν επιτρέπεται στα εσωτερικά υποσύνολα..
External Subset
[30] |
extSubset |
::= |
|
[31] |
extSubsetDecl |
::= |
( markupdecl
| conditionalSect
| PEReference
| S
)* |
Τα εξωτερικά υποσύνολα και οι εξωτερικές παράμετροι οντοτήτων διαφέρουν επίσης από τα εσωτερικά υποσύνολα στο γεγονός ότι σε αυτά οι αναφορές παραμέτρων οντοτήτων επιτρέπονται εντός των δηλώσεων markup και όχι μόνον ανάμεσά τους.
Ένα παράδειγμα ενός XML εγγράφου με ένα document type declaration:
<?xml version="1.0"?> |
Ο αναγνωριστής του συστήματος “hello.dtd” δίνει το URI του εγγράφου DTD.
Οι δηλώσεις μπορούν επίσης να δίνονται
τοπικά όπως στο παράδειγμα:
<?xml version="1.0" encoding="UTF-8" ?> |
Εάν χρησιμοποιούνται και εξωτερικά και εσωτερικά υποσύνολα, το εσωτερικό υποσύνολο πραγματοποιείται πριν το εξωτερικό υποσύνολο. Αυτό έχει ως αποτέλεσμα ότι οι οντότητες και οι δηλώσεις λίστας χαρακτηριστικών στο εσωτερικό υποσύνολο προηγούνται αυτών στο εξωτερικό υποσύνολο.
Οι δηλώσεις markup μπορούν να επηρεάσουν το περιεχόμενο του εγγράφου, καθώς αυτό περνά από έναν XML επεξεργαστή σε μια εφαρμογή; τέτοια παραδείγματα είναι η απουσία χαρακτηριστικών και οι δηλώσεις οντοτήτων. Αυτού του είδους η δήλωση, που μπορεί να εμφανιστεί ως χαρακτηριστικό των XML δηλώσεων , επισημαίνει ή όχι την ύπαρξη δηλώσεων που εμφανίζονται εξωτερικά της οντότητας του εγγράφου.
Standalone Document Declaration
[32] |
SDDecl |
::= |
S 'standalone' Eq
(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) |
[ |
Η τιμή “yes” σε αυτές τις δηλώσεις δείχνει ότι δεν υπάρχουν δηλώσεις markup εξωτερικά της οντότητας του εγγράφου που να επηρεάζουν τις πληροφορίες που διέρχονται από τον XML επεξεργαστή στην εφαρμογή. Η τιμή “no” δείχνει ότι μπορεί να υπάρχουν τέτοιες εξωτερικές δηλώσεις markup. Αυτού του είδους η δήλωση εξασφαλίζει την παρουσία των εξωτερικών δηλώσεων; η παρουσία, σε ένα έγγραφο, αναφορών σε εξωτερικές οντότητες, όταν αυτές οι οντότητες δηλώνονται στο εσωτερικό, δεν αλλάζουν αυτήν την standalone ιδιότητα..
Εάν δεν υπάρχουν εξωτερικές δηλώσεις markup, η μορφή δηλώσεων standalone δεν έχει καμία σημασία. Εάν υπάρχουν εξωτερικές δηλώσεις markup, αλλά δεν υπάρχει η μορφή δηλώσεων standalone, υποθέτουμε ότι έχουμε την τιμή “no”.
Οποιοδήποτε XML έγγραφο για το οποίο ισχύει standalone = “no” μπορεί να μετατραπεί αλγοριθμικά σε ένα standalone έγγραφο το οποίο μπορεί να είναι επιθυμητό σε κάποιες δικτυακές εφαρμογές.
Περιορισμός Valid:
Δήλωση Εγγράφων Standalone
Αυτού του είδους η δήλωση εγγράφων πρέπει να παίρνει την τιμή “no” εάν οποιαδήποτε εξωτερική δήλωση markup περιέχει τις εξής δηλώσεις:
· Χαρακτηριστικά με default τιμές, εάν τα στοιχεία στα οποία αποδίδονται αυτά τα χαρακτηριστικά εμφανίζονται στο έγγραφο χωρίς λεπτομερή παρουσίαση των τιμών για αυτά τα χαρακτηριστικά, ή
· Οντότητες (εκτός των amp, lt, gt, apos, quot), εάν εμφανίζονται στο έγγραφο αναφορές για αυτές τις οντότητες, ή
· Χαρακτηριστικά με τιμές που υποβάλλονται σε κανονικοποίηση, όπου το χαρακτηριστικό εμφανίζεται στο έγγραφο με τιμή η οποία αλλάζει ως αποτέλεσμα της κανονικοποίησης, ή
· Στοιχειώδης τύπους με στοιχειώδη περιεχόμενα, εάν το κενό (white space) υπάρχει ανάμεσα σε οποιαδήποτε ύπαρξη αυτών των τύπων.
Ένα παράδειγμα είναι το εξής:
<?xml version="1.0" standalone='yes'?> |
Συντάσσοντας XML έγγραφα είναι συχνά αξιόπιστο να χρησιμοποιούνται «λευκά κενά»(“white space”) (όπως κενά, tabs, λευκές γραμμές) για να υπερέχει το markup έχοντας περισσότερη αναγνωσιμότητα.. Αυτά τα λευκά κενά δεν προτείνονται για συνυπολογισμό της ελεύθερης έκδοσης του εγγράφου. Από την άλλη μεριά, τα «σημαντικά» λευκά κενά που πρέπει να εμφανίζονται στην ελεύθερη έκδοση είναι κοινά, για παράδειγμα στην ποίηση και στον πηγαίο κώδικα.
Ένας XML επεξεργαστής πρέπει να περάσει όλους τους χαρακτήρες του εγγράφου που δεν είναι markup στην εφαρμογή. Μάλιστα ένας νόμιμος XML επεξεργαστής πρέπει να ενημερώσει την εφαρμογή για το ποιοι από αυτούς τους χαρακτήρες αποτελούνται από λευκά κενά τα οποία εμφανίζονται στα στοιχειώδη περιεχόμενα.
Ένα ειδικό χαρακτηριστικό που
ονομάζεται xml: space μπορεί να επισυναφθεί σε ένα στοιχείο για
να επισημάνει ότι σε αυτό το στοιχείο το λευκό
κενό θα διατηρείται από τις εφαρμογές. Σε valid
έγγραφα, αυτό το χαρακτηριστικό όπως και
οποιοδήποτε άλλο θα πρέπει να δηλώνεται πριν
χρησιμοποιηθεί. Όταν δηλώνεται θα πρέπει να
δίνεται ως ένας απαριθμητός τύπος του οποίου οι
πιθανές τιμές είναι οι “default” και “preserve”. Για παράδειγμα:
<!ATTLIST poem xml:space (default|preserve) 'preserve'> |
Η τιμή “default” δηλώνει ότι η μέθοδος επεξεργασίας του λευκού κενού της εφαρμογής είναι αποδεκτή από αυτό το στοιχείο; η τιμή “preserve” δείχνει ότι οι εφαρμογές διατηρούν όλο το λευκό κενό. Αυτή η δηλωμένη πρόθεση πρέπει να εφαρμόζεται σε όλα τα στοιχεία μέσα στο περιεχόμενο του στοιχείου στο οποίο υπάρχει, εκτός αν υπερέχει με ένα άλλο παράδειγμα του XML χαρακτηριστικού.
Το στοιχείο της κορυφής οποιουδήποτε εγγράφου δεν έχει κανέναν σκοπό εκτός εάν παρέχει τιμή σε αυτό το χαρακτηριστικό ή εάν το χαρακτηριστικό είναι δηλωμένο με τιμή default.
Οι αναλυμένες XML οντότητες αποθηκεύονται συχνά σε αρχεία υπολογιστών και για περισσότερη αξιοπιστία στην σύνταξη, οργανώνονται σε γραμμές. Αυτές οι γραμμές χωρίζονται τυπικά από συνδυασμούς των χαρακτήρων carriage return(#xD) και line-feed(#xA).
Για να απλοποιηθεί η αποστολή των εφαρμογών, σε μια εξωτερικά αναλυμένη οντότητα ή στην αληθινή αξία μιας εσωτερικά αναλυμένης οντότητας ή στην αληθινή αλληλουχία δυο χαρακτήρων “#xD#xA” ή σε ένα αληθινό standalone “#xD”, ο XML επεξεργαστής θα πρέπει να περάσει στην εφαρμογή τον μονό χαρακτήρα #xA.(αυτή η συμπεριφορά μπορεί αξιόπιστα να παραχθεί κανονικοποιώντας όλα τα line breaks σε #xA κατά την εισαγωγή πριν την ανάλυση.
Στην επεξεργασία του εγγράφου, είναι συχνά χρήσιμο να προσδιορίζεται η φυσική ή τυπική γλώσσα στην οποία είναι γραμμένο το περιεχόμενο. Ένα ειδικό χαρακτηριστικό που ονομάζεται xml : lang μπορεί να εισαχθεί στα έγγραφα για να καθορίσει τη γλώσσα που χρησιμοποιείται στα περιεχόμενα και στις αξίες των χαρακτηριστικών οποιουδήποτε στοιχείου σε ένα XML έγγραφο. Στα valid έγγραφα αυτό το χαρακτηριστικό θα πρέπει να δηλώνεται πριν χρησιμοποιηθεί. Οι τιμές του χαρακτηριστικού είναι οι αναγνωριστές γλώσσας όπως καθορίζονται από το [IETF RFC 1766], “Tags For The Identification Of Languages”.
Language
Identification
[33] |
LanguageID |
::= |
|
[34] |
Langcode |
::= |
|
[35] |
ISO639Code |
::= |
([a-z] | [A-Z]) ([a-z] | [A-Z]) |
[36] |
IanaCode |
::= |
('i' | 'I') '-' ([a-z] | [A-Z])+ |
[37] |
UserCode |
::= |
('x' | 'X') '-' ([a-z] | [A-Z])+ |
[38] |
Subcode |
::= |
([a-z] | [A-Z])+ |
· Ένας κώδικας γλώσσας δυο γραμμάτων όπως καθορίζεται από το [ISO 639],”
Codes For The Representation Of Names Of Languages”
· Έναν αναγνωριστή γλώσσας όπως καταγράφηκε από το Internet Assigned Numbers Authority [IANA]; αυτό ξεκινάει με το πρόθεμα “–i”(ή “-I”).
· Έναν αναγνωριστή γλώσσας που καθορίζεται από τον χρήστη ή είναι σύμφωνος κάποιων συμμετοχών για ιδιωτική χρήση; αυτά ξεκινούν με το πρόθεμα “-x” ή “-X” με την πρόθεση ότι δεν συγκρούονται με τυποποιημένα ή δεσμευμένα names από τον IANA.
Μπορεί να υπάρχει οποιοσδήποτε αριθμός τμημάτων subcode; αν υπάρχει το πρώτο τμήμα υποκώδικα και ο υποκώδικας αποτελείται από δυο γράμματα, τότε πρέπει να υπάρχει ένας κώδικας από τον [ISO 3166], “Codes For The Representation Of Names Of Countries”. Αν ο πρώτος υποκώδικας αποτελείται από περισσότερα από ένα γράμματα, πρέπει να υπάρχει ένας υποκώδικας για τη γλώσσα σε μορφή ερώτησης όπως καθορίζεται από τον ΙΑΝΑ, εκτός εάν το langcode ξεκινάει με το πρόθεμα πρόθεμα “-x” ή “-X”.
Είναι σύνηθες να δίνουν στον κώδικα γλώσσας χαμηλότερη συνθήκη και στον κώδικα country (εάν υπάρχει) υψηλότερη. Πρόσεξε ότι αυτές οι τιμές σε αντίθεση με άλλα names είναι case insensitive.
Για παράδειγμα:
<p xml:lang="en">The quick brown fox jumps over the lazy
dog.</p> |
Ο σκοπός που δηλώνεται ως xml:lang εφαρμόζεται σε όλα τα χαρακτηριστικά και στο περιεχόμενο των στοιχείων όπου έχει καθοριστεί, εκτός αν υπερισχύσει ένα άλλο στοιχείο μέσα στο περιεχόμενο.
Μια απλή δήλωση για xml:lang μπορεί να πάρει
τη μορφή:
Xml:lang NMTOKEN #IMPLIED |
Αλλά αν αρμόζει μπορούν να δίδονται και
συγκεκριμένες default τιμές. Για μια συλλογή γαλλικών ποιημάτων
για Άγγλους μαθητές, με σχόλια και σημειώσεις στα
αγγλικά, το χαρακτηριστικό
xml:lang μπορεί να δηλωθεί ως εξής:
<!ATTLIST poem xml:lang NMTOKEN 'fr'>
|