Ανάλυση εννοιών

Εφόσον κατανοήσατε τον διαχωρισμό μεταξύ valid και well formed xml παρακάτω παραθέτονται αναλυτικά ορισμένες έννοιες που χρησιμοποιήθηκαν προηγουμένως .

 

2.2 Χαρακτήρες κειμένου (Characters)

Μια αναλυμένη οντότητα περιέχει κείμενο, ως ακολουθία χαρακτήρων, η οποία μπορεί να αντιπροσωπεύει δεδομένα χαρακτήρων ή δεδομένα markup (markup or character data). Ο χαρακτήρας είναι μια ατομική μονάδα κειμένου όπως καθορίστηκε από το ISO/IEC 10646. Νόμιμοι χαρακτήρες είναι το κενό(tab), ο χαρακτήρας επιστροφής (carriage return), η γραμμή ανατροφοδότησης(line feed) καθώς και οι νόμιμοι γραφικοί χαρακτήρες του UNICODE και του ISO/IEC 10646. Η χρήση των συμβατών χαρακτήρων έχει αποτραπεί. 

Ο μηχανισμός κωδικοποίησης χαρακτήρων σε bit πρότυπα ποικίλει από οντότητα σε οντότητα. Όλοι οι XML επεξεργαστές θα πρέπει να αποδεχτούν τις κωδικοποιήσεις UTF-8 και UTF-16  του 10646.

  

