Extensible Markup Language (XML) 1.0Extensible Markup Language (XML) 1.0
W3C Recommendation 10-February-1998
Käesolev dokument on tõlge W3C soovitusest 10.02.1998 "Laiendatav märgistuskeel
XML 1.0". Käesolev dokument võib sisaldada vigu. Normatiivne on dokumendi
ingliskeelne versioon aadressil: http://www.w3.org/TR/1998/REC-xml-19980210.
Käesolev dokument asub aadressil:
http://www.riik.ee/xml/trans/REC-xml-19980210-ee.html.
Tõlkis: Copyright © 2000 Uuno Vallner
Copyright © 2000 Eesti Informaatikakeskus
REC-xml-19980210
Extensible Markup Language (XML) 1.0
W3C soovitus 10-February-1998
Käesolev versioon:
http://www.w3.org/TR/1998/REC-xml-19980210
http://www.w3.org/TR/1998/REC-xml-19980210.xml
http://www.w3.org/TR/1998/REC-xml-19980210.html
http://www.w3.org/TR/1998/REC-xml-19980210.pdf
http://www.w3.org/TR/1998/REC-xml-19980210.ps
Viimane versioon:
http://www.w3.org/TR/REC-xml
Eelmine versioon:
http://www.w3.org/TR/PR-xml-971208
Toimetajad:
Tim Bray (Textuality and Netscape)
Jean Paoli (Microsoft)
C. M. Sperberg-McQueen (University of Illinois at Chicago)
Referaat
Käesolev dokument on SGML alamhulga, laiendatava märgistuskeele XML (Extensible
Markup Language) täielik kirjeldus. XMLi eesmärgiks on võimaldada üldistatud
SGML teksti serveerida, vastu võtta ja töödelda veebis samal moel nagu see on
võimalik praegu HTML tekstidega. XML on projekteeritud lihtsustamaks SGML
kasutamist ja tagamaks SGML ja HTML risttöödeldavust.
Dokumendi staatus
Käesolev dokument on läbi vaadatud W3C liikmete ja teiste huvitatud poolte poolt
ja on kinnitatud W3C direktori poolt W3C-soovitusena. Muutmatu dokumendina võib
soovitust kasutada teatmematerjalina või tsiteerida kui normatiivset teksti
teistes dokumentides. W3C roll seda soovitust luues, on pöörata tähelepanu
spetsifikatsioonile ja edendada tema laialdast kasutamist. Soovituse kasutamine
tõstab veebi funktsionaalsust ja ristrakendatavust.
Dokument spetsifitseerib WWW (World Wide Web) tehnoloogias kasutatava keele
süntaksi. Keel on loodud alamhulgana eksisteerivast ja laialt kasutatavast
rahvusvahelisest tekstitöötlusstandardist SGML (Standard Generalized Markup
Language, ISO 8879:1986(E) koos täienduste ja muudatustega). Ta on W3C
XML-organisatsiooni tegevuse produkt, mille üksikasju võib leida aadressil
http://www.w3.org/XML. W3C praegu kehtiv soovituste loetelu ja muud tehnilised
dokumendid on leitavad aadressil http://www.w3.org/TR.
See spetsifikatsioon kasutab [Berners-Lee et al.] defineeritud terminit URI,
teoksil oleva tööga loodetakse uuendada soovitusi [IETF RFC1738] ja [IETF
RFC1808].
Spetsifikatsiooni teadaolevad vead on kättesaadavad aadressil
http://www.w3.org/XML/xml-19980210-errata.
Käesoleva dokumendi vigadest palume teatada e-aadressil xml-editor@w3.org.
Extensible Markup Language (XML) 1.0
Sisukord
1. Sissejuhatus
1.1 Saamislugu ja eesmärgid
1.2 Terminoloogia
2. Dokumendid
2.1 Trimmis XML dokumendid
2.2 Märgid
2.3 Üldised süntaktilised konstruktsioonid
2.4 Märkandmed ja märgistus
2.5 Kommentaarid
2.6 Töötluseeskirjad
2.7 CDATA-sektsioonid
2.8 Dokumendi proloog ja tüübi deklaratsioon
2.9 Iseseisva dokumendi deklaratsioon
2.10 Tühiruumi käsitlemine
2.11 Realõpu töötlemine
2.12 Keele identifitseerimine
3. Loogiline struktuur
3.1 Algusmärgised, lõpumärgised ja tühielemendi märgised
3.2 Elemendi tüübideklaratsioon
3.2.1 Elementsisu
3.2.2 Kombineereitud sisu
3.3 Atribuudiloetelu deklaratioon
3.3.1 Atribuutide tüübid
3.3.2 Atribuutide vaikeväärtused
3.3.3 Atribuutide väärtuste normaliseerimine
3.4 Tingimuslikud sektsioonid
4. Füüsiline Struktuur
4.1 Märgi- ja üksuseviidad
4.2 Üksuse deklaratsioonid
4.2.1 Sisemised üksused
4.2.2 Välised üksused
4.3 Parsitud üksused
4.3.1 Teksti deklaratsioon
4.3.2 Trimmis parsitud üksused
4.3.3 Märkide kodeerimine üksustes
4.4 XML-üksuste ja viitade protsessoripoolne käsitlemine
4.4.1 Tuvastamata
4.4.2 Kaasatud
4.4.3 Kaasatud kehtestamisel
4.4.4 Keelatud
4.4.5 Kaasatud literaalis
4.4.6 Teadistama
4.4.7 Edastatud
4.4.8 Kaasatud nagu PE
4.5 Sisemise üksuse asendusteksti konstruktsioon
4.6 Eeldefineeritud üksused
4.7 Notatsiooni deklaratsioon
4.8 Dokumentüksus
5. Kohandamine
5.1 Valideerivad ja mittevalideerivad protsessorid
5.2 XML-protsessorite kasutamine
6. Notatsioon
Lisad
A. Viited
A.1 Normatiivsed viited
A.2 Muud viited
B. Märgistike klassid
C. XML ja SGML (mittenormatiivne)
D. Üksusviitade ja märkviitade laiendamine (mittenormatiivne)
E. Deterministlik sisu mudel (mittenormatiivne)
F. Märkide kodeerimise automaatne määramine (mittenormatiivne)
G. W3C XML-töögrupp (mittenormatiivne)
1. Sissejuhatus
Laiendatav märgistuskeel, lühendatult XML, kirjeldab üht andmeobjektide klassi
XML-dokumente (XML documents) ja osaliselt arvutiprogrammide käitumist nende
töötlemisel. XML on SGMLi (Standard Generalized Markup Language [ISO 8879]),
standardprofiil või kitsendatud vorm. XML-dokumendid ühtivad oma konstruktsiooni
poolest SGML-dokumentidega.
XML-dokumendid koosnevad säilituskirjetest, mida kutsutakse üksusteks
(entities), mis sisaldab kas grammatiliselt parsitud (analüüsitud) või parsimata
andmeid. Parsitud andmed koosnevad märkidest (characters), kas märkandmete
(character data) või märgistuse (markup) vormis. Märgistusega kodeeritakse
andmete paigutus dokumendis ja dokumendi loogilise struktuuri kirjeldus.
XML-mehhanismidega kehtestatakse piirangud dokumendi paigutusele ja loogilisele
struktuurile.
Tarkvara moodulit XML-protsessor kasutatakse XML-dokumentide lugemiseks ja
juurdepääsu tagamiseks dokumendi sisule ja struktuurile. Eeldatakse, et
XML-protsessor töötab teise tarvara mooduli - rakenduse – huvides. Käesolev
spetsifikatsioon kirjeldab XML-protsessori nõutavat käitumist: kuidas ta peab
lugema XML-andmeid ja kuidas ta peab tagama rakenduse informeerimise.
1.1 Saamislugu ja eesmärgid
XML töötati välja XML-töögrupi (algselt tuntud kui SGMLi redaktsiooniliselt
läbivaatava nõukogu – SGML Editorial Review Board) poolt, mis loodi World Wide
Web Konsortsiumi patronaazhi all 1996. aastal. Töögruppi juhtis Jon Bosak, Sun
Microsystemsist aktiivses koostöös W3C poolt organiseeritud XML-erihuvigrupiga
(varem tuntud SGML-töögrupina). XML-töögrupi koosseis on antud lisas. Dan
Connolly oli töögrupi kontaktisik suhtlemisel W3Cga.
XMLi projekteerimise eesmärgid on:
1. XML on jalamaid kasutatav Interneti kaudu.
2. XML toetab laia valikut rakendusi.
3. XML ühildub SGMLga.
4. On lihtne kirjutada XML-dokumentide töötlemise programme.
5. Fakultatiivsete omaduste hulga peab XMLs hoidma absoluutses miinimumis,
ideaaljuhul nad puuduvad.
6. XML-dokumendid on inimloetavad ja loogiliselt selged.
7. XML-projektid on kiiresti realiseeritavad.
8. XML on formaalne ja napisõnaline
9. XML-dokumente on lihtne luua.
10. XML-dokumentide margistuse kokkusurutus on minimaalse tähtsusega.
Käesolev spetsifikatsioon koos seonduvate standarditega (Unicode ja ISO/IEC
10646 märgistiku kohta, Interneti RFC 1766 keele identifitseerimismärkide kohta
ja ISO 3166 riiginimede koodide kohta), tagavad kogu informatsiooni, mis on
vajalik XMLi versioonist 1.0 arusaamiseks ja arvutiprogrammide koostamiseks
XML-dokumentide töötlemiseks. Käesolevat XMLi spetsifikatsiooni versiooni võib
levitada vabalt niikaua kuni kogu tekst ja kehtivad märkused jäävad muutmatuks.
1.2 Terminoloogia
XML-dokumentide kirjeldamiseks kasutatav terminoloogia on defineeritud käesoleva
spetsifikatsiooni tekstis. Definitsioonide ülesehituses ja XML-protsessori
tegevuse kirjeldamisel on kasutatud järgnevas loetelus defineeritud mõisteid.
võib
Dokumentide ja XML-protsessorite vastavus nõudele on lubatud, kuid nad ei
tarvitse käituda kirjelduse kohaselt.
peab
Dokumentide ja XML-protsessorite käitumise vastavus kirjeldatud nõudele on
nõutav; vastasel korral on nad vigased.
viga
Käesoleva spetsifikatsiooni reeglite rikkumine; tulemused on määratlemata.
Vastav tarkvara peab avastama ja teatama veast ja tohib selle parandada.
hukutav viga
Viga, mille vastav XML-protsessor ( XML processor ) peab avastama ja teatama
rakendusele. Peale kohtumist hukutava veaga võib protsessor jätkata
andmetöötlust leidmaks järgmisi vigu ja võib neist vigadest teadistada
rakendust. Toetamaks vea parandamist, võib protsessor töötlemata andmed
(segu märkandmetest ja märgistusest) teha kättesaadavaks rakendusele. Hukutava
vea avastamisel peab protsessor ometi jalamaid katkestama normaalse töötluse
(st ta peab mitte jätkama märkandmete normaalsel moel üleandmist rakendusele
ja info edastamist dokumendi loogilise struktuuri kohta).
kasutaja valikul
Vastav tarkvara võib või peab (sõltuvalt lauses kasutatavast modaalverbist)
käituma vastavalt kirjeldusele; kui tingimus on kehtestatud, siis peab
kasutajale olema tagatud vahendid kirjeldatud käitumise võimaldamiseks või
keelamiseks.
kehtivuse kitsendus
Kõigile kehtivatele (valid ) XML-dokumentidele rakenduv reegel. Siduva
kitsenduse rikkumised on vead: valideeriv XML-protsessor (validating XML
processors) peab kasutaja valikul neist informeerima.
trimmisuse kitsendus
Trimmis (well-formed ) XML-dokumentidele rakenduv reegel. Trimmisuse reegli
rikkumine on hukutav viga (fatal error).
klapp
(Stringide või nimede:) Kaks võrreldavat stringi või nime peavad olema
identsed. Mitme võimaliku esitusega märgid ISO/IEC 10646 järgi (näiteks
eelnevalt määratud liitmärgid ja põhimärk + diakriitik ) klapivad ainult
siis, kui nad on mõlemas stringis samas esituses. Kasutaja valikul võib
protsessor sellised märgid teisendada mingile kanoonilisele kujule.
Tõsttundetus pole lubatud.
(Stringide ja grammatikareeglite: ) String klapib grammatilise
produktsiooniga kui ta kuulub keelde, mis genereeris selle produktsiooni.
(Sisu ja sisumudelite: ) Element klapib oma deklaratsiooniga kui ta vastab
kujule, mis on kirjeldatud piirangus “Kehtiv element” (Element Valid).
ühilduvus
XML omadus, toodud sisse üksnes garanteerimaks XMLi ühildumist SGMLga.
risttöödeldavus
Mittesiduv soovitus on toodud sisse XML-dokumentide töötlemisvõimaluste
suurendamiseks olemasolevate SGML protsessoritega, mis ennetavad dokumenti
WebSGML Adaption Annex ISO 8879.
2. Dokumendid
Andmeobjekt on XML-dokument, kui ta on trimmis (well-formed) käesolevas
spetsifikatsioonis defineeritud moel. Trimmis XML-dokument võib olla lisaks
kehtiv (valid), kui ta vastab kindlatele lisapiirangutele.
Igal XML-dokumendil on loogiline ja füüsiline struktuur. Füüsiliselt koosneb
dokument kirjetest, mida kutsutakse üksusteks (entities). Üksus võib viidata
(refer) teistele üksustele põhjustades nende kaasamise dokumenti. Dokument algab
juur- ehk dokumendiüksusega (document entity). Loogiliselt koosneb dokument
deklaratsioonidest, elementidest, kommentaaridest, viitadest märkidele,
töötluseeskirjadest, mis on kõik üksikasjaliku märgistusega ära näidatud
dokumendis. Loogiline ja füüsiline struktuur peavad olema sisestatud (nested)
õigesti vastavalt kirjeldusele “4.3.2. Trimmis parsitud üksused” ( "4.3.2
Well-Formed Parsed Entities").
2.1 Trimmis XML-dokumendid
Tekstiobjekt on trimmis XML-dokument, kui:
Tervikuna käsitletuna ta klapib produktsiooniga document.
Ta vastab kõigile käesolevas spetsifikatsioonis antud trimmisuse piirangutele.
Iga parsitud üksus (parsed entities), millele viidatakse vahetult või kaudselt
dokumendis, on trimmis ( well-formed).
Dokument
[1] document::= prolog elementMisc*
Dokumendi (document) klapp produktsiooniga tähendab, et:
Ta sisaldab ühte või mitut elementi (elements).
Eksisteerib üks ja ainult üks element, mida nimetatakse juur- ehk
dokumendielemendiks, mille ükski osa ei esine mitte üheski teise elemendi
sisus (content) . Kõikide teiste elementide korral, kui lähtemärgis asub mingi
teises elemendis, siis lõpumärgis on samas elemendis. Lihtsamalt väljendades,
lähte- ja lõpumärgisega eraldatud elemendid sisestuvad (nest) üksteises
õigesti.
Sellest järeldub, et iga dokumendi mitte-juurelemendi C jaoks leidub dokumendis
teine element P, nii et C sisaldub Ps, kuid ei sisaldu üheski teises Ps
sisalduvas elemendis. P on C ema ja C on P tütar.
2.2 Märgid
Parsitud üksus sisaldab teksti, märkide (characters) jada, mis võivad kujutada
märgistust või andmemärke. Märk on teksti atomaarne element vastavalt
spetsifikatsioonile ISO/IEC 10646 [ISO/IEC 10646]. Lubatavad märgid on taab
(tabeldusmärk), kelgu tagasijooks, reavahetus ja Unicode ja ISO/IEC 10646
lubatud märgid. Unicode paragrahvis 6.8 [Unicode] kirjeldatud “Ühilduvate
tärkide” kasutamine ei ole soovitav.
Märkide vahemikud
[2] Char::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] |
[#x10000-#x10FFFF]/* mistahes Unicode märk, välja arvatud
asendusplokid, plokid FFFE ja FFFF. */
Märkide kodeerimismehhanism võib varieeruda ühest üksusest teise. Kõik
XML-protsessorid peavad tunnistama ISO 10646 koode UTF-8 ja UTF-16. Mehhanismid
signaliseerimaks, missugune neist kahest on kasutuses ja mehhanismid mingid
teise kodeerimise mängu toomiseks on kirjeldatud hiljem peatükis “4.3.3.
Märkide kodeerimine üksustes” ("4.3.3 Character Encoding in Entities").
2.3 Üldised süntaktilised konstruktsioonid
See paragrahv defineerib mõned grammatikas laialt kasutatud märgid.
S (tühiruum) koosneb ühest või mitmest tühikust (#20), kelgu tgasijooksust,
reavahetusest või taabist. Tühiruum
[3] S::= (#x20 | #x9 | #xD | #xA)+
Märgid on klassifitseeritud tähtedeks, numbriteks, või teisteks märkideks.
Tähed koosnevad alfabeetilistest või silpkirja märkidest, millele võib järgneda
üks või mitu kombineeritud märki või ideograafilist märki. Spetsiifiliste
märkide täielikud definitsioonid klasside kaupa on toodud jaotises “B.
Märgiklassid” (B. Character Classes).
Nimi on lekseem, mis algab tähega või ühega vähestest punktuatsioonimärkidest ja
jätkub tähtedega, numbritega, sidekriipsudega, alakriipsudega, koolonitega, või
punktidega, mida kõiki koos tuntakse nimemärkidena. Stringiga "xml" algavad
nimed ja avaldisega (('X'|'x') ('M'|'m') ('L'|'l')) klappivad stringid on
reserveeritud kasutamiseks selles või selle spetsifikatsiooni
tulevikuversioonides.
Märkus: Märk koolon XML-nimes on reserveeritud eksperimentideks nimeruumiga.
Tema tähendus kavatsetakse standardiseerida mingil tulevikuhetkel, millest
alates need dokumendid, mis sisaldavad eksperimentaaleesmärkidel koolonit,
võivad vajada uuendamist. (Ei ole garantiid, et mingi XMLi jaoks kohandatud
nimeruumi mehhanism ei võiks kasutada faktiliselt koolonit nimeruumi
eraldajana). Praktikas tähendab see seda, et autorid ei tohiks kasutada koolonit
XML-nimedes, välja arvatud nimeruumi eksperimentides, aga XML-protsessorid
peaksid aktsepteerima koolonit nimemärgina.
Lekseem Nmtoken (name token) on mistahes nimemärkide segu.
Nimed ja lekseemid
[4] NameChar::= Letter | Digit | '.' | '-' | '_' | ':' |
CombiningChar | Extender
[5] Name::= (Letter | '_' | ':') (NameChar)*
[6] Names::= Name (S Name)*
[7] Nmtoken::= (NameChar)+
[8] Nmtokens::= Nmtoken (SNmtoken)*
Literaal on mistahes jutumärkides string, mis ei sisalda selle stringi
eraldajana kasutatavaid jutumärke. Literaale kasutatakse siseüksuste
(EntityValue), sisu spetsifitserimiseks, atribuutite väärtuseks (AttValue) ja
välisteks identifikaaoriteks (SystemLiteral). Märgime, et literaali
SystemLiteral võib parsida ilma märgistust skaneerimata.
Literaalid
[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 Märkandmed ja märgistus
Tekst (text) on märkandmete (character data) ja märgistuse segu.Märgistus
esineb algusmärgistena (start-tags), lõpumärgistena (end-tags), tühjade
märgistena (empty-element tags), üksuseviitadena (entity references),
märgiviitadena (character eferences), kommentaaridena (comments),
CDATA-sektsiooni ( CDATA section) eraldajatena, dokumendi tüübi
deklaratsioonidena (document type declarations) ja töötluseeskirjadena
(processing instructions).
Kogu märgistusse mittekuuluv tekst moodustab dokumendi märkandmed.
Ampersand (&) ja vasak nurksulg (<) võib literaalina esineda ainult siis, kui
teda kasutatakse märgistuse eraldajatena, või kommentaari (comment) tekstis või
töötluseeskirjas (processing instruction) või CDATA-sektsioonis (CDATA
section). Need märgid on lubatud ka siseüksuse deklaratsiooni literaalüksuse
väärtuses (literal entity value) vt "4.3.2 Trimmis parsitud üksused". Kui neid
märke vajatakse kuskil mujal, peab nad esitama paojadana (escaped) kasutades
numbrilisi märgiviitu (numeric character references) või vastavalt stringe
"&" ja "<". Parema nurksulu (>) võib esitada stringina ">", ja ta
peab ühilduvuseks ( for compatibility) esitama stringis "]]>" paojadana
">" või numbrilise märgiviidana, kui see string ei märgista CDATA-sektsiooni
(CDATA section) lõppu.
Märkandmed elemendi sisus on mistahes string, mis ei sisalda ühtegi märgise
alguseraldajat. Märkandmed CDATA-sektsioonis on mistahes string, mis ei sisalda
CDATA sektsiooni sulgevat eraldajat "]]>".
Lubamaks atribuutide väärtustes ülakoma ja jutumärkide sisaldumist, võib ülakoma
(') esitada kujul "'" ja jutumärki (") kujul """.
Märkandmed
[14] CharData::= [^<&]* - ([^<&]* ']]>' [^<&]*)
2.5 Kommentaarid
Kommentaarid võivad esineda igal pool dokumendis väljaspool märgistust (markup);
lisaks võivad nad esineda dokumendi tüübi deklaratsioonis grammatikaga lubatud
kohtades Nad pole osa dokumendi märkandetest (character data); XML-protsessor
võib, kuid ei pea võimaldama rakendusel leida kommentaari teksti. Ühilduvusesks
( for compatibility) ei tohi string "--" (topelt sidekriips) sisalduda
kommentaaris.
Kommentaarid
[15] Comment::= ''
Kommentaari näide:
2.6 Töötluseeskirjad
Töötluseeskirjad PI (processing instructions) lubavad dokumentides anda
rakendustele eeskirju nende töötlemiseks.
Töötluseeskirjad
[16] PI::= '' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17] PITarget::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))
PId ei ole osa dokumendi märkandmetest (character data), aga nad peab antama
üle rakendusele. PId algavad sihtmärgiga (PITarget), mis identifitseerib
rakenduse, millele see eeskiri on suunatud. Standariseerimiseeesmärkidel on
käesoleva spetsifikatsiooni praeguses või tulevikuversioonides sihtmärgi nimed
"XML", "xml" ja teised sarnased reserveeritud. PI sihtmärgi formaalseks
deklareerimiseks võib kasutada XML-notatsiooni (notation) mehhanisme.
2.7 CDATA-sektsioonid
CDATA-sektsioonid võivad esineda kõikjal, kus võib esineda märkandmeid; neid
kasutatakse selliste tekstiplokkide varjestamiseks, mis sisaldavad märke, mida
peab tuvastama märgistusest erinevalt. CDATA-sektsioonid algavad stringiga
"":
CDATA-sektsioonid
[18] CDSect::= CDStart CDataCDEnd
[19] CDStart::= '' Char*))
[21]CDEnd::= ']]>'
CDATA-sektsioonis tuvastatakse ainult CDEnd stringi märgistusena, nii et
vasakud nurksulud ja ampersandid võivad esineda oma literaalkujul: neid pole
vaja (ja ei saa) varjestada "<" ja "<" abil. CDATA-sektsioone ei saa
üksteisesse sisestada.
CDATA-sektsiooni näide, kus "" ja "" tuvastatakse
märkkandmetena (character data) mitte märgistusena (markup):
Hello, world!]]>
2.8 Dokumendi proloog ja tüübideklaratsioon
XML-dokumendid võivad ja peavad algama XML-deklaratsiooniga, mis spetsifitseerib
kasutatava XMLi versiooni. Näiteks on järgnev XML-dokument trimmis
(well-formed), kuid mitte kehtiv (valid):
Hello, world!
ja samuti ka see:
Hello, world!
Versiooni numbrit "1.0" peab kasutama viitamaks kooskõlale selle
spetsifikatsiooni selle versiooniga; kui dokument ei ole kooskõlas
spetsifikatsiooni selle versiooniga, on väärtuse "1.0" kasutamine viga.
XML-töögrupi tahe on anda selle spetsifikatsiooni hilisematele versioonidele
väärtusest "1.0" erinevaid numbreid, kuid see tahe ei viita kohustusele töötada
välja mõni XMLi versioon tulevikus, aga ometi, kui mingi versioon töötatakse
välja, siis kasutatakse sama nummerdusskeemi. Kuni tulevikuversioonid pole
välistatud, on see konstruktsioon ette nähtud vahendina lubamaks vajaduse
tekkimisel automaatset versioonituvastust. Protsessorid võivad anda veasignaali,
kui nad saavad dokumendi, mis on märgistatud versiooninumbriga, mida nad ei
toeta.
XML-dokumendi märgistuse funktsioon on kirjeldada tema salvestamist ja
loogilist struktuuri ja seostada atribuudi-väärtuse paarid tema loogilise
struktuuriga. XML näeb ette dokumendi tüübi deklaratsiooni (document type
declaration) mehhanismi, et defineerida loogilise struktuuri kitsendused ja
toetada eeldefineeritud salvestusüksuste kasutamist. XML dokument on kehtiv, kui
ta on seotud dokumendi tüübideklaratsiooniga ja kui dokument rahuldab temas
väljendatud kitsendusi.
Dokumendi tüübideklaratsioon peab olema enne dokumendi esimest elementi
(element).
Proloog
[22] prolog::= XMLDecl? Misc* (doctypedecl Misc*)?
[23] XMLDecl::= ''
[24] VersionInfo::= S 'version' Eq (' VersionNum ' | " VersionNum ")
[25] Eq::= S? '=' S?
[26] VersionNum::= ([a-zA-Z0-9_.:] | '-')+
[27] Misc::= Comment | PI | S
XML-dokumendi tüübideklaratsioon sisaldab või viitab märgistuse deklaratsioonile
(markup declarations), millega määratakse kogu dokumendiklassi grammatika. Seda
grammatikat nimetatakse dokumendi tüübidefinitsiooniks või DTDks (document type
definition). Dokumendi tüübidefinitsioon võib viidata välisele märgistuse
deklaratsioone sisaldavale alamhulgale (välisüksuse (external entity) erijuht),
ta võib sisaldada märgistuse deklaratsioone vahetult sisemises alamhulgas, ta
võib esitada kombineerides mõlemaid mooduseid. Dokumendi DTD moodustavad mõlemad
alamhulgad kokkuvõetuna.
Märgituse deklaratsioon on elemendi tüübideklaratsioon (element type
declaration), atribuutide loetelu deklaratsioon (attribute-list declaration),
üksuse deklaratsioon (entity declaration), või notatsiooni deklaratsioon
(notation declaration). Need deklaratsioonid võivad sisalduda tervikuna või
osaliselt parameeterüksuses (parameter entities), nagu on kirjeldatud trimmisuse
ja kehtivuse piirangutes allpool. Täielikuma informatsiooni saamiseks vaata "4.
Füüsiline struktuur".
Dokumendi tüübi deklaratsioon
[28] doctypedecl::= ''[ VC: Juurelemendi tüüp
(Root Element Type)]
[29] markupdecl::= elementdecl | AttlistDecl | EntityDecl |
NotationDecl | PI | Comment[ VC: Õige deklaratsioonide/PE sisestus
(Proper Declaration/PE Nesting)]
[ WFC: PEd sisemises alalamhulgas (PEs in Internal Subset)]
Märgistuse deklaratsioon võib olla esitatud tervikuna või osaliselt
parameeterüksuste asendustekstis (replacement text of parameter entities)
Käesoleva spetsifikatsiooni allpool toodud indviduaalsete mitteterminalide
(elementdecl, AttlistDecl, jt) produktsioonid kirjeldavad deklaratsioone pärast
parameeterüksuste sisselülitamist.
Kehtivuse kitsendus: juurelement
Name dokumendi tüübikirjelduses peab klappima elemenditüübiga juurelement (root
element).
Kehtivuse kitsendus: õige deklaratsiooni/PE sisestuse nõue
Parameeterüksuse asendustekst (replacement text) peab olema koos märgistuse
deklaratsioonidega sisestatud (nested) õigesti. See tähendab, kui märgistuse
deklaratsiooni (ülaltoodud markupdecl ) kas esimene või viimane märk sisaldub
parameeterüksuse viida asendustekstis, peavad mõlemad sisalduma samas
asendustekstis.
Trimmisuse kitsendus: PE sisemises alamhulgas
Sisemises DTD alamhulgas võib parameeterüksuse viit (parameter-entity
references) esineda ainult seal, kus võib esineda märgistuse deklaratsioon. (See
ei rakendu viitadele, mis esinevad välistes parameeterüksustes ega välistele
alamhulkadele).
Nagu sisemine alamhulk, peab DTDle viitav väline alamhulk ja iga väline
parameeterüksus sisaldama täieliku märgistuse deklaratsioonide jada, mis on
lubatud mitterminaali markupdecl poolt, segamini tühimikega või
parameeterüksuse viitadega (parameter-entity references). Kuigi väliseid
alamhulki, või väliseid parameeterüksusi võib tingimuslikult ignoreerida,
kasutades tingimusliku sektsiooni (conditional section) konstruktsioone; pole
see lubatud sisemises alamhulgas.
Väline alamhulk
[30] extSubset::= TextDecl? extSubsetDecl
[31] extSubsetDecl::= ( markupdecl | conditionalSect | PEReference |
S )*
Väline alamhulk ja väline parameeterüksus erinevad samuti sisemisest alamhulgast
selle poolest, et parameeterüksuse viidad (parameter-entity references) on
lubatud mitte ainult märgistusdeklaratsioonide vahel, vaid ka
märgistusdeklaratsiooni sees.
Dokumenditüübi deklaratsiooniga XML-dokumendi näide:
Hello, world!
Süsteemi identifikaator (system identifier) "hello.dtd" on dokumendi DTD URI.
Deklaratsiooni võib anda ka lokaalselt, nagu järgnevas näites:
]>
Hello, world!
Kui kasutatakse mõlemaid, nii väliseid kui ka sisemisi alamhulki, vaadeldakse
sisemist alamhulka enne välist alamhulka. Selle efekt on selles, et sisemise
alamhulga üksust ja atribuutide loetelu deklaratsiooni eelistatakse võrreldes
välise alamhulgaga.
2.9 Iseseisva dokumendi deklaratsioon
Märgistuse deklaratsioonid võivad mõjutada dokumendi sisu, kuna nad ju antakse
XML protsessori (XML processor) poolt rakendusele; näideteks on atribuutide
vaikeväärtused ja üksuse deklaratsioonid. Iseseisev dokumendideklaratsioon, mis
võib olla XML dokumendideklaratsiooni komponendiks, signaliseerib, kas seal on,
või mitte selliseid deklaratsioone, mis on välised dokumendiüksuse (document
entity) suhtes.
Iseseisva dokumendi deklaratsioon
[32] SDDecl::= S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"'
('yes' | 'no') '"'))[ VC: Iseseisva dokumendi deklaratsioon
(Standalone Document Declaration)]
Väärtus "yes" iseseisva dokumendi deklaratsioonis näitab, et dokumendis ei ole
dokumendiüksuse (document entity) suhtes väliseid märgistuse deklaratsioone
(ükspuha kas välise alamhulga DTDs, või sisemisest alamhulgast viidatud välistes
parameeterüksustes), mis mõjutavad XML-protsessori poolt rakendusele üleantavat
informatsiooni. Väärtus "no" näitab, et dokumendis on, või võib olla,
selliseid väliseid märgistuse deklaratsioone. Märgime, et iseseisev dokumendi
deklaratsioon ainult märgistab välise deklaratsiooni olemasolu; olemasolu
dokumendis, viitades välistele üksustele, kui need üksused ei ole sisemiselt
defineeritud, ei muuda iseseisvuse staatust.
Kui dokumendis puuduvad välise märgistuse deklaratsioonid, siis pole iseseisva
dokumendi deklaratsioonil tähendust. Kui seal on välised märgistuse
deklaratsioonid, kuid ei ole iseseisva dokumendi deklaratsiooni, peetakse
enesestmõistetavaks väärtust "no".
Iga XML-dokument, mille jaoks kehtib standalone="no", saab algoritmiliselt
konverteerida iseseisvaks dokumendiks, mis võib olla mõnede võrgurakenduste
jaoks ihaldatav.
Kehtivuse piirang: iseseisva dokumendi deklaratsioon
Iseseisva dokumendi deklaratsioon peab omama väärtust "no", kui mistahes väline
märgistuse deklaratsioon sisaldab
vaikeväärtustega (default) atribuutide deklaratsioone, kui atribuutide poolt
mõjutatavad elemendid on dokumendis ilma nende väärtust spetsifitseerimata,
või
üksuste deklaratsioone (välja arvatud amp, lt, gt, apos, quot), kui dokument
sisaldab viitu (references) neile üksustele, või
atribuutide deklaratsioone koos normaliseerimisele (normalization) kuuluvate
väärustega, kui dokumendis on atribuut väärtusega, mis muutub normaliseerimise
käigus, või
elementsisuga (element content) elementide tüübideklaratsioone, kui nende
tüüpide igas eksemplaris on vahetu tühi ruum.
Iseseisva XML dokumendi deklaratsiooni näide:
2.10 Tühiruumi käsitlemine
XML-dokumentide toimetamisel on parema loetavuse huvides sageli otstarbekas
käsitleda “tühiruumi” (tühikuid, tabulaatoreid, tühje ridasid, mida käesolevas
spetsifikatsioonis on märgistatud mitteterminaliga S ) eraldi märgistusest.
Tüüpilistel juhtudel pole selline tühiruum mõeldud lülitamiseks edastavasse
dokumendiversiooni. Teiselt poolt peab tähenduslik tühiruum edastavas
dokumendiversioonis säiluma, näiteks poeesias ja lähtekoodis.
XML-protsessor (XML processor) peab alati dokumendi märgistusest erinevad
märgid üle andma rakendusele. Valideeriv XML-protsessor (validating XML
processor) peab lisaks rakendust informeerima, millised tühiruumi märgid
esinesid elementsisus (element content).
Elemendile võib lisada erilise xml:space atribuudi (attribute) signaliseerimaks
tahet, et selles elemendis peab rakendusele säiluma tühiruumi märgid. Nagu kõik
teisedki atribuudid kehtivas dokumendis, peab selle atribuudi kasutamise korral
olema ta deklareeritud (declared). Kui ta on deklareeritud, peab ta olema
esitatud loetelutüübina, mille ainukesed võimalikud väärtused on “default” ja
“preserve”. Näiteks:
Väärtus “default” signaliseerib rakendusi, et selle elemendi jaoks on
vastuvõetav vaikimisi kasutatav tühiruumi töötlemismoodused; väärtus “preserve”
viitab tahtele, et rakendused säilitavad kõik tühiruumi märgid. See
deklareeritud tahe on arvestatud rakendada kõigi elementide sisule, kus ta on
spetsifitseeritud, kuni spetsifikatsiooni pole ümber lükatud teise xml:space
atribuudi eksemplari poolt.
Mistahes dokumendi root elemendi (root element) kohta eeldatakse, et tema jaoks
on signaliseeritud tahte puudumine vaadelda rakenduses tühiruumi töötlust, kui
temal puudub selle atribuudi väärtus, või atribuut on deklareeritud oma
vaikeväärtusega.
2.11 Realõpu töötlemine
Parsitud XML-üksusi (parsed entities) salvestatakse sageli arvutifailidese,
mis on redigeerimise eesmärgil organiseeritud ridadena. Need read on tavaliselt
eraldatud mõne kombinatsiooniga märkidest kelgu tagasilüke (#xD) ja reavahetus
(#xA).
Rakenduste (applications) töö lihtsustamiseks annab XML-protsessor (XML
processor) rakendusele ükskõik millises parsitud välisüksuses või parsitud
siseüksuse literaalis sisalduva kahemärgise literaali "#xD#xA" või
üksikliteraali #xD asemel üksikmärgi #xA. (Sellist käitumist võib
traditsiooniliselt tekitada kõikide reavahetuste normaliseerimise teel märgiks
#xA sisestusprotsessis enne parsimist).
2.12 Keele identifitseerimine
Dokumendi töötlemisel on sageli kasulik identifitseerida sisu kirjutamiseks
kasutatud loomulik keel. Kasutatava keele spetsifitseerimiseks XML-dokumendi
mistahes välja sisus ja atribuudi väärtustes võib dokumenti lülitada
eriatribuudi (special attribute) xml:lang. Kehtivas dokumendis peab see
atribuut, nagu mistahes teine atribuut, olema tema kasutamise korral
deklareeritud (declared). Atribuutide väärtusteks on keele identifikaatorid
kujul nagu nad on defineeritud dokumendis [IETF RFC 1766], "Tags for the
Identification of Languages":
Keele identifitseerimine
[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 võib olla mistahes järgnevatest:
kahetäheline keele kood vastavalt definitsioonile [ISO 639], "Codes for the
representation of names of languages"
Internet Assigned Numbers Authority [IANA]; poolt registreeritud keele
identifikaator; need algavad eesliitega t "i-" (or "I-")
kasutaja poolt omistatud keele identifikaator, või osapoolte vahel
kokkulepitud identifikaator erakasutuseks; need peavad algama eesliitega "x-"
või "X-" tagamaks, et need ei lähe konflikti hilisemate standarditega või
registreerimisega IANAs
Alamkoodi (subcode) segmente võib olla kuitahes palju; kui esimene alamkoodi
segment on olemas ja kui alamkood sisaldab kahte tähemärki, siis ta peab olema
riigi kood vastavalt standardile [ISO 3166], "Codes for the representation of
names of countries." Kui esimene alamkood sisaldab enam kui kaht tähte, siis
peab ta olema siis ta peab olema IANA poolt registreeritud keele kood, kui
mitte Langcode ei alga eesliitega "x-" või "X-".
Keele koodi on kombeks esitada väiketähtedega, ja riigi koodi (kui mingi
esitatakse) suurtähtedega. Märgime, et erinevalt teistest XML-dokumendi
nimedest, on need väärtused tõsttundetud.
Näiteks:
The quick brown fox jumps over the lazy dog.
What colour is it?
What color is it?
Habe nun, ach! Philosophie,
Juristerei, und Medizin
und leider auch Theologie
durchaus studiert mit heißem Bemüh'n.
Atribuudiga xml:lang deklareeritud tahe rakendub kõigile atribuutidele ja
elemendi sisule, kus ta on spetsifeeritud, kuni ta pole üle defineeritud antud
elemendi sisus paikneva mingi teise elemendi xml:lang eksemplariga.
Atribuut xml:lang võib lihtsamal juhul olla kujul
xml:lang NMTOKEN #IMPLIED
kuid vaikeäärtused võivad samuti olla antud, kui nad on asjakohased. Inglise
üliõpilaste jaoks kirjutatud prantsuse luuletuste kogumikus, mis sisaldab
ingliskeelseid tõlgitsusi ja märkusi, võib xml:lng atribuut olla deklareeritud
nii:
3. Loogiline struktuur
Iga XML-dokument (XML document) sisaldab ühte või mitut elementi, mis on
piiritletud kas algusmärgistega (start-tags) ja lõpumärgistega (end-tags),
või tühielemendi (empty) korral tühielemendi märgisega (empty-element tag).
Igal elemendil on nimega identifitseeritav tüüp, mida mõnikord kutsutakse tema
“sootunnuseks” (GI – generic identifier) ja võib omada kogumi atribuutide
spetsifikatsioone. Iga atribuudi spetsifikatsioonil on nimi (name) ja väärtus
(value).
Element
[39] element::= EmptyElemTag
| STag contentETag[ WFC: Elemenditüübi klapp (Element Type Match) ]
[ VC: Elemendi kehtivus (Element Valid) ]
Käesolev spetsifikatsioon ei piira elementide semantikat, nende kasutamist, ega
elemendi tüübi ja atribuutide süntaksiväliseid nimesid, välja arvatud seda, et
nimed mille algused klapivad avaldisega (('X'|'x')('M'|'m')('L'|'l')) on
reserveeritud standardiseerimiseks käesoleva spetsifikatsioni praeguses või
tulevikuversioonides.
Trimmisuse piirang: elemenditüübi klapp
Elemendi lõpumärgise nimi (Name) peab klappima elemendi tüübiga algusmärgises.
Kehtivuse piirang: Elemendi kehtivus
Element on kehtiv, kui leidub elementdecl klappiv deklaratsioon, kus Name
klapib elemendi tüübiga ja kehtib üks järgnevatest:
1. Deklaratsioon klapib EMPTYga ja elemendil puudub sisu (content).
2. Deklaratsioon klapib tütrega (children) ja tütarelementide (child elements)
jada kuulub keelde, mis on sisu mudeli regulaaravaldise poolt genereeritud, koos
võimalike tühiruumi märkidega (mitteterminaliga S klappivad märgid) iga
tütarelementide paari vahel.
3. Deklaratsioon klapib avaldisega Mixed ja sisu koosneb märkandmetest
(character data) ja tütarelementidest ( child elements), mille tüübid vastavad
nimedele sisu mudelis.
4. Deklaratsioon klapib ANY, ja iga tütarelemendi (child elements) tüüp on
deklareeritud
3.1 Algusmärgised, lõpumärgised ja tühielemendi märgised
Mistahes mittetühi XML element on märgistatud algusmärgisega.
Start-tag
[40] STag::= '<' Name (SAttribute)* S? '>'[ WFC: Att
spetsifikatsiooni unikaalsus (Unique Att Spec) ]
[41] Attribute::= Name EqAttValue[ VC: Atribuudi väärtuse tüüp
(Attribute Value Type) ]
[ WFC: Puuduvad viidad välisüksustele (No External Entity
References) ]
[ WFC: Atribuudi väärtuses pole märki < (No < in Attribute Values) ]
Atribuut Name algus- ja lõpumärgendites annab elemendi tüübi..Paar Name-AttValue
esitab elemendi atribuudi spetsifikatsiooni, Name mistahes paaris esitab
atribuudi nime ja AttValue sisu (tekst eraldajate ' või " vahel) atribuudi
väärtuse.
Trimmisuse kitsendus: Att spetsifikatsiooni unikaalsus
Ühes ja samas algusmärgises või tühielemendi märgises ei või atribuudi nimi
esineda rohkem kui üks kord.
Kehtivuse kitsendus: atribuudi väärtuse tüüp
Atribuut peab olema deklareeritud; väärtus peab vastama deklareeritule.
(Atribuutide tüübid on kirjeldatud jaotises "3.3 Atribuutloetelu
deklaratsioon".)
Trimmisuse kitsendus: puuduvad viidad välisüksustele
Atribuutide väärtused ei saa sisaldada vahetud või kaudset üksuse viita
välisüksustele.
Kehtivuse piirang: Atribuudi väärtuses pole märki <
Mistahes üksuse asendustekst (replacement text) esitatuna atribuudi väärtusena
(erinev "<") ei tohi vahetult või kaudselt sisaldada märki <.
Algusmärgise näide:
Iga algusmärgisega algava elemendi lõpp peab olema märgistatud lõpumärgisega,
mis sisaldab nime, mis kordab algusmärgises antud elemendi tüüpi:
Lõpumärgis
[42] ETag::= '' Name S? '>'
Lõpumärgise näide:
Algusmärgise ja lõpumärgise vahelist teksti (text) nimetatakse elemendi sisuks:
Elementide sisu
[43] content::= (element | CharData | Reference | CDSect | PI |
Comment)*
Kui element on tühi, siis peab ta olema esitatud kas algusmärgisega ja temale
vahetult järgneva lõpumärgisega või tühielemendi märgisega. Tühielemendi märgis
omab erilise kuju:
Tühielementide märgised
[44] EmptyElemTag::= '<' Name (SAttribute)* S? '/>'[ WFC: Att
spetsifikatsiooni unikaalsus (Unique Att Spec) ]
Tühielemendi märgist võib kasutada mistahes elemendi korral, millel puudub sisu,
kui ta mitte ei ole deklareeritud võtmesõna EMPTY abil. Risttöödeldavuseks (for
interoperability) peab tühielemendi märgist kasutatama ja võib ainult kasutada
elementide korral, mis on deklareeritud (declared) võtmesõna EMPTY abil.
Tühielementide näited:
3.2 Elemendi tüübideklaratsioonid
XML-dokumendi (XML document) elemendi (element) elemendi struktuurile võib
kehtivuse (validation) eesmärkidel esitada piiranguid kasutades elemendi tüübi
deklaratsiooni ja atribuutide loetelu. Elemendi tüübi deklaratsioon piirab
elemendi sisu (content).
Elemendi tüübi deklaratsioon piirab sageli seda, missuguse elemendi tüüp esineb
elemendi tütrena (children). XML-protsessor võib kasutaja suvandi korral
väljastada hoiatuse, kui deklaratsioonis mainitakse elemendi tüüpi, mille jaoks
pole deklaratsiooni, kuid see pole viga.
Elemendi tüübi deklaratsioon on kujul:
Elemendi tüübi deklaratsioon
[45] elementdecl::= ''[ VC:
Elemendi tüübi deklaratsiooni unikaalsus (Unique Element Type
Declaration) ]
[46] contentspec::= 'EMPTY' | 'ANY' | Mixed | children
kus Name määrab deklareeritava elemendi tüübi
Kehtivse piirang: Elemendi tüübi deklaratsiooni unikaalsus
Ühtegi elemendi tüüpi ei tohi deklareerida rohkem kui üks kord.
Näited elemendi tüübi deklaratsioonidest:
3.2.1 Elementsisu
Elementsisuga elemendi tüüp (type) sisaldab ainult tütarelemente (child
elements) (mitte märkandmeid), mis võivad olla eraldatud tühiruumi märkidega
(mitteterminaliga S klappivad märgid). Sel juhul sisaldab kitsendus sisu
mudelit, lihtsat grammatikat, mis katab lubatud tütarelementide tüübid ja
järjestuse, milles neil on lubatud esineda. Grammatika on ehitatud üles sisu
partiklitele (content particles (cps)), mis sisaldavad nimesid, sisupartiklite
valikuloetelusid, või sisupartiklite järjestikulist loetelu:
Elementsisu mudelid
[47] children::= (choice | seq) ('?' | '*' | '+')?
[48] cp::= (Name | choice | seq) ('?' | '*' | '+')?
[49] choice::= '(' S? cp ( S? '|' S? cp )* S? ')'[ VC: Õige Group/PE
sisestus (Proper Group/PE Nesting) ]
[50] seq::= '(' S? cp ( S? ',' S? cp )* S? ')'[ VC: Õige Group/PE
sisestus (Proper Group/PE Nesting) ]
kus iga nimi ( Name) on elemendi tüüp, mis võib esineda elemendi tütrena
(child). Mistahes sisu partikkel valikuloetelus võib esineda elemendi sisus
(element content) samas kohas, kus valikuloetelu asub grammatikas;
järjestikulises loetelus toodud sisupartiklid peavad kõik esinema elemendi sisus
(element content ) loetelus esitatud järjestuses. Mittekohustuslik märk nime
või loetelu taga nõuab, et kas element või sisupartikkel loetelus võib korduda
üks või rohkem (+), null või rohkem (*) korda. Sellise operaatori puudumine
tähendab, et element või sisupartikkel peab esinema täpselt üks kord. See
süntaks ja tähendus on identne käesolevas spetsifikatsioonis produktsioonides
kasutatavale.
Elemendi sisu klapib sisu mudeliga siis ja ainult siis, kui on võimalik kindlaks
teha tee läbi sisu mudeli, kuuletumine järjestuse, valiku ja korduvuse
operaatoritele ja iga elemendi klapp sisus sisumudeli elemendiga. Ühilduvuseks
(for compatibility) loetakse veaks, kui dokumendi element võib sisu mudelis
klappida enam kui ühe elemendi tüübi eksemplariga. Rohkem infot on jaotises "E.
Deterministlikud sisumudelid".
Kehtivuse piirang: õige grupi/PE sisestus
Parameeterüksuse asendustekst (replacement text) peab olema õigesti sisestatud
(nested) koos sulgudesse võetud gruppidega. Teiste sõnadega, kui avav või sulgev
sulg valiku, järjestuse või kombineeritud konstruktsioonides choice, seq, or
Mixed sisaldub parameeterüksuse (parameter entity) asendustekstis, peavad nad
mõlemad sisalduma samas asendustekstist. Risttöödeldavuseks (for
interoperability), kui valiku, järjestuse või kombineeritud konstruktsioonides
(choice, seq, or mixed construct) esineb parameeterüksuse viit, siis tema
asendustekst ei tohi olla tühi ja ei esimene ega viimane asendusteksti mittetühi
märk ei tohi olla seostaja (| või ,).
Näited elementsisuga mudelitest:
3.2.2 Kombineeritud sisu
Elemendi tüüp (type) on kombineeritud kui seda tüüpi element võib sisaldada
märkandmeid vaheldumisi mittekohustuslike tütarelementidega (child elements).
Sel juhul võivad tütarelementide tüübid olla kitsendatud, kuid mitte ende
järjestus ja nende esinemiste arv:
Kombineeritud sisu deklaratsioon
[51] Mixed::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*'
| '(' S? '#PCDATA' S? ')'[ VC: Õige grupi/PE sisestus (Proper
Group/PE Nesting) ]
[ VC: Dublikaattüüpide keeld (No Duplicate Types) ]
kus nimed (Name) määravad nende tütarelementide elementide tüübi, mis võivad
esineda elemendis.
Kehtivuse piirang: Dublikaattüüpide keeld
Sama nimi ei tohi rohkem kui üks kord üksikus või kombineeritud
deklaratsioonides.
Kombineeritud elementide deklaratsioonide näited:
3.3 Atribuudiloetelu deklaratsioon
Atribuute (Attributes) kasutatakse paari nimi-väärtus sidestamiseks elementidega
(elements). Atribuudi spetsifikatsioon saab esineda ainult algusmärgitses
(start-tags) ja tühielementmärgistes (empty-element tags); niisiis neid
tuvastavad produktsioonid on esitatud jaotises "3.1 Algusmärgised, lõpumärgised
ja tühielementmärgised". Atribuudiloetelu deklaratsioone saab kasutada:
Etteantud elemendi tüübile vastava atribuutide kogumi defineerimiseks.
Nende atribuutide jaoks kitsenduste kehtestamiseks.
Atribuutide vaikeväärtuste (default values) ette määramiseks.
Atribuudiloetelu deklaratsioonid spetsifitseerivad etteantud elemendi tüübi iga
atribuudi nime, andmetüübi ja vaikeväärtuse (kui on olemas):
Atribuudiloetelu deklaratsioon
[52] AttlistDecl::= ''
[53] AttDef::= S Name SAttTypeSDefaultDecl
Name reeglis AttlistDecl on elemendi tüüp. XML-protsessor võib kasutaja valikul
väljastada hoiatuse, kui atribuudid on deklareeritud elemendi tüübi kohta, mida
ennast pole deklareeritud, kuid see pole viga. Nimi Name reeglis AttDef on
atribudi nimi.
Kui rohkem kui üks reegel AttlistDecl on ette nähtud etteantud elemendi tüübi
jaoks, siis mestitakse kõik elemendi tüübi jaoks ette nähtud reeglite sisud.
Kui etteantud elemendi tüübi jaoks on samal atribuudil rohkem kui üks
definitsioon, siis seostatakse neist esimene deklaratsioon ja järgnevaid
deklaratsioone ignoreeritakse. Risttöödeldavuseks (for interoperability) võivad
DTD kirjutajad otsustada ette näha ette antud elemendi tüübi jaoks mitte enam
kui ühe atribuudiloetelu deklaratsiooni ja iga atribuudiloetelu deklaratsiooni
kohta vähemalt ühe atribuudi definitsiooni. XML-protsessor võib
ristkasutatavuseks väljastada kasutaja suvandi korral hoiatuse, kui etteantud
elemendi tüübi jaoks on rohkem kui üks atribuudiloetelu deklaratsioon, või kui
etteantud atribuudi jaoks on ette nähtud rohkem kui üks atribuuti, kuid see pole
viga.
3.3.1Atribuutide tüübid
XML atribuutide tüüpe on kolm: string tüüp, lekseemtüüp ja loendurtüüp. String
tüüp võib omada väärtuseks mistahes literaalidest koosneva stringi; lekseemtüüp
võib omada mitmesuguseid leksikalisi ja semantilisi piiranguid, nagu:
Atribuutide tüübid
[54] AttType::= StringType | TokenizedType | EnumeratedType
[55] StringType::= 'CDATA'
[56] TokenizedType::= 'ID'[ VC: ID ]
[ VC: Iga elemenditüübi jaoks üks ID (One ID per Element Type) ]
[ VC: ID atribuudi vaikeväärtus (ID Attribute Default) ]
| 'IDREF'[ VC: IDREF ]
| 'IDREFS'[ VC: IDREF ]
| 'ENTITY'[ VC: Entity Name ]
| 'ENTITIES'[ VC: Entity Name ]
| 'NMTOKEN'[ VC: Name Token ]
| 'NMTOKENS'[ VC: Name Token ]
Kehtivuse piirang: ID
ID-väärtused peavad klappima produktsiooniga Name. Nimi ei tohi esineda rohkem
kui üks kord XML-dokumendis selle tüübi väärtusena; st ID väärtused peavad
üheselt identifitseerima elemente, mis on nad sünnitanud.
Kehtivuse piirang: Iga elemendi jaoks üks ID
ID-atribuudiga spetsifitseeritud elemendi tüüpe ei või olla rohkem kui üks.
Kehtivuse piirang: ID-atribuudi vaikevaärtus
ID-atribuudi jaoks peab olema deklareeritud vaikeväärtus konstruktsiooni
#IMPLIED või #REQUIRED abil.
Kehtivuse piirang: IDREF
Tüübi IDREF väärtused peavad klappima produktsiooniga Name ja tüübi IDREFS
väärtused peavad klappima produktsioonidega Names; iga Name peab klappima mõne
XML-dokumendi elemendi ID-atribuudi väärtusega; st IDREF väärtused peavad
klappima mõne ID-atribuudi väärtusega.
Kehtivuse piirang: üksuse nimi
Tüübi ENTITY väärtused peavad klappima produktsiooniga Name, tüübi ENTITIES
väärtused peavad klappima Names; iga Name peab klappima DTDs deklareeritud
parsimata üksuse (unparsed entity) nimega.
Kehtivuse piirang: nime lekseem
Tüübi NMTOKEN väärtused peavad klappima produktsiooniga Nmtoken; tüübi NMTOKENS
väärtused peavad klappima produktsiooniga Nmtokens .
Loenduratribuudid võivad võtta ühe väärtuse, mis on deklaratsiooni väärtuste
loetelus ette nähtud. Loendurtüüpe on kaks:
Loenduratribuudi tüübid
[57] EnumeratedType::= NotationType | Enumeration
[58] NotationType::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S?
')'[ VC: Notatsiooni atribuudid (Notation Attributes) ]
[59] Enumeration::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'[ VC:
Numeratsioon (Enumeration) ]
NOTATION atribuut identifitseerib notatsiooni (notation), mis on deklareeritud
DTDs koos süsteemi ja/või avaliku identifikaatoriga, mida kasutatakse selle
elemendi interpreteerimisel, millele atribuut on lisatud.
Kehtivuse piirang: notatsiooni atribuudid
Selle tüübi väärtused peavad klappima ühega deklaratsiooni lülitatud
notatsiooni (notation) nimega; kõik notatsiooni nimed deklaratsioonis peavad
olema deklareeritud.
Kehtivuse piirang: Loendamine
Seda tüüpi väärtused peavad klappima ühega deklaratsioonis toodud lekseemiga
Nmtoken.
Risttöödeldavuseks (for interoperability) ei tohi sama lekseem Nmtoken
esineda rohkem kui üks kord üksikelemendi tüübi loenduratribuudi tüübis.
3.3.2 Atribuutide vaikeväärtused
Atribuudi deklaratsioon (attribute declaration) näeb ette informatsiooni
esitamise selle kohta, kas atribuudi olemasolu on nõutav ja kui ei ole nõutav,
siis selle, kidas XML protsessor peab reageerima situatsioonile, kus dokumendis
puudub deklareeritud atribuut.
Atribuudi vaikeväärtus
[60] DefaultDecl::= '#REQUIRED' | '#IMPLIED'
| (('#FIXED' S)? AttValue)[ VC: Kohustuslik atribuut (Required
Attribute) ]
[ VC: Seaduslik atribuut vaikimisi (Attribute Default Legal) ]
[ WFC: Märgi < puudumine atribuudi väärtuses (No < in Attribute
Values) ]
[ VC: Fikseeritud atribuut vaikimisi (Fixed Attribute Default) ]
REQUIRED atribuudi deklaratsioonis tähendab, et atribuut peab alati esinema,
#IMPLIED, et vaikeväärtust pole ette nähtud. Kui deklaratsioonis ei ole ei
#REQUIRED ega #IMPLIED, siis AttValue väärtus sisaldab deklareeritud
vaikeväärtust; võtmesõna #FIXED sedastab, et atribuudil peab alati olema
vaikeväärtus. Kui vaikeväärtus on defineeritud ja XML-protsessor kohtab vahele
jäetud atribuuti, peab ta käituma nagu atribuut eksisteeriks oma deklareeritud
vaikevaärtusega.
Kehtivuse piirang: Kohustuslik atribuut
Kui vaikedeklaratsioon on võtmesõna #REQUIRED, siis atribuudiloetelu
deklaratsioonis peab atribuut olema spetsifitseeritud kõigi selle tüübi
elementide jaoks.
Kehtivuse piirang: seaduspärane atribuut vaikimisi
Deklareeritud vaikeväärtus peab järgima deklareeritud atribuudi tüübi
leksikaalseid piiranguid.
Kehtivisuse piirang: fikseeritud atribuut vaikimisi
Kui atribuudil on vaikeväärtus defineeritud võtmesõnaga #FIXED, selle
atribuudi eksemplarid peavad klappima vaikeväärtusega.
Atribuutloetelu deklaratsiooni näited:
3.3.3 Atribuudi väärtuste normaliseerimine
Enne atribuudi väärtuse üleandmist rakendusele või enne valideerimist, peab
XML-protsessor seda normaliseerima järgmiselt
märgiviit töödeldakse viidatava märgi lisamisega atribuudi väärtusele
üksuseviit töödeldakse üksuse asendusteksti rekursiivse töötlemise teel
tühiruumi märk (#x20, #xD, #xA, #x9) töödeldakse #x20 lisamisega
normaliseeritud väärtusele, välja arvatud juhul kui üksik #x20 on lisatud
jadale "#xD#xA", mis on osa parsitud välisüksusest, või parsitud siseüksuse
literaalüksus
ülejäänud märgid töödeldakse nendele normaliseeritud väärtuse lisamisega
Kui deklareeritud väärtus ei ole CDATA, siis peab XML-protsessor normaliseeritud
atribuudi väärtust edasi töötlema, eemaldama kõik tühikumärgid (#20) atribuudi
väärtuse algusest ja lõpust ja asendama tühikujadad (#x20) ühe tühikumärgiga
(#x20).
Kõiki deklareerimata atribuute peab käsitlema mittevalideeriva parseri poolt
kui deklareeritud CDATA-sektsiooni.
3.4 Tingimuslikud sektsioonid
Tingimuslikud sektsioonid on välise alamhulga dokumendi tüübi (document type
declaration external subset) portsjonid, mis on DTDl baseeruvusse loogilisse
struktuuri kas lülitatud sisse, või välja.
Tingimuslikud sektsioonid
[61] conditionalSect::= includeSect | ignoreSect
[62] includeSect::= ''
[63] ignoreSect::= ''
[64] ignoreSectContents::=Ignore (''
Ignore)*
[65] Ignore::= Char* - (Char* ('') Char*)
Analoogselt sisemistele ja välistele DTD alamhulkadele, võib tingimuslik
sektsioon sisaldada ühte või enamat terviklikku deklaratsiooni, kommentaare,
töötluseeskirju, sisestatud tingimuslikke sektsioone, mis on kokku segatud
tühiruumi märkidega.
Kui tingimusliku sektsiooni võtmesõnaks on INCLUDE, siis on tingimusliku
sektsiooni sisuks DTD osa. Kui tingimusliku sektsiooni võtmesõnaks on IGNORE,
siis tingimusliku sektsiooni osaks pole loogikaliselt DTD osa. Märgime, et
usaldusväärseks analüüsiks peab isegi ignoreeritud tingimusliku sektsiooni sisu
loetama, et avastada sisestatud tingimuslikke sektsioone ja kindlustama, et
kaugeima (ignoreeritud) tingimusliku sektsiooni lõpp oleks korrektselt kindlaks
tehtud. Kui tingimuslik sektsioon võtmesõnaga INCLUDE esineb laiemas
tingimuslikus sektsioonis võtmesõnaga IGNORE, ignoreeritakse mõlemaid nii
välist kui ka sisemist tingimuslikku sektsiooni.
Kui tingimusliku sektsiooni võtmesõnaks on parameeterüksuse viit, siis
parameeterüksus peab olema asendatud tema sisuga enne kui protsessor otsustab
kas tingimuslik sektsioon lülitada sisse või ignoreerida teda.
Näide:
]]>
]]>
4. Füüsiline struktuur
XML dokument võib sisaldada ühte või mitut säilituskirjet. Neid kutsutakse
üksusteks; neil kõigil on sisu ja nad kõik on (välja arvatud dokumendiüksus,
vaata allpool, ja väline DTD (external DTD subset )) identifitseeritud nimega.
Igal XML-dokumendil on üks üksus, mida kutsutakse dokumendiüksuseks (document
entity), mis on XML-protsessori (XML processor) jaoks stardipunktiks ja mis
võib sisaldada kogu dokumendi.
Üksused võivad olla kas parsitud või parsimata.Parsitud üksuste sisule
viidatakse nagu tema asendustekstile (replacement textreplacement text); seda
teksti (text) käsitletakse dokumendi lahutamatu osana.
Parsimata üksus on ressurss, mille sisuks võib ja võib ka mitte olla, tekst
(text) ja kui ta on tekst, siis ta võib olla mitte XML-tekst. Igal parsimata
üksusel on temaga assotsieeruv notatsioon (notation), mis on identifitseeritav
nimega. XML ei kitsenda parsimata üksuste sisu, välja arvatud nõue, et
XML-protsessor teeb üksuste identifikaatorid ja notatsiooni kättesaadavaks
rakendusele.
Parsitud üksused kutsutakse välja kasutades üksuseviita; parsimata üksused
atribuutide ENTITY või ENTITIES väärtustes esitatud nimede järgi.
Üldüksused on dokumendi sisus kasutatavad üksused. Selles spetsifikatsioonis on
üldüksustele mõnikord viidatud kvalifitseerimata terminiga üksus (entity), seda
juhul kui see ei tekita kahemõttelisust. Parameeterüksused on parsitud üksused
kasutamiseks DTDs. Need kaks üksuse tüüpi kasutavad erinevas vormis viitamist ja
tuvastatakse erinevates kontekstides. Liiatigi haaravad nad erinevad nimeruumid;
sama nimega parameeterüksus ja üldüksus on kaks eri üksust.
4.1 Märgi- ja üksuseviidad
Märgiviit viitab ISO/IEC 10646 märgistiku erimärgile, näiteks sellisele, mis
pole vahetult kättesaadav olemasolevatest sisendseadmetest.
Märgiviit
[66] CharRef::= '' [0-9]+ ';'
| '' [0-9a-fA-F]+ ';'[ WFC: Õige märk (Legal Character) ]
Trimmisuse kitsendus: Lubatavad märgid
Märgiviida poolt viidatavad märgid peavad klappima produktsiooniga Char.
Kui märgiviit algab jadaga "", numbrid ja tähed kuni lõpetava märgini ;
moodustavad ISO/IEC 10646 märgi kuueteistkümnesüsteemse esituse. Kui ta algab
märgijadaga "", siis kümnendarvud kuni lõpetava märgini ; moodustavad märgi
kümnendsüsteemis esituse.
Üksuseviiit viitab nimega üksuse sisule. Viidad parsitud üldüksustele kasutavad
eraldajatena märke ampersand (&) ja semikoolon (;). Parameeterüksuse viidad
kasutavad eraldajatena protsendimärki (%) ja semikolonit (;).
Üksuseviit
[67] Reference::= EntityRef | CharRef
[68] EntityRef::= '&' Name ';'[ WFC: Entity Declared ]
[ VC: Entity Declared ]
[ WFC: Parsed Entity ]
[ WFC: No Recursion ]
[69] PEReference::= '%' Name ';'[ VC: Entity Declared ]
[ WFC: No Recursion ]
[ WFC: In DTD ]
Trimmisuse piirang: üksuse deklareeritus
Dokumendis täiesti ilma DTDta, dokumendis ainult sisemise DTD alamhulgaga, mis
ei sisalda parameeterüksuse viita, või dokumendis parameetriga
"standalone='yes'", peab üksuse viidas toodud Name klappima (match), antuga
üksuse deklaratsioonis (entity declaration), välja arvatud asjaolu, et trimmis
dokumendis pole vajadust deklareerida järgmisi üksusi: amp, lt, gt, apos, quot.
Parameeterüksuse viida deklaratsioon peab eelnema mistahes temale suunatud
viidale. Analoogselt peab üldüksuse viida deklaratsioon eelnema mistahes temale
suunatud viidale, mis on toodud atribuutloetelu deklaratsiooni vaikeväärtuses.
Märgime et kui üksused on deklareeritud välises alamhulgas või välises
parameeterüksuses, ei ole mittesiduv protsessor kohustatud (not obligated to)
nende deklaratsioone lugema ja töötlema, trimmisuse piirang standalone='yes'
toob kaasa üksuse deklareerituse nõude.
Kehtivuse piirang: üksuse deklareeritus
Dokumendis, millel on väline alamhulk või väline parameeterüksus koos määranguga
"standalone='no'", peab üksusviidas ette antud Name klappima (match ) sellega,
mis on antud üksuse deklaratsioonis (entity declaration). Risttöödeldavuseks
peab kehtivates dokumentides olema deklareeritud üksused amp, lt, gt, apos,
quot, kujul nagu on spetsifitseeritud jaotises “4.6 Eeldefineeritud üksused".
Parameeterüksuse deklaratsioon peab eelnema mistahes temale suunatud viidale.
Analoogselt peab üldüksuse deklaratsioon eelnema mistahes temale suunatud
viidale, mis asub atribuudiloetelu deklaratsiooni vaikeväärtuses.
.
Trimmisuse piirang: Parsitud üksus
Üksuseviit ei tohi sisaldada parsimata üksuse (unparsed entity) nime. Parsimata
üksustele võib viidata ainult atribuutide väärtustes (attribute values), mis on
deklareeritud tüübina ENTITY või ENTITIES.
Trimmisuse piirang: rekursiivsuse keeld
Analüüsimata üksus ei tohi sisaldada ei otsesel ega kaudsel moel rekursiivset
viita iseendale.
Trimmisuse piirang: DTDs
Parameeterüksuse viit saab esineda ainult DTD piires.
Näited märgi- ja üksuseviitadest:
Type less-than (<) to save options.
This document was prepared on &docdate; and
is classified &security-level;.
Näide parameeterüksuse viidast:
%ISOLat2;
4.2 Üksuse deklaratsioonid
Üksused on deklareeritud alljärgnevalt:
Üksuse deklaratsioon
[70] EntityDecl::= GEDecl | PEDecl
[71] GEDecl::= ''
[72] PEDecl::= ''
[73] EntityDef::= EntityValue | (ExternalIDNDataDecl?)
[74] PEDef::= EntityValue | ExternalID
Name identifitseerib üksuse üksuseviidas (entity reference) või parsimata üksuse
korral atribuudi ENTITY või ENTITIES väärtuses. Kui üks ja seesama üksus on
deklareeritud rohkem kui üks kord, siis on siduv esimene deklaratsioon, kasutaja
valikul võib XML-protsessor väljastada mitmekordselt deklareeritud üksuse korral
hoiatuse.
4.2.1 Siseüksused
Kui üksuse definitsiooniks on EntityValue, siis nimetatakse defineeritud üksust
siseüksuseks. Ta pole eraldiasuv füüsiline säilitatav objekt ja üksuse sisu on
esitatud deklaratsioonis. Märgime, et mõne üksuse- ja märgiviida töötlemine
literaalüksuse väärtuses (literal entity value), võib nõuda õige asendusteksti
( replacement text) produktsiooni: vaata "4.5 Siseüksuse asendusteksti
konstruktsioon".
Siseüksus on parsitud üksus (parsed entity).
Näide siseüksuse deklaratsioonist:
4.2.2 Välisüksused
Kui üksus ei ole sisemine, siis on ta välisüksus, mis on deklareeritud
alljärgnevalt:
External Entity Declaration
[75] ExternalID::= 'SYSTEM' S SystemLiteral
| 'PUBLIC' S PubidLiteralSSystemLiteral
[76] NDataDecl::= S 'NDATA' SName[ VC: Notatsiooni deklareeritus
(Notation Declared) ]
Kui deklaratsioonis on olemas NDataDecl, siis on ta parsitud üldüksus (unparsed
entity); vastasel juhul on ta parsitud üksus.
Kehtivuse piirang: Notatsiooni deklareeritus
Name peab klappima notatsioonis (notation) deklareeritud nimega.
SystemLiteral on üksuse süsteemne identifikaator. Ta on URI, mida võib kasutada
üksuse leidmiseks. Märgime, et sageli koos URIga kasutatav numbrimärk (#) ja
fragmendi identifikaator ei ole formaalselt iseendast URI osa, XML-protsessor
võib signaliseerida veast, kui süsteemi identifikaatori osana on esitatud
fragmendi identifikaator. Kui väljaspool seda spetsifikatsiooni (näiteks
spetsiaalse DTDga defineeritud XML-elemendi tüüp või spetsiaalse rakenduse
spetsifikatsiooniga defineeritud töötluseeskiri) skoopi ei ole ette nähtud
teisiti, siis on URI suhteline selle ressursi asukoha suhtes, milles üksuse
deklaratsioon paikneb. URI võib järelikult olla suhteline dokumendiüksuse
(document entity) suhtes, välist DTD alamhulka (external DTD subset) sisaldava
üksuse suhtes, või mõne teise välise parameeterüksuse (external DTD subset)
suhtes.
XML-protsessor peab mitte-ASCII märke URIs käsitlema märgi esitamisega ühe või
kahe baidiga UTF-8 koodina ja seejärel varjestama need baidid URI
varjestamismehhanismiga (näiteks konverteerides kõik baidid kujule %HH, kus HH
on baidi väärtuse esitus kuueteistkümnendsüsteemis).
Väline identifikaator võib lisaks süsteemsele identifikaatorile sisaldada
avalikku identifikaatorit. Otsides üksuse sisu võib XML-protsessor püüda
kasutada avalikku identifikaatorit alternatiivse URI genereerimiseks. Kui
protsessoril see ebaõnnestub, peab ta kasutama süsteemses literaalis
spetsifitseeritud URI. Enne klapitamise püüdu peab kõikide avaliku
identifikaatori tühiruumi stringid normaliseeritama ühebaidiseks märgiks (#x20),
tühiruum alguses ja lõpus tuleb kustutada.
Välisüksuse deklaratsioonide näited:
4.3 Parsitud üksused
4.3.1 Teksti deklaratsioon
Kõik välisüksused võivad alata teksti deklaratsiooniga.
Teksti deklaratsioon
[77] TextDecl::= ''
Teksti deklaratsioon peab olema esitatud literaalina, mitte viidana parsitud
üksusele. Teksti deklaratsioon ei saa paikneda mitte mingis muus positsioonis
peale parsitud välisüksuse alguse.
4.3.2 Parsitud trimmis üksused
Dokumendi üksus on trimmis kui ta klapib produktsiooniga document. Väline
parsitud üldüksus on trimmis kui ta kapib produktsiooniga extParsedEnt. Väline
parameeterüksus on trimmis kui ta klapib produktsiooniga extPE.
Trimmis parsitud välisüksused
[78] extParsedEnt::= TextDecl? content
[79] extPE::= TextDecl? extSubsetDecl
Parsitud üldine siseüksus on trimmis, kui ta asendustekst klapib produktsiooniga
content. Kõik sisemised parameeterüksused on trimmis definitsiooni kohaselt.
Trimmisus üksustes on selle asjaolu tagajärg, et XML-dokumendi loogilised ja
füüsilised struktuurid on õigesti sisestatud (nested); algusmärgis (start-tag),
lõpumärgis (end-tag), tühielemendi märgis (empty-element tag), element
(element), kommentaar (comment), töötluseeskiri (processing instruction),
märgiviit (character reference) ja üksuseviit (entity reference) ei saa alata
ühes üksuses ja lõppeda teises.
4.3.3 Märkide kodeerimine üksustes
Iga XML-dokumendi parsitud välisüksus võib kasutada oma märkide kodeerimise
jaoks erinevat moodust. Kõik XML-protsessorid peavad olema võimelised lugeda
UTF-8 ja UTF-16 üksuseid.
UTF-16 koodis üksused peavad algama märgiga “Byte Order Mark”, mis on
kirjeldatud standardis ISO/IEC 10646 Annex E and Unicode Appendix B (märk NULL
LAIUSEGA MITTE KATKESTAV TÜHIK, #xFEFF). See märk on kodeerimise signatuur,
mitte osa märgistusest või XML-dokumendi märkandmetest. XML-protsessorid peavad
olema võimelised kasutama seda märki UTF-8 ja UTF-16 dokumentide
eristamiseks.
Kuigi on nõutav, et XML-protsessor peab olema võimeline lugeda ainult UTF-8 ja
UTF-16 kodeerimissüsteemis üksusi, on tunnustatud teiste kodeerimissüsteemide
kasutamist ja XML protsessortitel võib soovitada lugeda neid kasutatavaid
üksusi. Kodeerimissüsteeme UTF-8 ja UTF-16 mitte kasutavad parsitud üksused
peavad algama teksti deklaratsiooniga (text declaration), mis sisaldab
kodeerimise deklaratsiooni:
Kodeerimise deklaratsioon
[80] EncodingDecl::= S 'encoding' Eq ('"' EncName '"' | "'" EncName
"'" )
[81] EncName::= [A-Za-z] ([A-Za-z0-9._] | '-')*/* Kodeerimise nimi
sisaldab ainult ladina tähti */
Dokumendiüksuses (document entity) on kodeerimise deklaratsioon osa XML
deklaratsioonist (XML declaration. EncName on kasutatava kodeerimissüsteemi
nimi.
Kodeerimise deklaratsioonis peab väärtusi "UTF-8", "UTF-16", "ISO-10646-UCS-2"
ja "ISO-10646-UCS-4" kasutama Unicode / ISO/IEC 10646 erinevate
kodeerimissüsteemide ja transformeerimiste jaoks, väärtusi "ISO-8859-1",
"ISO-8859-2", ... "ISO-8859-9" peab kasutatama ISO 8859 osade jaoks, ja
väärtusi "ISO-2022-JP", "Shift_JIS" ja "EUC-JP" peab kasutama JIS X-0208-1997
kodeerimisvormide jaoks. XML protsessorid võivad tuvastada teisi
kodeerimismooduseid; on soovitav, et märkide kodeerimine oleks registreeritud (
märgistikuna) Internet Assigned Numbers Authority [IANA] poolt, ülaltoodud
loetelust erinevad peavad olema viidatud kasutades nende registreeritud nimesid.
Märgime, et need registreeritud nimed on defineeritud tõsttundetuna, nii et kui
protsessorid tahavad neid klapitada, peavad nad seda tegema tõsttundetul moel.
Välise transpordi protokolli (näiteks HTTP või MIME) poolt üleantud andmetes
informatsiooni puudumine on viga (error) üksuse korral, mis sisaldab XML
protsessorile esitamiseks kodeerimise deklaratsiooni, kuid on kodeeritud
erinevalt deklareeritust; kodeerimise deklaratsiooni korral, kui ta paikneb
mujal kui välise üksuse alguses; üksuse korral, mis ei alga ei baidiga Byte
Order Mark ega kodeerimise deklaratsiooni kasutamaks UTF-8st erinevat
kodeerimist. Märgime, et kuna ASCII on UTF-8 alamhulk, tavalised ASCII üksused
ei vaja otseselt kodeerimise deklaratsiooni.
On hukutav viga (fatal error) kui XML-protsessor põrkub üksusega, mille
kodeerimist ta pole võimeline töötlema.
Kodeerimisdeklaratsioonide näited:
4.4 XML Üksuste ja viitade protsessoripoolne käsitlemine
Alltoodud tabel summeerib kontekstid, milles märgiviidad, üksuseviidad ja
parsimata üksuste sissekutsumised võivad esineda ja XML- protsessori (XML
processor) nõutavat käitumist igal juhtumil. Tekstid kõige vasakpoolsemas tulbas
kirjeldavad vaadeldavat protsessi:
Viit kontekstis
on viit mistahes kohas elemendis peale algusmärgist (start-tag) ja
enne lõpumärgist (end-tag); on vastavuses mitteterminaliga content .
Viit atribuudi väärtuses
on kas viit algusmärgise ( start-tag) atribuudi väärtuses, või
vaikeväärtus atribuudi deklaratsioonis ( attribute declaration); on vastavuses
mitteterminaliga AttValue.
Esineb atribuudi väärtusena
on nimena (Name), mite viidana, ilmub kas tüübina ENTITY deklareeritud
atribuudi väärtusena, või üheks tühikutega eraldatud lekseemidest tüübina
ENTITIE deklareeritud atribuudi väärtuses.
Viit üksuse väärtuses
on viit üksuse deklaratsioonis parameeterüksuse või sisemise üksuse
literaalses üksuse väärtuses (literal entity value); on vastavuses
mitteterminaliga EntityValue.
Viit DTDs
on viit kas sisemises või välimises DTD alamhulgas, kuid väljaspool
EntityValue või AttValue.
Üksuse tüüpMärk
ParameeterSisemine
ÜldineVäline
Parsitud
ÜldineParsimata
Viit sisusTuvastamata
Not recognizedKaasatud
IncludedKaasatud valideerimisel
Included if validatingKeelatud
ForbiddenKaasatud
Included
Viit atribuudi väärtusesTuvastamata
Not recognizedKaasatud literaalis
Included in literalKeelatud
ForbiddenKeelatud
ForbiddenKaasatud
Included
Esineb atribuudi väärtusenaTuvastamata
Not recognizedKeelatud
ForbiddenKeelatud
ForbiddenTeadistama
NotifyTuvastamata
Not recognized
Viit üksuse väärtusesKaasatud literaalis
Included in literalEdastatud
BypassedEdastatud
BypassedKeelatud
ForbiddenKaasatud
Included
Viit DTDsKaasatud nagu PE
Included as PEKeelatud
ForbiddenKeelatud
ForbiddenKeelatud
ForbiddenKeelatud
Forbidden
4.4.1 Tuvastamata - Not Recognized
Väljaspool DTDd, ei oma märk % erilist tähendust; niisiis see, mis on DTDs
parameeterüksuse viit, jääb tuvastamata sisus (content) märgistusena.
Analoogselt jäävad tuvastamata analüüsimata üksuste nimed, välja arvatud kui nad
ilmuvad sobivalt deklareeritud atribuutide väärtuses.
4.4.2 Kaasatud - Included
Üksus on kaasatud kui tema asendustekst (replacement text) on üles leitud ja
töödeldud samas kohas, kus asub tema viit, just nagu oleks ta dokumendi osa
viida tuvastamise paigas. Asendustekst võib sisaldada nii märkandmeid character
data (character data) ja (välja arvatud parameeterüksused) märgistust (markup),
mis peab olema tuvastatud tavalisel moel, välja arvatud see, et nende üksuste
asendusteksti, mida kasutatakse märgistuse eraldajate paokoodina (üksused amp,
lt, gt, apos, quot) käsitletakse alati andmetena. (String "AT&T;" kujuneb
stringiks "AT&T;" ja allesjäänud ampersandi ei tuvastata üksusviida
eraldajana.) Märgiviit on kaasatud, kui osutatud märk on töödeldud temale
viitamise kohas.
4.4.3 Kaasatud valdeerimisel - Included If Validating
Kui XML protsessor tuvastab viida parsitud üksusele, siis vastavalt dokumendi
valideerimise (validate) korrale, peab protsessor kaasama (include) tema
asendusteksti. Välisüksuse korral, kui protsessor ei püüa XML-dokumenti
valideerida, võib (may), kuid ei pea, protsessor kaasata üksuste
asendusteksti. Kui mittevalideeriv parser ei kaasa asendusteksti, siis peab ta
teatama rakendusele, et ta tuvastas üksuse, kuid ei kaasanud teda.
See reegel põhineb äratundmisel, et SGML ja XML üksuste poolt ette nähtud
automaatse kaasamise mehhanism, mis projekteeriti eeskätt toetamaks andmete
sisestamise modulaarsust ja ei tarvitse tingimata sobida teistele rakendustele,
eriti dokumendi lehitsemisel. Nii näiteks võivad brauserid kohates parsitud
välisviita, valida üksuse visuaalse näitamise tagamise ja otsida ta vajadusel
ainult kuvamiseks.
4.4.4 Keelatud - Forbidden
Järgnevad situatsioonid on keelatud ja tekitavad hukutavad (fatal) vead:
viitda esinemine parsimata üksusele (unparsed entity).
mistahes märgi või üldüksuse viida esinemine DTDs, välja arvatud EntityValue
ja AttValue.
viit välisüksusele atribuudi väärtuses.
4.4.5 Kaasatud literaalis - Included in Literal
Kui üksuse viit (entity reference) on atribuudi väärtuses, või parameeterüksuse
viit on literaalüksuse väärtuses, siis tema asendustekst (replacement text)
töödeldakse samas kohas, kus asub tema viit, just nagu oleks ta dokumendi osa
kohas, kus viit tuvastati, välja arvatud, et asendustekstis koheldakse ülakoma
ja jutumärki tavalise andmemärgina ja nad ei lõpeta literaali. Näiteks on
järgnev trimmis:
sellal kui järgnev ei ole:
'
[83] PublicID::= 'PUBLIC' S PubidLiteral
XML-protsessorid peavad rakendustele teatama mistahes deklareeritud ja
atribuudi väärtuses, atribuudi definitsioonis või üksuse deklaratsioonis
viidatud märkuse nime ja välised identifikaatorid. Lisaks võivad nad lahendada
viidad välise identifikaatori süsteemi identifikaatorile (system identifier),
faili nimele, või muule informatsioonile, mida vajatakse, et lubada rakendusel
välja kutsuda märkuses kirjeldatud andmete jaoks protsessor. (See ei ole viga,
ükskõik kuidas XML-dokumentide jaoks deklareerida ja viidata notatsioonile,
mille jaoks pole süsteemis, kus XML-protsessor või rakendus töötab,
notatsioonispetsiifiline rakendus kättesaadav.)
4.8 Dokumentüksus
Dokumentüksus on üksuse puu juureks (root ) ja lähtepunktiks XML-protsessorile
(XML processor). Käesolev spetsifikatsioon ei määra, kuidas XML protsessor leiab
dokumentüksuse; erinevalt teistest üksustest pole dokumentüksusel nime ja võib
täiesti vabalt olla protsessori lähtevoos üleüldse ilma mingi
identifitseerimisetal.
5. Kohaldamine
5.1 Valideerivad ja mittevalideerivad protsessorid
Kohaldavad XML protsessorid (XML processors ) jagunevad kahte klassi:
valideerivad ja mittevalideerivad.
Valideerivad ja mittevalideerivad protsessorid peavad ühteviisi raporteerima
dokumentüksuse (document entity) ja mistahes teise parsitud üksuste ( parsed
entities) lugemisel käesoleva spetsifikatsiooni trimmisuse piirangute
rikkumistest.
Valideerivad protsessorid peavad raporteerima DTD deklaratsioonides väljendatud
piirangute rikkumistest ja käesolevas spetsifikatsioonis toodud kehtivuse
piirangute teostamise ebaõnnestumistest. Selle täitmiseks peavad valideerivad
XML-protsessorid lugema ja töötlema kogu DTD ja kõik dokumendi poolt viidatud
parsitud välisüksused.
Mittevalideerivatel protsessoritel on nõutav kontrollida ainult dokumentüksuse
(document entity) trimmisust, kaasa arvatud kogu sisemine DTD alamhulk. Kuna
neil pole nõutav kontrollida dokumendi kehtivust, on neil nõutav töödelda kõik
sisemisest DTD alamhulgast sisseloetud deklaratsioonid ja deklaratsioonid igas
sisseloetud parameeterüksuses, kuni selle parameeterüksuse viidani, mida nad ei
loe; see tähendab, et nad peavad kasutama nendes deklaratsioonides peituvat
teavet atribuutide väärtuste normaliseerimiseks (normalize), kaasama (
include) sisemiste üksuste asendustekstid ja atribuutide vaikeväärtused
(default attribute values). Nad ei pea töötlema (process) üksuse deklaratsioone
(entity declarations), või atribuudiloetelu deklaratsioone (attribute-list
declarations), milleni jõutakse peale mitteloetava parameeterüksuse viita, kuna
üksus võib sisaldada ülekirjutatavaid deklaratsioone.
5.2 XML-protsessorite kasutamine
Valideerivate XML-protsessorite käitumine väga täpselt ette määratav; ta peab
lugema iga dokumendi osakese ja raporteerima kõigist trimmisuse ja kehtivuse
rikkumistest. Mittevalideerivalt protsessorilt nõutakse vähem; tal pole vaja
lugeda dokumentüksusest erinevaid dokumendiosasid. XML-protsessori kasutajate
jaoks võivad olla olulised kaks efekti:
Teatavad trimmisuse vead, eriti need, mis nõuavad väliste üksuste lugemist,
võivad mitte olla avastatud mittevalideeriva protsessori poolt. Näited
haaravad kitsendusi mõistetes “deklareeritud üksus” (Entity Declared),
“analüüsitud üksus” (Parsed Entity) ja “mitterekursiivsus” (No Recursion),
samuti ka mõned juhud, mis on kirjeldatud mõistes “keelatud “ ( forbidden)
jaotises “4.4.Üksuste ja viidete trakteerimine XML protsessori poolt” ("4.4
Üksuste ja viitade protsessoripoolne käsitlemine").
Protsessori poolt rakendusele üleantav info võib varieeruda sõltuvalt sellest,
kas protsessor loeb parameeterüksusi ja väliseid üksuseid. Mittevalideeriv
protsessor võib näiteks mitte normaliseerida (normalize) atribuutide väärtusi,
mitte kaasata ( include) väliste üksuste asendustekste, mitte asendada
atribuutide vaikeväärtusi (default attribute values), tema käitumine sõltub
sellest, kas ta on lugenud väliste üksuste või parameeterüksuste
deklaratsioone.
Erinevate XML-protsessorite vahel risttöötlemise usaldatavuse maksimeerimiseks
ei tohiks mittevalideerivaid protsessoreid kasutavad rakendused usaldada
selliste protsessorite mistahes mittenõutavat käitumist Rakendused, mis nõuavad
selliseid omadusi nagu atribuutide vaikeväärtuste kasutamine või välistes
üksustes deklareeritud sisemiste üksuste kasutamine, peaksid kasutama
valideerivaid XML-protsessoreid.
6. Notatsioon
XML formaalne grammatika on käesolevas spetsifikatsioonis esitatud kasutades
lihtsat laiendatud Backus-Naur (Extended Backus-Naur Form - EBNF) notatsiooni.
Iga reegel grammatikas defineerib ühe sümboli vormis
symbol ::= expression
Sümbolid on kirjutatud suure algustähega, kui nad on defineeritud
regulaaravaldisega, vastasel juhul väiketähega. Literaalstringid on
jutumärkides.
Reegli parempoolses osas avaldise sees kasutatakse stringi võrdlemiseks ühe või
mitme märgiga järgmist avaldist:
#xN
kus N on kuueteistkümnend koodis täisarv, avaldis klapib märgiga ISO/IEC
10646 märgistikus, mille kanoonilise (UCS-4) koodi väärtus, kui ta on
interpreteeritud märgita kahendarvuna, omab näidatud väärtust. Juhtnullide arv
vormis #xN on tähtsusetu, juhtnullide arv vastava koodi väärtuses määratakse
märkide kodeerimisel ja pole oluline XML jaoks.
[a-zA-Z], [#xN-#xN]
klapib mistahes märgiga (character), mille väärtus on näidatud vahemikus(es)
(kaasa arvatud näidatud väärtused).
[^a-z], [^#xN-#xN]
klapib mistahes märgiga (character), mille väärtus on väljaspool näidatud
piire.
[^abc], [^#xN#xN#xN]
klapib mistahes märgiga (character), mille väärtus ei ole antud märkide
hulgas.
"string"
klapib literaalstringiga, klapitamine (matching) toimub jutumärkide sees
olevaga.
'string'
klapib literaalstringiga, klapitamine (matching) toimub ülakomade sees
olevaga.
Neid sümboleid võib kombineerida palju komplekssemate mallide võrdlemiseks nagu
toodud alljärgnevas, kus A ja B esitavad lihtsaid avaldisi:
(expression)
avaldist käsitletakse tervikuna ja teda võib kombineerida nagu kirjeldatud
selles loetelus.
A?
klapib avaldisega A või mitte millegagi; mittekohustuslik A.
A B
klapib avaldisega A millele järgneb B.
A | B
klapib Aga või Bga, kuid mitte mõlemaga.
A - B
klapib mistahes stringiga, mis klapib avaldisega A , kuid ei klapi avaldisega
B.
A+
klapib ühe või enama kordse avaldisega A.
A*
klapib null või enam korduva avaldisega A.
Ülejäänud produktsioonides kasutatavad notatsioonid on:
/* ... */
kommentaar.
[ wfc: ... ]
trimmisuse piirang; ta identifitseerib nime kaudu produktsiooniga
assotsieeruvat piirangut trimmis (well-formed) dokumendile.
[ vc: ... ]
kehtivuse piirang; ta identifitseerib nime kaudu produktsiooniga
assotsieeruvat piirangut kehtivale ( valid) dokumendile.
Lisad
A. Viited
A.1 Normatiivsed viited
IANA
(Internet Assigned Numbers Authority) Official Names for Character Sets, ed.
Keld Simonsen et al. See
ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets.
IETF RFC 1766
IETF (Internet Engineering Task Force). RFC 1766: Tags for the Identification
of Languages, ed. H. Alvestrand. 1995.
ISO 639
(International Organization for Standardization). ISO 639:1988 (E). Code for
the representation of names of languages. [Geneva]: International Organization
for Standardization, 1988.
ISO 3166
(International Organization for Standardization). ISO 3166-1:1997 (E). Codes
for the representation of names of countries and their subdivisions -- Part 1:
Country codes [Geneva]: International Organization for Standardization, 1997.
ISO/IEC 10646
ISO (International Organization for Standardization). ISO/IEC 10646-1993 (E).
Information technology -- Universal Multiple-Octet Coded Character Set (UCS)
-- Part 1: Architecture and Basic Multilingual Plane. [Geneva]: International
Organization for Standardization, 1993 (plus amendments AM 1 through AM 7).
Unicode
The Unicode Consortium. The Unicode Standard, Version 2.0. Reading, Mass.:
Addison-Wesley Developers Press, 1996.
A.2 Muud viited
Aho/Ullman
Aho, Alfred V., Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles,
Techniques, and Tools. Reading: Addison-Wesley, 1986, rpt. corr. 1988.
Berners-Lee et al.
Berners-Lee, T., R. Fielding, and L. Masinter. Uniform Resource Identifiers
(URI): Generic Syntax and Semantics. 1997. (Work in progress; see updates to
RFC1738.)
Brüggemann-Klein
Brüggemann-Klein, Anne. Regular Expressions into Finite Automata. Extended
abstract in I. Simon, Hrsg., LATIN 1992, S. 97-98. Springer-Verlag, Berlin
1992. Full Version in Theoretical Computer Science 120: 197-213, 1993.
Brüggemann-Klein and Wood
Brüggemann-Klein, Anne, and Derick Wood. Deterministic Regular Languages.
Universität Freiburg, Institut für Informatik, Bericht 38, Oktober 1991.
Clark
James Clark. Comparison of SGML and XML. See
http://www.w3.org/TR/NOTE-sgml-xml-971215.
IETF RFC1738
IETF (Internet Engineering Task Force). RFC 1738: Uniform Resource Locators
(URL), ed. T. Berners-Lee, L. Masinter, M. McCahill. 1994.
IETF RFC1808
IETF (Internet Engineering Task Force). RFC 1808: Relative Uniform Resource
Locators, ed. R. Fielding. 1995.
IETF RFC2141
IETF (Internet Engineering Task Force). RFC 2141: URN Syntax, ed. R. Moats.
1997.
ISO 8879
ISO (International Organization for Standardization). ISO 8879:1986(E).
Information processing -- Text and Office Systems -- Standard Generalized
Markup Language (SGML). First edition -- 1986-10-15. [Geneva]: International
Organization for Standardization, 1986.
ISO/IEC 10744
ISO (International Organization for Standardization). ISO/IEC 10744-1992 (E).
Information technology -- Hypermedia/Time-based Structuring Language (HyTime).
[Geneva]: International Organization for Standardization, 1992. Extended
Facilities Annexe. [Geneva]: International Organization for Standardization,
1996.
B. Märgistike klassid
Järgnevad on Unicode standardis defineeritud märgistikud, märgid on
klassifitseeritud põhimärkide baasil (teiste hulgas sisaldavad nad Ladina
tähestiku tähti ilma diakriitikuteta), ideograafilisu marke ja kombineeritud
märke (Teiste hulgas sisaldab see klass kõige rohkem diakriitikuid); need
klassid on kombineeritud tähtede klassi formeerimiseks. Numbrid ja laiendused on
samuti eristatud.
Characters
[84] Letter::= BaseChar | Ideographic
[85] BaseChar::= [#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6]
| [#x00D8-#x00F6] | [#x00F8-#x00FF] | [#x0100-#x0131] |
[#x0134-#x013E] | [#x0141-#x0148] | [#x014A-#x017E] |
[#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] |
[#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386 |
[#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] |
[#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 |
[#x03E2-#x03F3] | [#x0401-#x040C] | [#x040E-#x044F] |
[#x0451-#x045C] | [#x045E-#x0481] | [#x0490-#x04C4] |
[#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] |
[#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 |
[#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] |
[#x0621-#x063A] | [#x0641-#x064A] | [#x0671-#x06B7] |
[#x06BA-#x06BE] | [#x06C0-#x06CE] | [#x06D0-#x06D3] | #x06D5 |
[#x06E5-#x06E6] | [#x0905-#x0939] | #x093D | [#x0958-#x0961] |
[#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8] |
[#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD] |
[#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] |
[#x0A0F-#x0A10] | [#x0A13-#x0A28] | [#x0A2A-#x0A30] |
[#x0A32-#x0A33] | [#x0A35-#x0A36] | [#x0A38-#x0A39] |
[#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] | [#x0A85-#x0A8B] |
#x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] | [#x0AAA-#x0AB0] |
[#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0 |
[#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] |
[#x0B2A-#x0B30] | [#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D |
[#x0B5C-#x0B5D] | [#x0B5F-#x0B61] | [#x0B85-#x0B8A] |
[#x0B8E-#x0B90] | [#x0B92-#x0B95] | [#x0B99-#x0B9A] | #x0B9C |
[#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | [#x0BA8-#x0BAA] |
[#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] |
[#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] |
[#x0C35-#x0C39] | [#x0C60-#x0C61] | [#x0C85-#x0C8C] |
[#x0C8E-#x0C90] | [#x0C92-#x0CA8] | [#x0CAA-#x0CB3] |
[#x0CB5-#x0CB9] | #x0CDE | [#x0CE0-#x0CE1] | [#x0D05-#x0D0C] |
[#x0D0E-#x0D10] | [#x0D12-#x0D28] | [#x0D2A-#x0D39] |
[#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | [#x0E32-#x0E33] |
[#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | [#x0E87-#x0E88] |
#x0E8A | #x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] |
[#x0EA1-#x0EA3] | #x0EA5 | #x0EA7 | [#x0EAA-#x0EAB] |
[#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3] | #x0EBD |
[#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69] |
[#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103] |
[#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112] |
#x113C | #x113E | #x1140 | #x114C | #x114E | #x1150 |
[#x1154-#x1155] | #x1159 | [#x115F-#x1161] | #x1163 | #x1165 |
#x1167 | #x1169 | [#x116D-#x116E] | [#x1172-#x1173] | #x1175 |
#x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | [#x11B7-#x11B8] |
#x11BA | [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 |
[#x1E00-#x1E9B] | [#x1EA0-#x1EF9] | [#x1F00-#x1F15] |
[#x1F18-#x1F1D] | [#x1F20-#x1F45] | [#x1F48-#x1F4D] |
[#x1F50-#x1F57] | #x1F59 | #x1F5B | #x1F5D | [#x1F5F-#x1F7D] |
[#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | [#x1FC2-#x1FC4] |
[#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] |
[#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 |
[#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] |
[#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3]
[86] Ideographic::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]
[87] CombiningChar::=[#x0300-#x0345] | [#x0360-#x0361] |
[#x0483-#x0486] | [#x0591-#x05A1] | [#x05A3-#x05B9] |
[#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 |
[#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] |
[#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] |
[#x0901-#x0903] | #x093C | [#x093E-#x094C] | #x094D |
[#x0951-#x0954] | [#x0962-#x0963] | [#x0981-#x0983] | #x09BC |
#x09BE | #x09BF | [#x09C0-#x09C4] | [#x09C7-#x09C8] |
[#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02 | #x0A3C |
#x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] |
[#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC |
[#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] |
[#x0B01-#x0B03] | #x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] |
[#x0B4B-#x0B4D] | [#x0B56-#x0B57] | [#x0B82-#x0B83] |
[#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | [#x0BCA-#x0BCD] | #x0BD7 |
[#x0C01-#x0C03] | [#x0C3E-#x0C44] | [#x0C46-#x0C48] |
[#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] |
[#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] |
[#x0CD5-#x0CD6] | [#x0D02-#x0D03] | [#x0D3E-#x0D43] |
[#x0D46-#x0D48] | [#x0D4A-#x0D4D] | #x0D57 | #x0E31 |
[#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | [#x0EB4-#x0EB9] |
[#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | #x0F35 |
#x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] |
[#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] |
[#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 |
[#x302A-#x302F] | #x3099 | #x309A
[88] Digit::= [#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] |
[#x0966-#x096F] | [#x09E6-#x09EF] | [#x0A66-#x0A6F] |
[#x0AE6-#x0AEF] | [#x0B66-#x0B6F] | [#x0BE7-#x0BEF] |
[#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F] |
[#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29]
[89] Extender::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46
| #x0EC6 | #x3005 | [#x3031-#x3035] | [#x309D-#x309E] |
[#x30FC-#x30FE]
Siin defineeritud märkide klassid on tuletatud Unicode märkide andmebaasist
järgmiselt:
Nime algusmärk peab olema üks kategooriatest Ll, Lu, Lo, Lt, Nl.
Nime algusmärgist erinevad märgid peavad olema üks kategooriatest Mc, Me, Mn,
Lm, või Nd.
Ühilduva piirkonna märgid (st märgikoodid, mis on suuremad kui #xF900 ja
väiksemad kui #xFFFE) ei ole lubatud XML nimedes.
Fonti või ühilduvat dekompositsiooni omavad märgid (st andmebaasi väljas 5
sellised, mis on koos “ühilduva vormindava märgiga” ("compatibility formatting
tag") – märgid väljas 5 algavana märgiga "<") ei ole lubatud.
Järgmisi märke käsitletakse pigem nime algusmärgina kui nime märgina, sest
rekvisiitide fail klassifitseerib nad alfabeetilisteks: [#x02BB-#x02C1],
#x0559, #x06E5, #x06E6.
Märgid #x20DD-#x20E0 on välja arvatud (kooskõlas Unicode, jaotis 5.14).
Märk #x00B7 on klassifitseeritud laiendina, sest nii identifitseerib seda
rekvisiitide loetelu.
Märk #x0387 on lisatud nimemärgina, sest #x00B7 on tema kanooniline
ekvivalent.
Märgid ':' ja '_' on lubatud nime algusmärkidena.
C. XML ja SGML (mittenormatiivne)
XML on projekteeritud SGML alamhulgana, iga kehtiv (valid) XML-dokument peab
olema ka vastav SGML-dokument. XML-dokumendi saavutamiseks vajalike SGML
lisapiirangute detailset võrdlust vaata [Clark].
D. Üksuseviitade ja märgiviitade laiendamine (mittenormatiivne)
See lisa sisaldab näiteid, mis illustreerivad üksuseviitade ja märgiviitade
tuvastamist ja laiendamist, nagu see on spetsifitseeritud jaotises “4.4 Üksuste
ja viitade käsitlemine XML-protsessori poolt ".
Kui DTD sisaldab deklaratsioone
An ampersand (&) may be escaped
numerically (&#38;) or with a general entity
(&).
" >
siis peab XML-protsessor tuvastama märgiviida, kui ta parsib üksuse
deklaratsiooni ja lahendama need enne järgneva stringi salvestamist üksuse
"example" väärtusena:
An ampersand (&) may be escaped
numerically (&) or with a general entity
(&).
Viit dokumendiüksusele "&example;" põhjustab teksti üleparsimise, mille jooksul
elemendi "p" algus- ja lõpumärgis tuvastatakse ja kolm viita tuvastatakse ja
laiendatakse, mille tulemusena on elemendi "p" sisu järgmine (kõik andmed, ilma
eraldajateta ja märgistuseta):
An ampersand (&) may be escaped
numerically (&) or with a general entity
(&).
Keerulisem näide illustreerib täielikult reegleid ja nende mõju. Järgnevas
näites on rea numbrid ainuüksi viitamiseks.
1
2
4
5 ' >
6 %xx;
7 ]>
8 This sample shows a &tricky; method.
See produtseerib järgneva:
reas 4, viit märgile 37 laiendatakse jalamaid ja parameeterüksus "xx"
salvestatakse sümbolite tabelis väärtusega "%zz;". Kuni asendustekst ei ole
reskaneeritud, on viit parameeterüksusele "zz" tuvastamata. (Ja see oleks
viga, kui ta oleks, sest "zz" pole veel deklareeritud).
märgiviit "<" reas 5 on laiendatud jalamaid ja ja parameeterüksus "zz"
salvestatakse asendustekstina "", mis on
trimmis üksuse deklaratsioon.
viit "xx" reas 6 tuvastatakse ja "xx" asendustekst (nimelt "%zz;")
analüüsitakse. Viit "zz" tuvastatakse tema tagastamisel ja tema asendustekst
("") parsitakse. Üldüksus "tricky" on nüüd
deklareeritud asendustekstiga "error-prone".
viit üldüksusele "tricky" reas 8 on tuvastatud ja ta on laiendatud, nii et
elemendi "test" sisu täielik sisu on iseennast kirjeldav (ja
mittegrammatiline) string This sample shows a error-prone method.
E. Deterministlik sisu mudel (mittenormatiivne)
Ühilduvuseks (for compatibility), on nõutav, et sisu mudelid elemendi tüüpide
deklaratsioonides oleksid deterministlikud.
SGML nõuab deterministlikku sisu mudeleid (seda kutsutakse ühemõttelisuseks
("unambiguous")); SGML-süsteemide baasil ehitatud XML-protsessorid võivad
mittedeterministlikud sisu mudelid märkida vigadena.
Näiteks on sisu mudel ((b, c) | (b, d)) mittedeterministlik, kuna pärast
etteantud lähteväärtust b ei tea parser ilma edasivaatamiseta elemendile b
järgnevat elementi, milline b mudelis klappis. Sellel juhul võivad kaks viita
elemendile b kokku tõmmata üheks viidaks ja teha mudel kujul (b, (c | d)).
Alguselement b klapib nüüd selgelt ainult ühe nimega sisu mudelis. Parser ei pea
vaatama edasi, et teha kindlaks järgnevat; nii c kui ka d on
aktsepteeritavad.
Enam formaalselt: lõpliku olekutega automaadi saab konstrueerida sisu mudelist
kasutades standardseid algoritme, näiteks algoritmi 3.5 jaotises 3.9 kirjutises
Aho, Sethi, and Ullman [Aho/Ullman]. Paljudes sellistes algoritmides on täidetav
sammude kogum on konstrueeritud iga positsiooni jaoks regulaaravaldises (st
regulaaravaldise iga lehe jaoks süntaksi puus); kui mistahes positsioonile
järgneb rohkem kui üks positsioon, mis on märgistatud sama elemenditüübi nimega,
siis on sisu mudel vigane ja sellest peab raporteerima kui veast.
Eksisteerib algoritme, mis lubavad paljud, kuid mitte kõik mittedeterministlikud
sisu mudelid automaatselt taandada ekvivalentseteks deterministlikeks
mudeliteks, vaata Brüggemann-Klein 1991 [Brüggemann-Klein].
F. Märkide kodeerimise automaatne määramine (mittenormatiivne)
XMLi kodeerimise deklaratsiooni funktsiooniks on mistahes üksuse sisemise
märgisega näidata milline kodeerimine on kasutusel. Enne kui XML-protsessor
saab lugeda sisemist märgist, peab ta ükskõik kuidas aparatuurselt teadma,
milline kodeerimine on kasutuses – mis on selline, mida sisemine märgis püüab
näidata. Üldjuhul on see lootusetu situatsioon. Ometi pole see täiesti
lootusetu XML korral, sest üldjuhul limiteerib XML kaks momenti: mistahes
rakenduse korral eeldatakse ainult lõpliku hulga kodeerimiste tuge ja XML
kodeerimise deklaratsiooni positsioon XML-dokumendis ja tema sisu on ette antud,
selleks et teha võimalikuks automaatselt teha kindlaks kasutusel olev märkide
kodeerimise süsteem mistahes üksuses normaaljuhtudel. Paljudel juhtudel on ka
teised infoallikad kättesaadavad lisaks XML-andmevoole. Kaks juhtumit võivad
olla eristatud, sõltuvalt sellest, kas XML-üksus on esitatud protsessorile ilma
või koos mistahes kaasaskäiva (välise) informatsioonita Vaatleme esimest
varianti.
Kuna iga UTF-8 ja UTF-16 formaadist erinevat kasutav üksus peab algama XMLi
kodeerimise deklaratsiooniga, kus esimesed märgid peavad olema '