2.3 Kοινά Συντακτικά Εργαλεία (Common Syntactic Constructs)

 Παρακάτω παρατίθενται σύμβολα που χρησιμοποιούνται ευρύτατα στην γραμματική.

 s  (white space) περιέχει έναν ή περισσότερους κενούς(#x20) χαρακτήρες, τον χαρακτήρα επιστροφής, την γραμμή ανατροφοδότησης και τα tabs.

 White Space

[3]

S

::=

(#x20 | #x9 | #xD | #xA)+

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

 Το Name είναι μια ένδειξη που ξεκινάει με ένα γράμμα ή με έναν χαρακτήρα στίξης, και συνεχίζει με γράμματα, ψηφία, παύλες, υπογραμμίσεις, σύμβολα ή τελείες γνωστά ως χαρακτήρες ονόματος (name characters). Τα names που ξεκινούν με το stringxml” ή οποιοδήποτε 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

::=

(Letter | '_' | ':') (NameChar)*

[6]

Names

::=

Name (S Name)*

[7]

Nmtoken

::=

(NameChar)+

[8]

Nmtokens

::=

Nmtoken (S Nmtoken)*

 

Το 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

::=

'"' PubidChar* '"' | "'" (PubidChar - "'")* "'"

[13]

PubidChar

::=

#x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]

 

2.4 Χαρακτήρες Δεδομένων & Markup (Character Data and Markup)

Το κείμενο(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 “&amp;” και “&lt;”. Το σύμβολο  > μπορεί να αναπαρασταθεί χρησιμοποιώντας το string “&gt;”.

Στα περιεχόμενα των στοιχείων, τα δεδομένα χαρακτήρων είναι οποιοδήποτε string στοιχείων που δεν περιλαμβάνουν τον χαρακτήρα αρχής από οποιοδήποτε markup. Σε ένα CDATA section  τα δεδομένα χαρακτήρων είναι οποιοδήποτε string χαρακτήρων που δεν περιλαμβάνουν χαρακτήρα κλεισίματος αρχής ή τέλους της CDATA section, “]]>”.

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

Character Data

[14]

CharData

::=

[^<&]* - ([^<&]* ']]>' [^<&]*)

 

2.5 Σχόλια (Comments)

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

Ένα παράδειγμα σχολίου είναι το εξής:

<!-- declarations for <head> & <body> -->

  

2.6 Oδηγίες Επεξεργασίας (Processing Instructions)

 Οι οδηγίες επεξεργασίας (PI) επιτρέπουν στα έγγραφα να περιέχουν οδηγίες για τις διάφορες εφαρμογές

 Processing Instructions

[16]

PI

::=

'<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'

[17]

PITarget

::=

Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

  

Οι οδηγίες επεξεργασίας δεν είναι μέρος των character data των εγγράφων, αλλά πρέπει να διέρχονται μέσα από τις εφαρμογές. Ξεκινούν με έναν στόχο –target (PITarget) που χρησιμοποιείται να προσδιορίσει την εφαρμογή στην οποία απευθύνεται η οδηγία. Τα target namesXML”, “xml” είναι δεσμευμένα για τυποποίηση σε αυτήν ή σε μελλοντικές εκδόσεις αυτής της προδιαγραφής. Ο XML μηχανισμός σχολίων μπορεί να χρησιμοποιείται στις τυπικές δηλώσεις των PI targets

  

2.7 Τμήματα CDATA (CDATA Sections)

 Τα CDATA Sections μπορούν να λάβουν χώρα οπουδήποτε υπάρχουν character data. Χρησιμοποιούνται να αποφεύγουν κείμενο το οποίο περιέχει χαρακτήρες οι οποίοι αναγνωρίζονται ως markup. Τα CDATA Sections ξεκινούν με τον συμβολισμό “<![CDATA[“ και τελειώνουν με τον εξής “]]>”.

 

CDATA Sections

[18]

CDSect

::=

CDStart CData CDEnd

[19]

CDStart

::=

'<![CDATA['

[20]

CData

::=

(Char* - (Char* ']]>' Char*))

[21]

CDEnd

::=

']]>'

  

Σε ένα CDATA Section, μόνον το string CDEND αναγνωρίζεται ως markup, έτσι ώστε τα αριστερά άγκιστρα και το σύμβολο & να υπάρχουν στην πραγματική τους μορφή’ δεν μπορούν να αποφευχθούν χρησιμοποιώντας  “&lt;” και  “&amp;”. Τα CDATA Sections δεν μπορούν να φωλιαστούν.

 Ένα παράδειγμα από CDATA Section στο οποίο τα “<greeting>” και “/greeting>” αναγνωρίζονται ως character data και όχι ως markup

<![CDATA[<greeting>Hello, world!</greeting>]]>

  

2.8 Δήλωση Εγγράφων (Prolog and Document Type Declaration)

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

<?xml version="1.0"?>
<greeting>Hello, world!</greeting>

 Όπως και αυτό: 

<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

::=

S? '=' S?

[26]

VersionNum

::=

([a-zA-Z0-9_.:] | '-')+

[27]

Misc

::=

Comment | PI | S

    

Το 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

[

VC: Proper Declaration/PE Nesting ]

 

 

 

 

[

WFC: PEs in Internal Subset ]

 

  Οι δηλώσεις markup μπορεί να επινοούνται ως σύνολο ή ως μέρος του κειμένου αντικατάστασης (replacement text) ή των οντοτήτων παραμέτρων (parameter entities).

 

Περιορισμός Valid: Μοντέλο Τύπου Βάσης

Το Name στη δήλωση τύπου εγγράφου πρέπει να  ταιριάζει με τον τύπο στοιχείου του στοιχείου βάσης.

 

Περιορισμός Valid: Ιδανική Δήλωση / PE Φώλιασμα

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

 

Περιορισμός Well-formed: PE σε εσωτερικά υποσύνολα

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

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

External Subset

[30]

extSubset

::=

TextDecl? extSubsetDecl

[31]

extSubsetDecl

::=

( markupdecl | conditionalSect | PEReference | S )*

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

Ένα παράδειγμα ενός XML εγγράφου με ένα document type declaration:

<?xml version="1.0"?>
<!DOCTYPE greeting SYSTEM "hello.dtd">
<greeting>Hello, world!</greeting>

 Ο αναγνωριστής του συστήματος “hello.dtd” δίνει το URI του εγγράφου DTD.

 Οι δηλώσεις μπορούν επίσης να δίνονται τοπικά όπως στο παράδειγμα: 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE greeting [
<!ELEMENT greeting (#PCDATA)>
]>
<greeting>Hello, world!</greeting>

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

 

2.9 Δήλωση Εγγράφων (Standalone Document Declaration)

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

Standalone Document Declaration

[32]

SDDecl

::=

S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"'))

[

VC: Standalone Document Declaration ]

 

Η τιμή “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'?>

  

2.10 Χειρισμός White Space (Handling White Space)

 Συντάσσοντας XML έγγραφα είναι συχνά αξιόπιστο να χρησιμοποιούνται «λευκά κενά»(“white space”) (όπως κενά, tabs, λευκές γραμμές) για να υπερέχει το markup έχοντας περισσότερη αναγνωσιμότητα.. Αυτά τα λευκά κενά δεν προτείνονται για συνυπολογισμό της ελεύθερης έκδοσης του εγγράφου. Από την άλλη μεριά, τα «σημαντικά» λευκά κενά που πρέπει να εμφανίζονται στην ελεύθερη έκδοση είναι κοινά, για παράδειγμα στην ποίηση και στον πηγαίο κώδικα.

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

 Ένα ειδικό χαρακτηριστικό που ονομάζεται xml: space μπορεί να επισυναφθεί σε ένα στοιχείο για να επισημάνει ότι σε αυτό το στοιχείο το λευκό κενό θα διατηρείται από τις εφαρμογές. Σε valid έγγραφα, αυτό το χαρακτηριστικό όπως και οποιοδήποτε άλλο θα πρέπει να δηλώνεται πριν χρησιμοποιηθεί. Όταν δηλώνεται θα πρέπει να δίνεται ως ένας απαριθμητός τύπος του οποίου οι πιθανές τιμές είναι οι “default” και “preserve”. Για παράδειγμα

<!ATTLIST poem xml:space (default|preserve) 'preserve'>

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

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

  

2.11 Χειρισμός End-Of-Line (End Of Line Handling)

 Οι αναλυμένες XML οντότητες αποθηκεύονται συχνά σε αρχεία υπολογιστών και για περισσότερη αξιοπιστία στην σύνταξη, οργανώνονται σε γραμμές. Αυτές οι γραμμές χωρίζονται τυπικά από συνδυασμούς των χαρακτήρων carriage return(#xD) και line-feed(#xA).

 Για να απλοποιηθεί η αποστολή των εφαρμογών, σε μια εξωτερικά αναλυμένη οντότητα ή στην αληθινή αξία μιας εσωτερικά αναλυμένης οντότητας ή στην αληθινή αλληλουχία δυο χαρακτήρων “#xD#xA” ή σε ένα αληθινό standalone “#xD”, ο XML επεξεργαστής θα πρέπει να περάσει στην εφαρμογή τον μονό χαρακτήρα #xA.(αυτή η συμπεριφορά μπορεί αξιόπιστα να παραχθεί κανονικοποιώντας όλα τα line breaks σε #xA κατά την εισαγωγή πριν την ανάλυση.

  

2.12 Αναγνώριση της Γλώσσας (Language Identification)

 Στην επεξεργασία του εγγράφου, είναι συχνά χρήσιμο να προσδιορίζεται η φυσική ή τυπική γλώσσα στην οποία είναι γραμμένο το περιεχόμενο. Ένα ειδικό χαρακτηριστικό που ονομάζεται xml : lang μπορεί να εισαχθεί στα έγγραφα για να καθορίσει τη γλώσσα που χρησιμοποιείται στα περιεχόμενα και στις αξίες των χαρακτηριστικών οποιουδήποτε στοιχείου σε ένα XML έγγραφο. Στα valid έγγραφα αυτό το χαρακτηριστικό θα πρέπει να δηλώνεται πριν χρησιμοποιηθεί. Οι τιμές του χαρακτηριστικού είναι οι αναγνωριστές γλώσσας όπως καθορίζονται από το [IETF RFC 1766], “Tags For The Identification Of Languages”.

 Language Identification

[33]

LanguageID

::=

Langcode ('-' Subcode)*

[34]

Langcode

::=

ISO639Code | IanaCode | UserCode

[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])+

   Το langcode μπορεί να είναι οποιοδήποτε από τα επόμενα:

·        Ένας κώδικας γλώσσας δυο γραμμάτων όπως καθορίζεται από το [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>
<p xml:lang="en-GB">What colour is it?</p>
<p xml:lang="en-US">What color is it?</p>
<sp who="Faust" desc='leise' xml:lang="de">
<l>Habe nun, ach! Philosophie,</l>
<l>Juristerei, und Medizin</l>
<l>und leider auch Theologie</l>
<l>durchaus studiert mit hei?em Bemuh'n.</l>
</sp>

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

 Μια απλή δήλωση για xml:lang μπορεί να πάρει τη μορφή: 

Xml:lang NMTOKEN #IMPLIED

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

<!ATTLIST poem xml:lang NMTOKEN 'fr'>
<!ATTLIST gloss xml:lang NMTOKEN 'en'>
<!ATTLIST note xml:lang NMTOKEN 'en'>