[This local archive copy is from the official and canonical URL, http://www.xml.se/xml/REC-xml-19980210-sv.html; please refer to the canonical source document if possible.]


Extensible Markup Language (XML) 1.0

Logotyp

Järfälla den 5 juli 1999

Det här är den svenska översättningen av W3C:s specifikation "XML 1.0 Recommendation" från den 10 februari 1998. Översättningen har gjorts på AB XML Sweden. Erik Mjöberg har gjort själva översättningsarbetet. Gustaf Liljegren och Jan Östberg har bearbetat och utvecklat översättningen.

Det bör observeras att endast orginaldokumentet på engelska har ett normativt värde. Det återfinns på W3C:s hemsida under http://www.w3.org/TR/1998/REC-xml-19980210. Den här översättningen till svenska återfinns på http://www.xml.se/xml/REC-xml-19980210-sv.html. Den har uppdaterats med avseende på de rättningar t.o.m. den 17 februari 1999 av originaldokumentet som finns i XML 1.0 Specification Errata. Översättningen kan innehålla översättningsfel. Vi har emellertid försökt att vara så trogna det engelska originalet som möjligt utan att förlora oss i anglicismer ["swinglish"]. Översättningskommentarer har vi lagt inom hakparanteser ["så här"]. Om vi har velat komplettera den svenska översättningen med originalorden på engelska har vi angett detta i parenteser med citationstecken ("like this"). Synpunkter på den svenska översättningen välkomnas på erik.mjoberg@xml.se. Vi hoppas att översättningen kommer att underlätta användningen av XML på svenska.

För en version av detta dokument utan stilmall (bättre lämpad för utskrift och för webläsare med sämre CSS-stöd) se http://www.xml.se/xml/REC-xml-19980210-sv-print.html.

Det engelska dokumentet är upphovsrättsligt skyddat. Copyright © World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.

Även översättningen är upphovsrättsligt skyddad. Copyright © AB XML Sweden.

Detta dokument får fritt kopieras, om den upphovsrättsliga informationen medföljer dokumentet.

W3C-logoREC-xml-19980210-sv



Extensible Markup Language (XML) 1.0

W3C-rekommendation 1998-02-10

Denna version:
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
Senaste version:
http://www.w3.org/TR/REC-xml
Tidigare version:
http://www.w3.org/TR/PR-xml-971208
Redaktion:
Tim Bray (Textuality och Netscape) <tbray@textuality.com>
Jean Paoli (Microsoft) <jeanpa@microsoft.com>
C. M. Sperberg-McQueen (University of Illinois at Chicago) <cmsmcq@uic.edu>

Sammanfattning

Detta dokument är en fullständig beskrivning av Extensible Markup Language (XML), som är en delmängd ("subset") av SGML. Syftet med standarden är att möjliggöra för SGML att användas på webben på samma sätt som nu är möjligt för HTML. XML har utformats för att vara lätt att tillämpa och fungera tillsammans med både SGML och HTML.

Status för detta dokument

Detta dokument har granskats av medlemmar i W3C och och andra intresserade och har ratifierats av W3Cs Director som en W3C-rekommendation. Det är ett stabilt dokument som kan användas som referensmaterial eller citeras som en normativ referens från andra dokument. W3C:s roll är nu att dra uppmärksamhet till specifikationen och att främja en bred användning, något som kommer att förbättra funktionaliteten och utbytet på webben.

Detta dokument specificerar en syntax skapad som en understandard till en existerande, vida använd internationell standard för textbehandling (Standard Generalized Markup Language, ISO 8879:1986(E) i en korrigerad version) för användning på Webben. Det har tagits fram av W3C XML Activity, vars verksamhet återfinns på http://www.w3.org/XML. En lista på aktuella W3C-rekommendationer och andra tekniska dokument finns på http://www.w3.org/TR.

Denna specifikation använder termen URI, som definierats av [Berners-Lee m.fl.] och som är under utveckling och förväntas uppdatera [IETF RFC1738] och [IETF RFC1808].

En lista på kända fel i denna specifikation finns tillgängliga på http://www.w3.org/XML/xml-19980210-errata.

Rapporter om fel i det engelska originalet till detta dokument görs till xml-editor@w3.org.

Extensible Markup Language (XML) 1.0

Innehållsförteckning

1. Inledning
    1.1 Ursprung och mål
    1.2 Terminologi
2. Dokument
    2.1 Välutformade XML-dokument
    2.2 Tecken
    2.3 Vanliga syntaxkonstruktioner
    2.4 Teckendata och uppmärkning
    2.5 Kommentarer
    2.6 Processinstruktioner
    2.7 CDATA-avsnitt
    2.8 Prolog och dokumenttypsdeklaration
    2.9 Fristående dokumentdeklaration
    2.10 Tomrumshantering
    2.11 Hantering av radbrytning
    2.12 Språkidentifiering
3. Logiska strukturer
    3.1 Starttaggar, sluttaggar och tomelementstaggar
    3.2 Elementtypsdeklarationer
        3.2.1 Elementinnehåll
        3.2.2 Blandat innehåll
    3.3 Attributlist-deklarationer
        3.3.1 Attributtyper
        3.3.2 Ingångsvärden för attribut
        3.3.3 Normalisering av attributvärden
    3.4 Villkorliga urval
4. Fysiska strukturer
    4.1 Tecken- och entitetsreferenser
    4.2 Entitetsdeklarationer
        4.2.1 Interna entiteter
        4.2.2 Externa entiteter
    4.3 Analyserade entiteter
        4.3.1 Textdeklarationen
        4.3.2 Välutformade, analyserade entiteter
        4.3.3 Teckenkoder i entiteter
    4.4 Bearbetning av entiteter och referenser i en XML-behandlare
        4.4.1 Inte accepterad
        4.4.2 Infogad
        4.4.3 Infogad vid giltighetstest
        4.4.4 Förbjudet
        4.4.5 Infogad inom anföringstecken
        4.4.6 Underrätta
        4.4.7 Överhoppad
        4.4.8 Infogad som PE
    4.5 Konstruktion av ersättningstext för interna entiteter
    4.6 Fördefinierade entiteter
    4.7 Notationsdeklarationer
    4.8 Dokumententitet
5. Konformitet
    5.1 XML-behandlare som testar respektive inte testar giltighet
    5.2 Användning av XML-behandlare
6. Beteckningssätt

Bilagor

A. Referenser
    A.1 Normativa referenser
    A.2 Andra referenser
B. Teckenklasser
C. XML och SGML (icke normativt)
D. Expansion av entitets- och teckenreferenser (icke normativt)
E. Deterministiska innehållsmodeller (icke normativt)
F. Automatiskt fastställande av teckenuppsättningar (icke normativt)
G. W3Cs arbetsgrupp för XML (icke normativt)


1. Inledning

Extensible Markup Language, förkortat XML, beskriver dels en klass av dataobjekt som kallas XML-dokument och dels beteendet hos dataprogram som bearbetar dem. XML är en begränsad form av SGML, the Standard Generalized Markup Language [ISO 8879]. Genom sin uppbyggnad är XML-dokument även SGML-dokument.

XML-dokument är uppbyggda av lagringsenheter som kallas entiteter, som innehåller endera analyserad ("parsed") eller icke analyserad ("unparsed") data. Analyserad data bygger på tecken ("characters"), av vilka vissa utgör teckendata och vissa utgör uppmärkning. Uppmärkningen är en kodad beskrivning av dokumentets lagringsutformning och logiska struktur. XML erbjuder en mekanism för att införa begränsningar i lagringsutformningen och den logiska strukturen.

En mjukvarumodul kallad en XML-behandlare ("XML processor") används för att läsa XML-dokument och ge tillgång till deras innehåll och struktur. Det förutsätts att en XML-behandlare arbetar under en annan modul kallad applikationen. Denna specifikation beskriver det beteende som krävs av en XML-behandlare med avseende på hur den skall läsa XML-data och vilken information den måste förse applikationen med.

1.1 Ursprung och mål

XML utvecklades av XML Working Group (ursprungligen känd som the SGML Editorial Review Board) som bildades under överinseende av the World Wide Web Consortium (W3C) 1996. Ordförande var Jon Bosak, Sun Microsystems, med aktivt deltagande av en XML Special Interest Group (tidigare känd som the SGML Working Group) som också hade bildats av W3C. Medlemmarna i the XML Working Group finns angivna i en bilaga. Dan Connolly fungerade som kontaktman mellan the XML WG och W3C.

Målen för XMLs utformning är:

  1. XML ska bli lätt att använda på Internet.
  2. XML skall stödja en bred variation av applikationer.
  3. XML skall vara kompatibelt med SGML.
  4. Det skall vara lätt att skriva program som bearbetar XML-dokument.
  5. Antalet alternativa möjligheter för uppmärkning i XML ska hållas nere till ett absolut minimum, helst noll.
  6. XML-dokument ska vara läsbara för det mänskliga ögat och tillräckligt lätta att förstå.
  7. XMLs utformning skall snabbt bli klar.
  8. XMLs utformning skall vara formell och kortfattad.
  9. XML-dokument skall vara lätta att skapa.
  10. Förkortningar i XML-uppmärkningen ["på bekostnad av klarhet"] har liten betydelse.

Denna specifikation bidrar, tillsammans med associerade standarder (Unicode och ISO/IEC 10646 för tecken, Internet RFC 1766 för språkidentifieringstaggar, ISO 639 för kodning av namn på språk ochd ISO 3166 for kodning av namn på länder) till den information som behövs för att förstå XML version 1.0 och konstruera dataprogram för att bearbeta XML-dokument.

Denna version av XML-specifikationen får distribueras fritt, om all text och alla hänvisningar förblir intakta.

1.2 Terminologi

Terminologin som används för att beskriva XML-dokument är definierad i denna specifikation. I följande lista definieras de termer som används för att bygga upp definitionerna och för att beskriva aktiviteterna hos en XML-behandlare:

får ("may")
Godkända dokument och XML-behandlare kan men behöver inte uppträda som beskrivet.
måste ("must")
Godkända dokument och XML-behandlare måste uppträda som beskrivet; annars är de felaktiga
fel ("error")
Överträdelse av regler i denna specifikation; resultaten är odefinierade. Godkänd mjukvara får leta fram och rapportera fel och får därefter fortsätta sin bearbetning.
kritiskt fel ("fatal error")
Ett fel som en godkänd XML-behandlare måste upptäcka och rapportera till applikationen. Efter att ha upptäckt ett kritiskt fel, får XML-behandlaren fortsätta att bearbeta data för att finna fler fel och får rapportera sådana fel till applikationen. För att kunna stödja felrättning, får XML-behandlaren göra obearbetad data från dokumentet (med teckendata och uppmärkning blandat) tillgänglig för applikationen. När ett kritiskt fel har upptäckts, måste emellertid XML-behandlaren upphöra med normal behandling (dvs den får inte fortsätta att leverera teckendata och information om dokumentets logiska struktur till applikationen på normalt sätt).
användartillval ("at user option")
Godkänd mjukvara får eller måste (beroende på det modala hjälpverbet i meningen) bete sig som beskrivet. Om den gör det, måste den förse användarna med ett medel att möjliggöra eller omöjliggöra det beskrivna beteendet.
giltighetsbegränsning ("validity constraint")
En regel som gäller för alla giltiga XML-dokument. Överträdelser av giltighetsbegränsningar är fel. De måste som användartillval kunna rapporteras av en XML-behandlare som utför giltighetskontroll ("validating").
välutformningsbegränsning ("well-formed constraint")
En regel som gäller för alla välutformade XML-dokument. Överträdelser av begränsningar för välutformning är kritiska fel.
överensstämma med ("match")
för kompatibilitet ("for compatibility")
En egenskap hos XML som enbart är inlagd för att säkra att XML blir kompatibelt med SGML.
för utbyte ("for interoperability")
En icke-bindande rekommendation inlagd för att öka chanserna för att XML-dokument ska kunna behandlas av de existerande installerade SGML-behandlare som föregick the WebSGML Adaptations Annex (bilaga till SGML).

2. Dokument

Ett dataobjekt är ett XML-dokument om det enligt definitionen i denna specifikation är välutformat ("wellformed"). Ett välutformat XML-dokument kan dessutom vara giltigt om det möter vissa ytterligare begränsande krav.

Varje XML-dokument har såväl en logisk som en fysisk struktur. Fysiskt är dokumentet komponerat av enheter som kallas entiteter. En entitet får anropa andra entiteter för att ta in deras innehåll i dokumentet. Ett dokument börjar med en "rot" eller dokumententitet. Logiskt är dokumentet uppbyggt av deklarationer, element, kommentarer, teckenreferenser och processinstruktioner, som alla är utmärkta med explicit uppmärkning i dokumentet. De logiska och fysiska strukturerna måste noggrant inkapslas ("nest"), vilket beskrivs i "4.3.2 Välutformade analyserade entiteter".

2.1 Välutformade XML-dokument

Ett textobjekt är ett välutformat XML-dokument, om

  1. det i sin helhet överensstämmer med en beskrivning som benämns dokument,
  2. det uppfyller de begränsningar som välutformning anger i denna specifikation och
  3. var och en av de analyserade entiteterna som anropas direkt eller indirekt inom dokumentet är välutformad.

Dokument
[1]  document ::= prologelement Misc*

För att ett dokument ska överensstämma med dokument-beskrivning förutsätts att:

  1. Det innehåller ett eller flera element.
  2. Det finns exakt ett element som kallas roten eller dokumentelementet, som inte i någon del får återkomma i innehållet i något annat element. För alla andra element gäller att om starttaggen ("start-tag") finns i innehållet i ett annat element skall också sluttaggen ("end-tag") finnas i innehållet i samma element. Enklare uttryckt: Elementen, begränsade av start- och sluttaggar, inkapslas i varandra.

Som en följd av detta gäller att för varje icke-rotelement C i dokumentet, finns det ett annat element P i dokumentet så att C finns i innehållet i P, men inte i innehållet i något annat element som finns i innehållet i P. Under dessa villkor är P angivet som parent ["förälder"] till C och C är child ["barn"] till P.

2.2 Tecken

En analyserad entitet innehåller text, en följd av tecken, som kan representera endera uppmärkning eller teckendata. Ett tecken är en minsta textenhet, enligt specifikationen ISO/IEC 10646 [ISO/IEC 10646]. Tillåtna tecken är tabulatorsteg, returmatning, ny rad och de grafiska tecknen i Unicode och ISO/IEC 10646 samt ytterligare några tecken som innefattas i begreppet [2] Char. Användning av "kompatibilitetstecken", som definierats i sektion 6.8 i [Unicode], skall motverkas.

Teckenuppsättning
[2]  Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] |  [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* alla Unicode-tecken, utom ersättningstyckena, FFFE och FFFF. */

Mekanismen för att omvandla teckenkodsnummer till bitar kan variera från entitet till entitet. Alla XML-behandlare måste acceptera UTF-8- och UTF-16-koden i ISO/IEC 10646. Möjligheterna att deklarera vilken av de två som används eller för att lyfta in andra teckenstandarder kommer att tas upp senare, i "4.3.3 Teckenkoder i entiteter".

2.3 Vanliga syntaxkonstruktioner

Detta avsnitt definierar några ofta använda begrepp i grammatiken.

S Tomrum ("white space") består av ett eller flera blanktecken (#x20), returmatning, ny rad eller tabulatorsteg.

Tomrum
[3] S ::= (#x20 | #x9 | #xD | #xA)+

Tecken är traditionellt uppdelade i bokstäver, siffror och andra tecken. Bokstäver består av ett alfabetiskt eller stavelsebaserat tecken möjligen följt av ett eller flera kombinationstecken eller av ett bildskriftstecken. Fullständiga definitioner av de specifika tecknen i varje klass finns i "B. Teckenklasser".

Ett namn är en symbol ("token") som börjar med en bokstav eller ett av några få interpunktionstecken och fortsätter med bokstäver, siffror, bindestreck, understrykningstecken, kolon, eller punkter, sammantaget kända som namntecken. Namn som börjar med strängen "xml" eller varje annan sträng som överensstämmer med (('X'|'x') ('M'|'m') ('L'|'l')), är reserverade för standardisering i denna och kommande versioner av specifikationen.

Notera: Tecknet kolon inom XML-namn är reserverat för experiment med namnrymder. Deras betydelse avses bli standardiserad inom en nära framtid, då de dokument som använder kolon i experimentsyfte kanske kommer att behöva uppdateras. (Det finns ingen garanti för att man kommer att anta en namnrymdsmekanism för XML med kolon som namnrymdsskiljetecken.) I praktiken betyder det att författare inte bör använda kolon i XML-namn utom i experiment med namnrymd, men att XML-behandlare bör acceptera kolon som ett namntecken.

En Nmtoken (namnsymbol, "name token") är en blandning av namntecken ("name characters").

Namn och symboler
[4]  NameChar ::= LetterDigit | '.' | '-' | '_' | ':' | CombiningCharExtender
[5]  Name ::= (Letter | '_' | ':') (NameChar) *
[6]  Names ::= Name (S Names)*
[7]  Nmtoken ::= (NameChar)+
[8]  Nmtokens ::= Nmtoken (S Nmtoken)*

Literal data är en sträng inom anföringstecken som inte innehåller samma anföringstecken som använts för avgränsning av strängen. Literal data används för att specificera innehållet i interna entiteter (EntityValue) ["entitetsvärde"], attributvärden (AttValue) och externa beteckningar (SystemLiteral). Notera att en SystemLiteral kan analyseras utan att söka efter uppmärkning.

Literal data
[9]  EntityValue ::= '"' ([^%&"] | PEReferenceReference)* '"'
|  "'" ([^%&'] | PEReferenceReference)* "'"
[10]  AttValue ::= '"' ([^<&"] | Reference )* '"'
|  "'" ([^<&'] |  Reference)* "'"
[11]  SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'")
[12]  PubidLiteral ::= '"' PubidChar* '"' |  "'" (PubidChar - "'")* "'"
[13]  PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]

2.4 Teckendata och uppmärkning

Text består av blandad teckendata och uppmärkning. Uppmärkning har formen av starttaggar, sluttaggar, tomma taggar, entitetsreferenser, teckenreferenser, kommentarer, skiljetecken för CDATA-avsnitt, dokumenttypsdeklarationer och processinstruktioner.

All text som inte är uppmärkning utgör dokumentets teckendata.

Och-tecknet (&) och mindre-än-tecknet (<) får, om de används som skiljetecken för uppmärkning, inom en kommentar, en processinstruktion eller ett CDATA-avsnitt, endast förekomma i teckenform. De är också tillåtna inom entitetsvärdet i en intern entitetsdeklaration; se "4.3.2 Välutformade analyserade entiteter". Om de behövs någon annanstans, måste de vara undantagna genom att antingen använda numeriska teckenreferenser eller strängarna "&amp;" eller "&lt;". Större-än-tecknet (>) får representeras av strängen "&gt;" och måste för kompatibilitet undantas med hjälp av "&gt;" eller av en teckenreferens, när den uppträder i strängen "]]>", i det fall strängen inte anger slutet på ett CDATA-avsnitt.

I innehållet hos element, är teckendata varje teckensträng som inte innehåller ett startskiljetecken i någon uppmärkning. I ett CDATA-avsnitt är teckendata varje teckensträng som inte innehåller avslutningstecknet för CDATA-avsnitt, "]]>".

För att möjliggöra för attributvärden att innehålla både enkla och dubbla anföringstecken, kan apostrofen eller det enkla anföringstecknet (') anges med "&apos;" och citationstecknet eller det dubbla anföringstecknet (") med "&quot;".

Teckendata
[14]  CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)

2.5 Kommentarer

Kommentarer får förekomma överallt i ett dokument utanför annan uppmärkning. Dessutom får kommentarer förekomma inom dokumenttypsdeklarationen på platser som tillåts av grammatiken. De är inte någon del av dokumentets teckendata. En XML-behandlare får, men behöver inte, möjliggöra för applikationen att gå igenom texten i kommentarerna. För kompatibilitet får strängen"--" (dubbel-bindestreck) inte förekomma inom kommentarerna.

Kommentarer
[15]  Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

Ett exempel på en kommentar:

<!-- deklarationer för <huvud> &  <text> -->

2.6 Processinstruktioner

Processinstruktioner (PIer) låter ett dokument innehålla instruktioner för applikationer.

Processinstruktioner
[16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17]  PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

PIer är inte en del av ett dokuments teckendata, men måste vidarebefordras till applikationen. PIer inleds med ett mål (PITarget) ["PI-mål"] för att identifiera den applikation som instruktionen riktar sig till. Målnamnen "XML", "xml" osv. är reserverade för standardisering i denna eller i framtida versioner av specifikationen. XML-mekanismen för notation får användas för formella deklarationer av PImål.

2.7 CDATA-avsnitt

CDATA-avsnitt ("CDATA Sections") får förekomma överallt där teckendata förekommer. De används för att gå ur textavsnitt som innehåller tecken som annars skulle betraktas som uppmärkning. CDATA-avsnitt börjar med strängen "<![CDATA[" och slutar med strängen "]]>":

CDATA-avsnitt
[18] CDSect ::= CDStart CData CDEnd
[19]  CDStart ::= '<![CDATA['
[20]  CData ::= (Char* - (Char* ']]>' Char*))
[21]  CDEnd ::= ']]>'

Inom ett CDATA-avsnitt betraktas endast CDEnd-strängen som uppmärkning, dvs mindre-än-tecken och och-tecken får förekomma i utskriven form. De behöver inte (och kan inte) bli överhoppade genom att använda "&lt;" och "&amp;". CDATA-avsnitt kan inte inkapslas.

Ett exempel på ett CDATA-avsnitt, där "<hälsning>" och "</hälsning>" betraktas som teckendata, inte som uppmärkning:

<![CDATA[<hälsning>Hallå, världen!</hälsning>]]>

2.8 Prolog och dokumenttypsdeklaration

XML-dokument får, och skall, börja med en XML-deklaration som specificerar den XML-version som används. Här följer exempel på två fullständiga XML-dokument, välutformade men inte giltiga:

<?xml version="1.0"?>
<hälsning>Hallå, världen!</hälsning>

<hälsning>Hallå, världen!</hälsning>

Versionsnummer "1.0" används för att ange överensstämmelse med denna version av specifikationen. Det är ett fel att i ett dokument använda värdet "1.0" om det inte överensstämmer med denna version av specifikationen. Det är the XML Working Group:s avsikt att ge senare versioner av denna specifikation andra nummer än "1.0", men denna avsikt anger inte ett löfte att producera några framtida versioner av XML, inte heller att använda en särskild nummerserie, om någon ny version skapas. Eftersom framtida versioner inte kan uteslutas, är denna konstruktion gjord som ett medel för att tillåta möjligheten av en automatisk versionshantering, om det skulle bli nödvändigt. XML-behandlare får signalera ett fel om de tar emot dokument med versioner angivna som de inte stödjer.

Uppmärkningens funktion i ett XML-dokument är att beskriva dess lagring och logiska struktur och att knyta attributvärde-par till sina logiska strukturer. XML erbjuder en mekanism, dokumenttypsdeklarationen, för att definiera begränsningar i den logiska strukturen och att stödja användningen av fördefinierade lagringsenheter. Ett XML-dokument är giltigt om det har en tillhörande dokumenttypsdeklaration och om dokumentet överensstämmer med de begränsningar som har uttryckts i den.

Dokumenttypsdeklarationen måste ligga före det första elementet i dokumentet.

Prolog
[22]  prolog ::= XMLDecl? Misc* (doctypedeclMisc*)?
[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 ::= CommentPIS

Dokumenttypsdeklarationen i XML innehåller eller pekar på uppmärkningsdeklarationer som bildar en grammatik för en dokumentklass. Denna grammatik är känd som dokumenttypdefinitionen eller DTDn. Dokumenttypsdeklarationen kan peka på en extern delmängd ("subset", en särskild sorts extern entitet) som innehåller uppmärkningsdeklarationer eller kan innehålla uppmärkningsdeklarationerna direkt i en inre delmängd eller kan innehålla båda. DTDn för ett dokument består av båda delmängdstyperna sammantagna.

En uppmärkningsdeklaration är en elementtypsdeklaration, en attributlist-deklaration, en entitetsdeklaration eller en notationsdeklaration. Dessa deklarationer kan vara sammanhållna i sin helhet eller i delar i parameterentiteter, som beskrivs i välutformnings- och giltighetsbegränsningar nedan. För ytterligare information, se "4. Fysiska strukturer".

Dokumenttypsdefinition
[28]  doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdeclPEReferenceS)* ']' S?)? '>' [ VC: Rotelementtyp ]
[29]  markupdecl ::= elementdeclAttlistDeclEntityDeclNotationDeclPIComment [ VC: Riktig deklaration/PE-inkapsling ]
[ WFC: PEer i interna delmängder ]

Uppmärkningsdeklarationerna kan ha gjorts helt eller delvis i ersättningstexten i parameterentiteterna. De definitioner som förekommer senare i denna specifikation avseende vissa begrepp ("nonterminals") ["vänsterledet i de olika numrerade begreppsdefinitionerna"] (elementdecl, AttlistDecl osv) beskriver deklarationerna efter det att alla parameterentiteterna har blivit infogade.

Giltighetsbegränsning: Rotelementtyp

Namnet i dokumenttypsdeklarationen måste överensstämma med elementtypen hos rotelementet.

Giltighetsbegränsning: Riktig deklaration/PE-inkapsling

Ersättningstexten i en parameterentitet måste vara riktigt inkapslad i uppmärkningsdeklarationerna. Det vill säga att om något av de första tecknen eller det sista tecknet i en uppmärkningsdeklaration (markupdecl ovan) ingår i ersättningstexten för en parameterentitetsreferens, måste båda ingå i samma ersättningstext.

Välutformningsbegränsning: PEer i interna delmängder

I den interna delmängden av DTDn får parameterentitetsreferenser förekomma bara där uppmärkningsdeklarationer får förekomma, dock inte inom uppmärkningsdeklarationerna. (Detta gäller inte för referenser som förekommer i externa parameterentiteter eller den externa delmängden.)

På samma sätt som interna delmängder måste de externa delmängderna och varje extern parameterentitet som anropas i DTDn bestå av en serie av kompletta uppmärkningsdeklarationer av de typer som tillåts av begreppet markupdecl, blandade med tomrum eller parameterentitetsreferenser. Emellertid kan delar av innehållet i den externa delmängden eller i de externa parameterentiteterna villkorligt få förbises genom att använda en villkorsavsnitts-konstruktion. Detta är inte tillåtet i den interna delmängden. Den externa delmängden och varje extern parameterentitet som åberopas i DTDn måste överensstämma med begreppet extPE. Se 4.3.2 Välutformade analyserade entiteter.

Externa delmängder
[30]  extSubset ::= TextDecl? extSubsetDecl
[31] extSubsetDecl ::= ( markupdeclconditionalSectPEReferenceS)*

Den externa delmängden och de externa parametererentiteterna skiljer sig också från den interna delmängden i det att i dessa är parameterentitetsreferenser tillåtna inom uppmärkningsdeklarationerna, inte bara mellan uppmärkningsdeklarationerna.

Ett exempel på ett XML-dokument med en dokumenttypsdeklaration:

<?xml version="1.0"?>
<!DOCTYPE hälsning SYSTEM  "hallå.dtd">
<hälsning>Hallå, världen!</hälsning>

Systemidentifikationen "hallå.dtd" ger URIn till en DTD för dokumentet.

Deklarationerna kan också vara givna lokalt, som i detta exempel:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE  hälsning [
  <!ELEMENT hälsning  (#PCDATA)>
]>
<hälsning>Hallå, världen!</hälsning>

Om både externa och interna delmängder används, anses den interna delmängden övertrumfa den externa delmängden. Detta har den effekten att entitets- och attributlist-deklarationer i den interna delmängden har företräde framför dem i den externa delmängden.

2.9 Fristående ("standalone") dokumentdeklaration

Uppmärkningsdeklarationer kan ha en negativ inverkan på innehållet i ett dokument som skickas från en XML-behandlare till ett applikation. Entitetsdeklarationer och ingångs-("default")värden för attribut är exempel på detta. Den fristående dokumentdeklarationen, som kan förekomma som en komponent i XML-deklarationen, ger en signal om huruvida det finns eller inte finns sådana deklarationer som förekommer utanför dokumententiteten.

Fristående dokumentdeklaration
[32] SDDecl ::= S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) [ VC: Fristående dokumentdeklaration ]

I en fristående dokumentdeklaration anger värdet "yes" att det inte finns några uppmärkningsdeklarationer utanför dokumententiteten (varken i DTDns externa delmängd eller i en extern parameterentitet som är anropad av den interna delmängden) vilket får en negativ inverkan på den information som skickas från XML-behandlaren till applikationen. Värdet "no" anger att det finns eller kan finnas några sådana externa uppmärkningsdeklarationer. Notera att den fristående dokumentdeklarationen bara utesluter närvaron av externa deklarationer; närvaron i ett dokument av referenser till externa entiteter, när entiteterna är deklarerade internt, ändrar inte deras fristående status.

Om det inte finns några uppmärkningsdeklarationer, har den fristående dokumentdeklarationen inte någon mening. Om det finns externa uppmärkningsdeklarationer men det inte finns någon fristående dokumentdeklaration, är värdet "no" förutatt.

Varje XML-dokument för vilket standalone="no" kan konverteras algoritmiskt till ett fristående dokument, vilket kan vara önskvärt för vissa nätverksapplikationer.

Giltighetsbegränsning: Fristående dokumentdeklaration

Den fristående dokumentdeklarationen måste ha värdet "no" om någon extern uppmärkningsdeklaration innehåller deklarationer av:

Ett exempel på en XML-deklaration med en fristående dokumentdeklaration:

<?xml version="1.0" standalone='yes'?>

2.10 Tomrumshantering

Vid editering av XML-dokument, är det ofta praktiskt att använda tomrum (blanktecken/"spaces", tabulatorsteg/"tabs" och nya rader/"blank lines", enligt begreppet S i denna specifikation) för att dela upp uppmärkningen för bättre läsbarhet. Sådana tomrum är normalt inte avsedda att ingå i den framtagna versionen av dokumentet. Å andra sidan är det vanligt att ha med ett "signifikant" tomrum som ska sparas i den framtagna ("delivered") versionen, till exempel i en dikt eller en källkod.

En XML-behandlare måste alltid vidarebefordra alla tecken i ett dokument som inte är uppmärkning till applikationen. En analyserande XML-behandlare måste också underrätta applikationen om vilka av dessa tecken i elementinnehållet som utgör tomrum.

Ett speciellt attribut kallat xml:space får knytas till element för att signalera en avsikt att i det elementet ska tomrum sparas av applikationen. I giltiga dokument, måste detta attribut, liksom varje annat deklareras om det skall användas. När det deklareras, måste det anges som uppräkningstyp ("enumerated type") vars enda möjliga värden är "default" ["ingångsvärde"] eller "preserve" ["bibehåll"]. Till exempel:

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

Värdet "default" signalerar att inställningen av ingångsvärdet för applikationens tomrumshantering är godtagbart för detta element. Värdet "preserve" anger att applikationen ska bibehålla alla tomrum. Denna deklarerade avsikt gäller även för alla element som är inkapslade i det element som har detta värde angivet, om det inte i det inkapslade elementet har angivits något annat värde på xml:space-attributet.

Rotelementet i ett dokument anses inte ha signalerat någon avsikt avseende applikationens tomrumshantering, om det inte har ett värde på detta attribut eller attributet har deklarerats med ingångs-("default")värdet.

2.11 Hantering av radbrytning

XML-analyserade entiteter är ofta lagrade i datafiler, som är organiserade i rader för bearbetning. Dessa rader är separerade på ett särskilt sätt genom en kombination av tecknen returmatning (#xD) och ny rad (#xA).

För att underlätta för en applikation får en XML-behandlare, om en extern analyserad entitet eller entitetsvärdet i en intern analyserad entitet innehåller endera de två tecknen "#xD#xA" eller det fristående tecknet #xD, endast skicka tecknet #xA till applikationen. (Detta sätt att arbeta kan vid inläsning av data lämpligen utföras genom att normalisera alla radbrytningar till #xA, före analysering.)

2.12 Språkidentifiering

Vid dokumentbearbetning, är det ofta praktiskt att identifiera det naturliga eller formella språk som innehållet är skrivet i. Ett särskilt attribut kallat xml:lang får infogas i dokumentet för att ange vilket språk som används i innehållet och attributvärdena hos alla element i ett XML-dokument. I giltiga dokument måste detta liksom alla andra attribut deklareras om det används. Dessa attributvärden utgörs av en språkidentifiering enligt definitionen i [IETF RFC 1766], "Tags for the Identification of Languages":

Språkidentifiering
[33]  LanguageID ::= Langcode ('-' Subcode)*
[34]  Langcode ::= ISO639CodeIanaCodeUserCode
[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 är en av följande:

Det får finnas ett godtyckligt antal subkod-segment. Om det första subkodsegmentet finns och subkoden består av två bokstäver, måste det vara en landskod från [ISO 3166], "Codes for the representation of names of countries." Om den första subkoden består av fler än två bokstäver, måste det vara en subkod registrerad hos [IANA] för språket i fråga, om inte Langcode börjar med förstavelsen "x-" eller "X-".

Det är brukligt att ange språkkoden i gemener och landskoden (om den finns) i versaler. Notera att dessa värden - till skillnad från namn i XML-dokument - är oberoende av kast ["om de är versaler eller gemener"].

Exempel:

<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 Bemüh'n.</l>
  </sp>

Den deklarerade avsikten med xml:lang avses gälla alla attribut och innehållet i de element där koden är angiven, om det inte i något inkapslat element har angetts något annat värde på xml:lang-attributet.

En enkel deklaration för xml:lang kan se ut så här:

xml:lang  NMTOKEN  #IMPLIED

men om det är lämpligt kan särskilda ingångs-("default")värden vara givna. I en samling av franska dikter för svenska studenter kan, med glosor och noter på svenska, xml:lang-attributet vara deklarerat så här:

    <!ATTLIST dikt   xml:lang  NMTOKEN 'fr'>
    <!ATTLIST glosa  xml:lang  NMTOKEN 'sv'>
    <!ATTLIST not    xml:lang  NMTOKEN 'sv'>

3. Logiska strukturer

Varje XML-dokument innehåller ett eller flera element, som är avgränsade av antingen starttaggar ("start-tags") och sluttaggar ("end-tags"), eller för tomma ("empty") element av en tomelementstagg ("empty-element tag"). Varje element har en typ som identifieras med namn, ibland kallad dess generella identifikation ("generic identifier", GI), och kan ha en uppsättning med attributspecifikationer. Varje attributspecifikation har ett namn och ett värde.

Element
[39] element ::= EmptyElemTag
STag content ETag [ WFC: Överensstämmande elementtyp ]
[ VC: Giltigt element ]

Denna specifikation utgör inte någon begränsning av semantiken för, användningen av eller (bortom syntaxen) namnen på elementtyperna och attributen, utom att namn som börjar på (('X'|'x')('M'|'m')('L'|'l')) är reserverade för standardisering i denna eller framtida versioner av specifikationen.

Välutformningsbegränsning: Elementtypsöverensstämmelse

Namnet i ett elements sluttagg måste överensstämma med elementtypen i starttaggen.

Giltighetsbegränsning: Giltigt element

Ett element är giltigt om det finns en deklaration som överensstämmer med elementdecl ["elementdeklarationen"] där namnet överensstämmer med elementtypen och ett av följande villkor gäller:

  1. Deklarationen överensstämmer med EMPTY och elementet har inte något innehåll.
  2. Deklarationen överensstämmer med children och de ingående child-elementen hör till det språk som skapats av uttrycket i innehållsmodellen ["se begreppsdefinitionerna (47)-(50)"], med tomrum som möjligt tillval (tecken som överensstämmer med begreppet S) mellan varje par av child-element.
  3. Deklarationen överensstämmer med mixed och innehållet består av teckendata och child-element med elementtyper som överensstämmer med namnen i innehållsmodellen.
  4. Deklarationen överensstämmer med ANY och elementtyperna för alla child-element har deklarerats.

3.1 Starttaggar, sluttaggar och tomelementstaggar

Början på varje XML-element, som inte är ett tomelement, är markerad med en starttagg ("start-tag").

Starttagg
[40]  STag ::= '<' Name (S Attribute)* S? '>' [ WFC: Entydig attributspec ]
[41]  Attribute ::= Name Eq AttValue [ VC: Typ av attributvärde ]
[ WFC: Inga externa entitetsreferenser ]
[ WFC: Inget < i attributvärdet ]

Namnet i start- och sluttaggarna anger elementets typ. Namn-AttValue["attributvärde"]-paren åberopas som elementens attributspecifikationer ("attribute specifications"), med namnet i varje par åberopat som attributnamnet och innehållet i AttValue (texten mellan '- eller "-anföringstecknen) som attributvärdet.

Välutformningsbegränsning: Entydig attributspecifikation ("Unique Att Spec")

Inget attributnamn får förekomma mer än en gång i samma starttagg eller tomelementstagg.

Giltighetsbegränsning: Typ av attributvärde ("Attribute Value Type")

Attributet måste ha blivit deklarerat; värdet måste vara av samma typ som angetts i deklarationen. (För attributtyper, se "3.3 Attributlist-deklarationer".)

Välutformningsbegränsning: Inga externa entitetsreferenser

Attributvärden får inte innehålla direkta eller indirekta referenser till externa entiteter ["men de får innehålla ett anrop på ett entitetsnamn till en extern icke analyserad entitet"].

Välutformningsbegränsning: Inget <-tecken i attributvärdet

Ersättningstexten för varje entitet som åberopats direkt eller indirekt i ett attributvärde (förutom "&lt;") får inte innehålla <.

Ett exempel på en starttagg:

<termdef id="dt-hund" term="hund">

Slutet på varje element som börjar med en starttagg måste märkas upp av en sluttagg. Denna innehåller ett namn som upprepar elementets typ såsom den angetts i starttaggen:

Sluttagg
[42] ETag ::= '</' Name S? '>'

Ett exempel på en sluttagg:

</termdef>

Texten mellan starttaggen och sluttaggen kallas elementets innehåll:

Elementinnehåll
[43] content ::= (elementCharDataReferenceCDSectPIComment)*

Om ett element är tomt, måste det antingen representeras av en starttagg omedelbart följd av en sluttagg eller av en tomelementstagg. En tomelementstagg har en speciell form:

Tomelementstaggar
[44]  EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' [ WFC: Entydig attributspec ]

Tomelementstaggar får användas för alla element som inte har något innehåll, vare sig de är deklarerade som EMPTY eller inte. För utbyte ("interoperability") måste tomelementstaggen användas och kan bara användas för element som är deklarerade som EMPTY.

Exempel på tomelement:

<IMG align="left"
  src="http://www.w3.org/Icons/WWW/w3c_home" />
<br></br>
<br/>

3.2 Elementtypsdeklarationer

I ett XML-dokument kan element-strukturen begränsas med hjälp av deklarationer av elementtyp och attributlistor i syfte att testa giltigheten. En elementtypsdeklaration begränsar elementets innehåll.

Elementtypsdeklarationer begränsar ofta vilka elementtyper som kan förekomma som children ["barn"] till elementet. Som användartillval, kan en XML-behandlare utfärda en varning när en deklaration nämner en elementtyp som inte är deklarerad, men det är inte ett fel.

En elementtypsdeklaration antar formen:

Elementtypsdeklaration
[45]  elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>' [ VC: Entydig elementtypsdeklaration ]
[46] contentspec ::= 'EMPTY' | 'ANY' | Mixedchildren

där namnet betecknar den deklarerade elementtypen.

Giltighetsbegränsning: Entydig elementtypsdeklaration

Ingen elementtyp får deklareras mer än en gång.

Exempel på elementtypsdeklarationer:

<!ELEMENT br EMPTY>
<!ELEMENT p (#PCDATA|emph)*  >
<!ELEMENT %name.para; %content.para; >
<!ELEMENT  container ANY>

3.2.1 Elementinnehåll

En elementtyp har elementinnehåll när en sådan typ av element enbart får innehålla child-element (ingen teckendata), som kan men inte behöver vara åtskilda med tomrum (tecken som överensstämmer med begreppet S). I detta fall, innefattar begränsningen en innehållsmodell, en enkel grammatik som styr tillåtna child-elementtyper och den ordning de får förekomma i. Grammatiken är byggd på innehållsdelar ("content particles") (cps), som består av namn samt urvalslistor ("choice lists") eller sekvenslistor ("sequence lists") med cps:

Elementinnehållsmodeller
[47] children ::= (choiceseq) ('?' | '*' | '+')?
[48] cp ::= (Namechoiceseq) ('?' | '*' | '+')?
[49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')' [ VC: Riktig grupp/PE-inkapsling ]
[50] seq ::= '(' S? cp ( S? ',' S? cp )*S? ')' [ VC: Riktig grupp/PE-inkapsling ]

där varje namn är den elementtyp som förekommer som child. Varje innehållsdel i en urvalslista får förekomma i elementinnehållet på det ställe där urvalslistan förekommer i grammatiken. Innehållsdelar i en sekvenslista måste var och en förekomma i elementinnehållet i den ordning som angetts i listan. Det tecken som kan följa ett namn eller en lista som tillval styr hur elementet eller innehållsdelarna i listan får förekomma; en eller flera (+); ingen, en eller flera (*) eller ingen eller en gång (?). Frånvaron av en sådant tecken innebär att elementet eller innehållsdelen bara får förekomma exakt en gång. Denna syntax och innebörd är identisk för de innehållsdelar som används i begreppsdefinitionerna i denna specifikation.

Innehållet i ett element överensstämmer med en innehållsmodell om och endast om det är möjligt att finna en gång ("path") genom innehållsmodellen, som följer sekvens, urval och upprepningstecken samt överensstämmer med varje element i innehållet mot en elementtyp i innehållsmodellen. För kompatibilitet är det ett fel om ett element i dokumentet kan överensstämma med fler än en förekomst av en elementtyp i innehållsmodellen. För mer information, se "E. Deterministiska innehållsmodeller".

Giltighetsbegränsning: Riktig grupp/PE-inkapsling

Ersättningstexten för en parameterentitet måste vara riktigt inkapslad i parentesförsedda grupper. Dvs om någon av start- eller slutparentesen i ett urvals-, en sekvens- eller en blandad ("mixed") konstruktion är inkapslad i ersättningstexten för en parameterentitet, måste även den andra parentesen vara inkapslad i samma ersättningstext. Om en parameterentitetsreferens förekommer i ett urval, en sekvens eller en blandad konstruktion, får för utbyte dess ersättningstext inte vara tom och varken det första eller det sista tecknet som inte är tomrum i ersättningstexten vara ett bindetecken ("connector") (| eller ,).

Exempel på elementinnehållsmodeller:

<!ELEMENT spec (front, body, back?)>
<!ELEMENT div1 (head, (p | list | note)*,  div2*)>
<!ELEMENT dictionary-body (%div.mix; |  %dict.mix;)*>

3.2.2 Blandat innehåll

En elementtyp har blandat innehåll när element av denna typ kan innehålla teckendata, valfritt ("optionally") blandat med child-element. I detta fall kan child-elementtyperna vara begränsade, men inte deras ordning eller deras antal:

Deklaration av blandat innehåll
[51] Mixed ::= '(' S? '#PCDATA'(S? '|' S? Name)* S? ')*'
| '(' S? '#PCDATA' S? ')' [ VC: Riktig grupp/PEinkapsling ]
[ VC: Inga dubbla typer ]

där namnen anger de elementtyper som får förekomma som children. Nyckelordet PCDATA härrör historiskt från termen "parsed character data" ["analyserad teckendata"].

Giltighetsbegränsning: Inga dubbla typer

Samma namn får inte förekomma fler än en gång i en deklaration av blandat innehåll.

Exempel på deklarationer av blandat innehåll:

<!ELEMENT p (#PCDATA|a|ul|b|i|em)*>
<!ELEMENT p  (#PCDATA | %font; | %phrase; | %special; |  %form;)* >
<!ELEMENT b (#PCDATA)>

3.3 Attributlist-deklarationer ("Attribute-List Declarations")

Attribut används för att knyta namn/värde-par till element. Attributspecifikationer får bara förekomma inom starttaggar och tomelementstaggar. Begreppsdefinitionerna som används för att identifiera dem finns således i avsnitt "3.1". Attributlist-deklarationer kan användas:

Attributlist-deklarationer anger namnet, datatypen och ingångsvärdet (om det finns något) för varje attribut som är knutet till en angiven elementtyp:

Attributlist-deklaration
[52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'
[53]  AttDef ::= S Name S AttType S DefaultDecl

Namnet i AttlistDecl-regeln [52] är namnet på elementtypen. Som användartillval kan en XML-behandlare utfärda en varning om attribut deklareras för en elementtyp som i sig inte är deklarerad, men detta är inte ett fel. Namnet i AttDef-regeln (53) är attributnamnet.

När fler än en AttlistDecl är föreskriven för en angiven elementtyp, slås innehållet i alla föreskrivna deklarationer samman. När fler än en definition finns för samma attribut för en angiven elementtyp, är den första deklarationen bindande och de senare deklarationerna förkastade. För utbyte kan författare av DTDer föreskriva deklaration av maximalt ett attribut för en angiven elementtyp, maximalt en attributdefinition för ett angivet attributnamn i en attributlist-deklaration och åtminstone en attributdefinition i varje deklaration av en attributlista. För utbyte kan en XML-behandlare som användartillval utfärda en varning när fler än en attributlist-deklaration är föreskriven för en angiven elementtyp, eller fler än en attributdefinition är föreskriven för ett angivet attribut, men detta är inte ett fel.

3.3.1 Attributtyper

XML har tre sorters attributtyper: en strängtyp, en uppsättning symboltyper ("tokenized types") och uppräkningstyper. Strängtypen kan ha alla sorters literal data som värde; symboltyperna har varierande lexikala och semantiska begränsningar. Giltighetsbegränsningarna som angetts i grammatiken tillämpas efter det att attributvärdet har normaliserats enligt avsnitt 3.3 Attributlistdeklarationer.

Attributtyper
[54]  AttType ::= StringTypeTokenizedTypeEnumeratedType
[55]  StringType ::= 'CDATA'
[56]  TokenizedType ::= 'ID' [ VC: ID ]
[ VC: En ID per elementtyp ]
[ VC: Ingångsvärde för attributID ]
| 'IDREF' [ VC: IDREF ]
| 'IDREFS' [ VC: IDREF ]
| 'ENTITY' [ VC: Entitetsnamn ]
| 'ENTITIES' [ VC: Entitetsnamn ]
| 'NMTOKEN' [ VC: Namnsymbol ]
| 'NMTOKENS' [ VC: Namnsymbol ]

Giltighetsbegränsning: ID

Värdetypen ID måste överensstämma med namn-definitionen. Ett namn får inte förekomma fler än en gång i ett XML-dokument som ett värde av denna typ; dvs ID-värden måste på ett unikt sätt identifiera de element som bär dem.

Giltighetsbegränsning: En ID per elementtyp

Ingen elementtyp får ha fler än ett ID-attribut.

Giltighetsbegränsning: Ingångsvärde för ID-attribut

Ett ID-attribut måste ha #IMPLIED eller #REQUIRED som deklarerat ingångsvärde.

Giltighetsbegränsning: IDREF

Värdetypen IDREF måste överensstämma med Namn-definitionen [5] och värdetypen IDREFS måste överensstämma med Namn [6, "flera namn"]; varje Namn [5] måste överensstämma med värdet på ett ID-attribut i något element i XML-dokumentet; dvs IDREF-värden måste överensstämma med värdet på något ID-attribut.

Giltighetsbegränsning: Entitetsnamn

Värdetypen ENTITY måste överensstämma med Namn-definitionen [5], värdetypen ENTITIES måste överensstämma med Namn [6, "flera namn"]; varje Namn måste överensstämma med namnet på en icke analyserad entitet deklarerad i DTDn.

Giltighetsbegränsning: Namnsymbol

Värdetypen NMTOKEN måste överensstämma med namnsymbol-definitionen; värdetypen NMTOKENS måste överensstämma med namnsymboler.

Uppräkningsattribut kan anta ett av värdena i en lista av värden angivna i deklarationen. Det finns två sorters uppräkningstyper:

Uppräkningsattributtyper
[57] EnumeratedType ::= NotationTypeEnumeration
[58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' [
[
VC: Notationsattribut ]
VC: En notation per elementtyp ]
[59]  Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' [ VC: Uppräkning ]

Ett notations-attribut identifierar en notation, deklarerad i DTDn med anknutna system- och/eller public identifiers, vilka används för att tolka det element som attributen är knutet till.

Giltighetsbegränsning: Notationsattribut

Värden av denna typ måste överensstämma med ett av notations-namnen som finns i deklarationen. Alla notationsnamn i deklarationen måste deklareras.

Giltighetsbegränsning: En notation per elementtyp

Ingen elementtyp får ha mer än ett notationsattribut.

Giltighetsbegränsning: Uppräkning

Värden av denna typ måste överensstämma med en av namnsymbol-symbolerna i deklarationen.

För utbyte gäller att samma namnsymbol inte får förekomma mer än en gång i uppräkningsattributtyperna för en elementtyp.

3.3.2 Ingångsvärden för attribut ("Attribute Defaults")

En attributdeklaration ger information om huruvida attributets närvaro krävs och om inte, hur en XML-behandlare ska reagera om ett deklarerat attribut inte finns i ett dokument.

Ingångsvärden för attribut
[60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED'
| (('#FIXED' S)? AttValue) [ VC: Obligatoriskt attribut ]
[ VC: Godkänt ingångsvärde ]
[ WFC: Inget < i attributvärdena ]
[ VC: Låst ingångsvärde ]

#REQUIRED i en attributdeklaration betyder att attributet alltid måste anges, #IMPLIED att ett ingångsvärde saknas.Om deklarationen varken anger #REQUIRED eller #IMPLIED måste attributvärdet innehålla ett deklarerat ingångsvärde ("default value"). Nyckelordet #FIXED ["låst"] anger då att attributet alltid måste anta ingångsvärdet. Om ett ingångsvärde är deklarerat, när en XML-behandlare möter ett utelämnat attribut, måste den uppföra sig som om attributet vore närvarande med det deklarerade ingångsvärdet.

Giltighetsbegränsning: Obligatoriskt attribut

Om ingångsdeklarationen har nyckelordet #REQUIRED ["obligatorisk"] måste attributet specificeras för alla element med den angivna attributtypen i attributlist-deklarationen.

Giltighetsbegränsning: Godkänt ingångsvärde för attribut

Det deklarerade ingångsvärdet måste möta de lexikala begränsningarna för den deklarerade attributtypen.

Giltighetsbegränsning: Låst ingångsvärde för attribut

Om ett attribut har ett ingångsvärde deklarerat tillsammans med nyckelordet #FIXED, måste exempel på attributet överensstämma med ingångsvärdet.

Exempel på attributlist-deklarationer:

<!ATTLIST termdef
          id       ID      #REQUIRED
          name     CDATA   #IMPLIED>
<!ATTLIST list
          type     (bullets|ordered|glossary)  "ordered">
<!ATTLIST form
          method   CDATA    #FIXED "POST">

3.3.3 Normalisering av attributvärden

Innan ett attributvärde skickas till applikationen eller analyseras med avseende på giltighet, måste XML-behandlaren normalisera attributvärdet enligt följande:

Om det deklarerade värdet inte är CDATA, måste XML-behandlaren bearbeta det normaliserade attributvärdet ytterligare genom att ta bort inledande och avslutande blanktecken (#x20) och genom att ersätta sekvenser av blanktecken (#x20) med ett blanktecken (#x20).

Alla attribut som inte har någon inläst deklaration skall av en tolk som inte testar giltighet ["utan endast välutformning"] behandlas som om de vore deklarerade CDATA.

3.4 Villkorliga avsnitt

Villkorliga avsnitt är delar av dokumenttypsdeklarationens externa delmängd som ingår i eller har uteslutits ur DTDns logiska struktur baserat på nyckelordet som styr dem.

Villkorliga avsnitt
[61]  conditionalSect ::= includeSectignoreSect
[62]  includeSect ::= '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>'
[63]  ignoreSect ::= '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>'
[64]  ignoreSectContents ::= Ignore ('<![' ignoreSectContents ']]>' Ignore)*
[65]  Ignore ::= Char* - (Char* ('<![' | ']]>') Char*)

Villkorliga avsnitt kan liksom interna och externa DTD-delmängder innehålla en eller flera kompletta deklarationer, kommentarer, processinstruktioner eller inkapslade villkorliga avsnitt blandade med tomrum.

Om nyckelordet för det villkorliga avsnittet är INCLUDE, är innehållet i det villkorliga avsnittet en del av DTDn. Om nyckelordet för det villkorliga avsnittet är IGNORE, är innehållet i det villkorliga avsnittet inte en logisk del av DTDn. Notera att även innehållet i ignorerade villkorliga avsnitt måste, för att en analys ska vara tillförlitlig, läsas i ordning för att kunna upptäcka inkapslade villkorliga avsnitt och säkerställa att slutet på det yttersta (ignorerade) villkorliga avsnittet blir säkert upptäckt. Om ett villkorligt avsnitt med nyckelordet INCLUDE förekommer inom ett större villkorligt avsnitt med nyckelordet IGNORE, förkastas både det yttre och det inre villkorliga avsnittet.

Om nyckelordet för det villkorliga avsnittet är en parameterentitetsreferens, måste parameterentiteten ersättas med sitt innehåll innan XML-behandlaren bestämmer om den ska lyfta in eller förkasta det villkorliga avsnittet.

Ett exempel:

<!ENTITY % utkast 'INCLUDE' >
<!ENTITY % klart 'IGNORE' >
 
<![%utkast;[
<!ELEMENT bok (kommentarer*, rubrik, text, bilaga?)>
]]>
<![%klart;[
<!ELEMENT bok (rubrik, text, bilaga?)>
]]>

4. Fysiska strukturer

Ett XML-dokument kan bestå av en eller flera lagringsenheter. Dessa kallas entiteter; de har alla innehåll och är alla (utom dokumententiteten, se den externa DTD-delmängden) identifierade genom entitetsnamn. Varje XML-dokument har en entitet kallad dokumententiteten, som tjänar som startpunkten för XML-behandlaren och kan innehålla hela dokumentet.

Entiteter kan vara endera analyserade eller icke analyserade. En analyserad entitets innehåll refereras till genom sin ersättningstext. Denna text anses som en integrerad del av dokumentet.

En icke analyserad entitet är en resurs vars innehåll kan men inte behöver vara text och är den text behöver den inte vara XML. Varje icke analyserad entitet har en associerad notation, som identifieras av namnet. Utöver kravet att en XML-behandlare gör identifieringarna av entiteter och notationer tillgängliga för applikationen, lägger XML inte några begränsningar på innehållet i icke analyserade entiteter.

Analyserade entiteter anropas med namn genom entitetsreferenser. Icke analyserade entiteter anropas med namn, givna i värdet på ENTITY- eller ENTITIES-attribut.

Generella entiteter är entiteter för användning inom dokumentinnehållet. I denna specifikation är generella entiteter ibland refererade till med den icke kvalificerande termen entitet när det inte leder till någon tveksamhet. Parameterentiteter är analyserade entiteter för användning inom DTDn. Dessa två typer av entiteter använder olika former av referenser och är tillämpbara i olika sammanhang. Dessutom tar de olika namnrymder i anspråk; en parameterentitet och en generell entitet med samma namn är två åtskilda entiteter.

4.1 Tecken- och entitetsreferenser

En teckenreferens refererar till ett särskilt tecken i teckenuppsättningen ISO/IEC 10646, t.ex. till ett tecken som inte går att få fram direkt från tillgängliga inmatningsverktyg.

Teckenreferens
[66]  CharRef ::= '&#' [0-9]+ ';'
| '&#x' [0-9a-fA-F]+ ';' [ WFC: Giltigt tecken ]

Välutformningsbegränsning: Giltigt tecken

Vid användning av teckenreferenser måste det åberopade tecknet överensstämma med en definition av Char ["tecken"].

Om teckenreferensen börjar med "&#x" utgör siffrorna och bokstäverna fram till det avslutande ; en hexadecimal representation av tecknets kodnummer i ISO/IEC 10646. Om den enbart börjar med "&#", siffrorna och bokstäverna fram till det avslutande; en decimal representation av tecknets kodnummer.

En entitetsreferens refererar till innehållet i en namngiven entitet. Referenser till analyserade generella entiteter använder och-tecken (&) och semikolon (;) som skiljetecken. Parameterentitetsreferenser använder procent-tecken (%) och semikolon (;) som skiljetecken.

Entitetsreferens
[67]  Reference ::= EntityRefCharRef
[68]  EntityRef ::= '&' Name ';' [ WFC: Deklarerad entitet ]
[ VC: Deklarerad entitet ]
[ WFC: Analyserad entitet ]
[ WFC: Ingen rekursivitet ]
[69]  PEReference ::= '%' Name ';' [ VC: Deklarerad entitet ]
[ WFC: Ingen rekursivitet ]
[ WFC: I DTDn ]

Välutformningsbegränsning: Deklarerad entitet

I ett dokument utan någon DTD, ett dokument med enbart en intern DTD-delmängd som inte innehåller någon parameterentitetsreferens eller ett dokument med "standalone='yes'", måste namnet i entitetsreferensen överensstämma med det i en entitetsdeklaration, med det undantaget att välutformade dokument inte behöver deklarera någon av följande entiteter: amp, lt, gt, apos, quot. Deklarationen av en parameterentitet måste föregå varje referens till den. På samma sätt måste deklarationen av en generell entitet föregå varje referens till den i form av ett ingångsvärde i en attributlist-deklaration. Notera att om entiteter är deklarerade i en extern delmängd eller i externa parameterentiteter, behöver inte ("not obligated to") en XML-behandlare som inte testar giltighet ["utan endast välutformning"] läsa och bearbeta deras deklarationer. För sådana dokument gäller regeln att en entitet måste vara deklarerad bara som en välutformningsbegränsning om standalone='yes'.

Giltighetsbegränsning: Deklarerad entitet

I ett dokument med en extern delmängd eller externa parameterentiteter med "standalone='no'", måste det angivna namnet i entitetsreferensen överensstämma med det i en entitetsdeklaration. För utbyte måste giltiga dokument deklarera entiteterna amp, lt, gt, apos, quot, i den form som specificerats i "4.6 Fördefinierade entiteter". Deklarationen av en parameterentitet måste föregå varje referens till den. På samma sätt måste deklarationen av en generell entitet föregå varje referens till den i form av ett ingångsvärde i en attributlist-deklaration.

Välutformningsbegränsning: Analyserad entitet

En entitetsreferens får inte innehålla namnet på en icke analyserad entitet. Icke analyserade entiteter får endast åberopas i attributvärden som deklarerats som ENTITY eller ENTITIES.

Välutformningsbegränsning: Ingen rekursivitet

En analyserad entitet får inte innehålla en rekursiv referens till sig själv, vare sig direkt eller indirekt.

Välutformningsbegränsning: I DTDn

Parameterentitetsreferenser får bara förekomma i DTDn.

Exempel på tecken- och entitetsreferenser:

Tryck på <tangent>less-than</tangent> (&#x3C;)  för att spara alternativ.
Detta dokument gjordes på  &docdate; och
är sekretessbelagt &säkerhets-nivå;.

Exempel på en parameterentitetsreferens:

<!-- deklarera parameterentiteten "ISOLat2"...  -->
<!ENTITY % ISOLat2
          SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" >
<!-- ... referera till den. -->
%ISOLat2;

4.2 Entitetsdeklarationer

Entiteter deklareras som följer:

Entitetsdeklaration
[70]  EntityDecl ::= GEDeclPEDecl
[71]  GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>'
[72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
[73] EntityDef ::= EntityValue |  (ExternalID NDataDecl?)
[74]  PEDef ::= EntityValueExternalID

Namnet identifierar entiteten i en entitetsreferens eller, om det gäller en icke analyserad entitet, i värdet på ett ENTITY- eller ENTITIES-attribut. Om samma entitet deklareras fler än en gång är den först påträffade deklarationen bindande. Som användartillval kan en XML-behandlare utfärda en varning om entiteter är deklarerade flera gånger.

4.2.1 Interna entiteter

Om entitetsdefinitionen är ett EntityValue ["entitetsvärde"], kallas den definierade entiteten en intern entitet. Det finns inget separat fysiskt lagringsobjekt och entitetens innehåll är givet i deklarationen. Notera att samma behandling av entitets- och teckenreferenser i the literal entity value ["en sträng avgränsad av anföringstecken"] kan krävas för att skapa korrekt ersättningstext: see "4.5 Konstruktion av ersättningstext för interna entiteter".

En intern entitet är en analyserad entitet.

Exempel på en intern entitetsdeklaration:

<!ENTITY Pub-Status "Detta är en förhandspublicering  av specifikationen.">

4.2.2 Externa entiteter

Om en entitet inte är intern, är det en extern entitet, som deklareras enligt följande:

Extern entitetsdeklaration
[75] ExternalID ::= 'SYSTEM' S SystemLiteral
| 'PUBLIC' S PubidLiteral S SystemLiteral
[76]  NDataDecl ::= S 'NDATA' S Name [ VC: Deklarerad notation ]

Om NDataDecl föreligger, handlar det om en generell icke analyserad entitet, annars är det en analyserad entitet.

Giltighetsbegränsning: Deklarerad notation

Namnet måste överensstämma med det deklarerade namnet på en notation.

SystemLiteral kallas entitetens systemidentifikation. Det är en URI, som får användas för att hämta in entiteten. Notera att hash-tecknet (#) och fragmentidentifikation som ofta används med URIer formellt sett inte är en del av själva URIn. En XML-behandlare får signalera ett fel om en fragmentidentifikation är angiven som en del av en systemidentifikation. Om inte annat anges genom information utanför omfattningen av denna specifikation (t.ex. en speciell XML-elementtyp definierad av en särskild DTD eller en processinstruktion definierad av en särskild applikationsspecifikation), är relativa URIer relativa i förhållande till läget på den resurs där entitetsdeklarationen finns. En URI kan således vara relativ i förhållande till dokumententiteten, till entiteten som innehåller den externa DTD-delmängden eller till någon annan extern parameterentitet.

En XML-behandlare ska bearbeta ett icke-ASCII-tecken i en URI genom att representera tecknet i UTF-8 som en eller flera bytes och sedan växla dessa bytes genom det anvisade URI-förfarandet (dvs. genom att konvertera varje byte till %HH, där HH är den hexadecimala representationen av bytevärdet).

Som tillägg till en systemidentifikation kan en extern identifikation innehålla en public identifier. En XML-behandlare som försöker att tolka en entitets innehåll får använda en public identifier för att försöka att skapa en alternativ URI. Om XML-behandlaren inte kan göra det, måste den använda URIn såsom den har specificerats i innehållet mellan anföringstecknen i systemcitatet. Innan en test av överensstämmelse görs, måste alla tomrumssträngar i en public identifier normaliseras till ett blanktecken (#x20) samt inledande och avslutande tomrum tas bort.

Exempel på externa entitetsdeklarationer:

<!ENTITY open-hatch
          SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY  open-hatch
         PUBLIC  "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
           "http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY  hatch-pic
         SYSTEM  "../grafix/OpenHatch.gif"
          NDATA gif >

4.3 Analyserade entiteter

4.3.1 Textdeklarationen

Externa analyserade entiteter får börja med en textdeklaration.

Textdeklaration
[77]  TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'

Textdeklarationen måste skrivas ut explicit, inte anges som referens till en analyserad entitet. I en extern analyserad entitet får en textdeklaration inte förekomma på annan plats än i början på entiteten.

4.3.2 Välutformade analyserade entiteter

Dokumententiteten är välutformad om den överensstämmer med en dokument-definition. En extern generell analyserad entitet är välutformad om den överensstämmer med definitionen av en extParsedEnt ["se nedan"]. En extern parameterentitet är välutformad om den överensstämmer med definitionen av en extPE. ["se nedan"]

Välutformad extern analyserad entitet
[78]  extParsedEnt ::= TextDecl? content
[79] extPE ::= TextDecl? extSubsetDecl

En intern generell analyserad entitet är välutformad om dess ersättningstext överensstämmer med definitionen av innehåll. Alla interna parameterentiteter är välutformade per definition.

En konsekvens av välutformning i entiteter är att den logiska och fysiska strukturen i ett XML-dokument är korrekt inkapslade; ingen starttagg, sluttagg, tomelementstagg, inget element, ingen kommentar, processinstruktion, teckenreferens eller entitetsreferens får börja i en entitet och sluta i en annan.

4.3.3 Teckenkoder i entiteter

Varje extern analyserad entitet i ett XML-dokument kan använda olika koder för sina tecken. Alla XML-behandlare måste kunna läsa entiteter i endera UTF-8 eller UTF-16.

Entiteter kodade i UTF-16 måste börja med den byteordningsmärkning ("Byte Order Mark") som är beskriven i ISO/IEC 10646 Annex E och Unicode Appendix B (the ZERO WIDTH NO-BREAK SPACE character, #xFEFF). Detta är en kodsignatur, inte en del av vare sig uppmärkning eller teckendata i XML-dokumentet. XML-behandlare måste kunna använda detta tecken för att skilja mellan UTF-8- och UTF-16-kodade dokument.

Även om det bara krävs av en XML-behandlare att den ska kunna läsa entiteter i UTF-8- och UTF-16-kodning, är det erkänt att andra teckenuppsättningar används runt om i världen och det kan bli önskvärt för XML-behandlare att kunna läsa entiteter som även använder sådana. Analyserade entiteter som lagras i en annan teckenkod än UTF-8 eller UTF-16 måste börja med en textdeklaration som innehåller en teckenkodsdeklaration:

Teckenkodsdeklaration
[80]  EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' |  "'" EncName "'" )
[81]  EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')* /* Teckenkodsnamnet innehåller bara latinska tecken */

I dokumententiteten är teckenkodsdeklarationen en del av XML-deklarationen. EncName ["Teckenkodsnamnet"] är namnet på den teckenuppsättning som används.

I en teckenkodsdeklaration skall värdena "UTF-8", "UTF-16", "ISO-10646-UCS-2" och "ISO-10646-UCS-4" användas för de olika teckenkoderna och transformationerna av Unicode /ISO/IEC 10646, värdena "ISO-8859-1", "ISO-8859-2", ... "ISO-8859-9" användas för de aktuella delarna av ISO 8859 samt värdena "ISO-2022-JP", "Shift_JIS" och "EUC-JP" användas för de olika formerna för teckenkodning i JIS X-0208-1997. XML-behandlare får stödja andra teckenkoder. Det rekommenderas att teckenkoder förutom de nyss nämnda som är registrerade (som charsets ["teckenuppsättningar"]) hos the Internet Assigned Numbers Autority [IANA], ska åberopas med sina registrerade namn. Notera att dessa registrerade namn är definierade som oberoende av kast ["om de är versaler eller gemener"], vilket innebär att XML-behandlare som stödjer dessa registrerade namn, ska kunna göra det oberoende av kast.

I frånvaron av information från ett externt överföringsprotokoll (t.ex. HTTP eller MIME), är det ett fel för en entitet som innehåller en teckenkodsdeklaration att presenteras för XML-behandlaren i en annan teckenkod än den som är angiven i deklarationen. Det är också ett fel för en entitet som varken börjar med en byteordningsmärkning ("Byte Order Mark") eller en teckenkodsdeklaration att använda någon annan teckenkod än UTF-8. Notera att eftersom ASCII är en delmängd av UTF-8, behöver normala ASCII-entiteter strikt sett inte en teckenkodsdeklaration.

Det är ett fel om en extern textdeklaration förekommer någon annanstans än i början av en extern entitet.

Det är ett kritiskt fel ("fatal error") när en XML-behandlare möter en entitet med en teckenkod som den inte kan bearbeta.

Exempel på teckenkodsdeklarationer:

<?xml encoding='UTF-8'?>
<?xml encoding='EUC-JP'?>

4.4 Bearbetning av entiteter och referenser i en XML-behandlare

Tabellen nedan summerar det sammanhang som teckenreferenser, entitetsreferenser och anrop av icke analyserade entiteter kan förekomma i och det nödvändiga beteeendet hos en XML-behandlare i respektive fall. Uttrycken i den vänstra kolumnen beskriver sammanhanget:

Referens i innehållet
som en referens var som helst efter starttaggen och före sluttaggen i ett element; motsvarar begreppet innehåll.
Referens i attributvärde
som en referens inom endera ett attributvärde i en starttagg eller ett ingångsvärde i en attributdeklaration; motsvarar begreppet attributvärde.
Finns som attributvärde
som ett namn - inte en referens - i endera ett attributvärde som har deklarerats som typen ENTITY eller som en av de symboler i attributvärdet som åtskiljs med tomrum och som har deklarerats som typen ENTITIES.
Referens i entitetsvärde
som en referens inom en parameter- eller en intern entitets entitetsvärde ["innanför anföringstecken"] i entitetsdeklarationen; motsvarar begreppet entitetsvärde.
Referens i DTD
som en referens inom endera den interna eller den externa delmängden i DTDn, men utanför ett entitetsvärde eller attributvärde.
Entitetstyp Tecken
ParameterIntern
generell
Extern analyserad
generell
Icke
analyserad
Referens
i innehåll
Inte accepterad Infogad Infogad vid
giltighetstest
FörbjudetInfogad
Referens i
attributvärde
Inte accepterad Infogad inom
anföringstecken
Förbjudet FörbjudetInfogad
Finns som
attributvärde
Inte accepterad Förbjudet Förbjudet Underrätta Inte accepterad
Referens i
entitetsvärde
Infogad inom
anföringstecken
Överhoppad ÖverhoppadFörbjudet Infogad
Referens
i DTD
Infogad som PE Förbjudet Förbjudet Förbjudet Förbjudet

4.4.1 Inte accepterad

Utanför DTDn har %-tecknet ingen särskild betydelse. Det som är en parameterentitetsreferens i DTDn är således inte accepterat som uppmärkning i innehållet. På samma sätt är namn på icke analyserade entiteter inte accepterade, utom när de förekommer i värdet på ett korrekt deklarerat attribut ["deklarerat som ENTITY eller ENTITIES"].

4.4.2 Infogad

En entitet är infogad när dess ersättningstext är återfunnen och bearbetad i stället för själva referensen som om den vore del av dokumentet på det ställe där referensen låg. Ersättningstexten får innehålla både teckendata och (utom för parameterentiteter) uppmärkning, som måste accepteras på vanligt sätt, utom att ersättningstexten för entiteter som används för att undvika uppmärkningstecken (entiteterna amp, lt, gt, apos, quot) alltid behandlas som data. (Strängen "AT&amp;T;" expanderas till "AT&T;" och det återstående och-tecknet blir inte tolkat som ett skiljetecken för en entitetsreferens.) En teckenreferens är infogad när det avsedda tecknet är bearbetat i stället för referensen.

4.4.3 Infogad vid giltighetstest

När en XML-behandlare accepterar en referens till en analyserad entitet, måste den, för att testa giltigheten ("validate") av dokumentet, infoga entitetens ersättningstext. Om entiteten är extern och XML-behandlaren inte försöker att testa giltigheten av XML-dokumentet, får XML-behandlaren, men behöver inte, infoga entitetens ersättningstext. Om en tolk som inte testar giltighet ["utan endast välutformning"] underlåter att infoga ersättningstexten, måste den underrätta applikationen att den accepterade, men inte läste entiteten.

Denna regel är baserad på konstaterandet att den automatiska infogningen som SGMLs och XMLs entitetsmekanismer erbjuder för att i första hand stödja moduluppbyggt författande, inte nödvändigtvis är lämplig för andra applikationer - särskilt inte dokumentläsning ("-browsing"). En läsare som till exempel stöter på en extern analyserad entitetsreferens kan välja att erbjuda en visuell indikation på entitetens närvaro och hämta den för att endast visa på uppmaning.

4.4.4 Förbjudet

Följande är förbjudet och utgör kritiska fel:

4.4.5 Infogad inom anföringstecken

När en entitetsreferens förekommer i ett attributvärde, eller en parameterentitetsreferens förekommer i ett entitetsvärde innanför anföringstecken, behandlas deras ersättningstext i stället för själva referensen som om de vore del av dokumentet på det ställe där referensen låg, utom att ett enkelt eller dubbelt anföringstecken i ersättningstexten alltid behandlas som normala datatecken och inte avslutar texten inom anföringstecknen. Till exempel är detta välutformat:

<!ENTITY % JN '"Ja"' >
<!ENTITY VadHanSa "Han sa %JN;" >

medan detta inte är:

<!ENTITY EndAttr "27'" >
<element attribute='a-&EndAttr;>

4.4.6 Underrätta

När namnet på en icke analyserad entitet förekommer som en symbol i värdet på ett attribut med den deklarerade typen ENTITY eller ENTITIES, måste en XML-behandlare som testar giltighet underrätta applikationen för system- eller public-identifikationen (om det finns någon) om både entiteten och dess anknutna notation.

4.4.7 Överhoppad ("Bypassed")

När en generell entitetsreferens förekommer i entitetsvärdet i en entitetsdeklaration, blir den överhoppad och lämnad som den är.

4.4.8 Infogad som PE

Precis som med externa analyserade entiteter behöver parameterentiteter bara bli infogade vid gitighetstest. När en parameterentitetsreferens är accepterad i DTDn och infogad, blir dess ersättningstext utökad med tillägg av ett inledande och ett avslutande blanktecken (#x20). Syftet är att begränsa ersättningstexten i parameterentiteter till att innehålla ett låst antal grammatiska begrepp i DTDn.

4.5 Konstruktion av ersättningstext för interna entiteter

Vid diskussionen om behandlingen av interna entiteter, är det nyttigt att urskilja två former av entitetsvärden. Entitetsvärdet inom anföringstecken är den citerade strängen i entitetsdeklarationen motsvarande begreppet entitetsvärde. Ersättningstexten är innehållet i entiteten efter ersättning av teckenreferenser och parameterentitetsreferenser.

På det sätt som entitetsvärdet inom anföringstecken är angivet i en intern entitetsdeklaration (EntityValue) kan det innehålla tecken-, parameterentiteter och generella entitetsreferenser. Sådana referenser måste helt inkapslas i entitetsvärdet inom anföringstecknen. Den faktiska ersättningstexten som är infogad på ovan angivet sätt, måste innehålla ersättningstexten från varje åberopad parameterentitet och måste innehålla det åberopade tecknet i stället för varje teckenreferens i entitetsvärdet inom anföringstecken. Emellertid måste generella entitetsreferenser bli lämnade som de är, oexpanderade. Till exempel med följande deklarationer givna:

<!ENTITY % pub    "&#xc9;ditions Gallimard" >
<!ENTITY   rights "All rights reserved" >
<!ENTITY   book   "La Peste: Albert Camus, 
&#xA9; 1947 %pub;. &rights;" >

blir ersättningstexten för entiteten "book":

La Peste: Albert Camus, 
© 1947 Éditions Gallimard. &rights;

Den generella entitetsreferensen "&rights;" skulle ha expanderats om referensen "&book;" hade förekommit i dokumentets innehåll eller i ett attributvärde.

Dessa enkla regler kan få en komplex växelverkan. För en detaljerad diskussion om ett svårt exempel, se "D. Expansion av entitets- och teckenreferenser".

4.6 Fördefinierade entiteter

Entitets- och teckenreferenser kan både användas för att undvika mindre-än-tecknet, och-tecknet och andra skiljetecken. En uppsättning av generella entiteter (amp, lt, gt, apos, quot) har specificerats för detta ändamål. Numeriska teckenreferenser kan också användas; de blir omedelbart expanderade när de har accepterats och måste behandlas som teckendata. De numeriska teckenreferenserna "&#60;" och "&#38;" kan således användas för att undvika < och & när de uppträder i teckendata.

Alla XML-behandlare måste acceptera dessa entiteter, oberoende av om de är deklarerade eller inte. För utbyte skall ett giltigt XML-dokument deklarera dessa entiteter precis som alla andra entiteter innan de används. Om entiteterna i fråga är deklarerade måste de deklareras som interna entiteter vilkas ersättningstext är det enda tecken som ska undvikas eller som en teckenreferens till det tecknet, vilket visas nedan.

<!ENTITY lt     "&#38;#60;"> 
<!ENTITY gt     "&#62;"> 
<!ENTITY amp    "&#38;#38;"> 
<!ENTITY apos   "&#39;"> 
<!ENTITY quot   "&#34;"> 

Notera att <- och &-tecknen i deklarationen av "lt" och "amp" har undvikits dubbelt för att möta kravet på att entitetsersättningar skall vara välutformade.

4.7 Notationsdeklarationer

Notationer identifierar med namn formatet på icke analyserade entiteter, formatet på element som bär ett notationsattribut eller den applikation som en processinstruktion anropar.

Notationsdeklarationer anger ett namn på notationen för användning i entitets- och attribut-listdeklarationer och i attributspecifikationer och en extern identifikation för den notation som får tillåta en XML-behandlare eller dess klientapplikation att lokalisera en hjälpapplikation som kan bearbeta data i den angivna notationen.

Notationsdeklarationer
[82]  NotationDecl ::= '<!NOTATION' S Name S (ExternalIDPublicID) S? '>'
[83]  PublicID ::= 'PUBLIC' S PubidLiteral

XML-behandlare måste förse applikationer med namnet och de externa identifikationerna för alla notationer som deklarerats och som åberopats i ett attributvärde, en attributdefinition eller en entitetsdeklaration. De får dessutom lösa upp den externa identifikationen till en systemidentifikation, ett filnamn eller annan information som är nödvändig för att tillåta applikationen att kalla på en behandlare av data i den beskrivna notationen. (Det är emellertid inte ett fel för XML-dokument att deklarera och åberopa notationer för vilka notationsspecifika applikationer inte är tillgängliga inom det system där XML-behandlaren eller applikationen arbetar.)

4.8 Dokumententitet

Dokumententiteten tjänar som rot för entitetsträdet och en startpunkt för en XML-behandlare. Denna specifikation specificerar inte hur dokumententiteten ska lokaliseras av en XML-behandlare. I motsats till andra entiteter har dokumententiteten inget namn och kan mycket väl förekomma i inmatningsflödet hos en XML-behandlare utan någon identifikation alls.

5. Konformitet

5.1 XML-behandlare som testar respektive inte testar giltighet

Konforma XML-behandlare delar upp sig i två klasser; sådana som testar respektive inte testar giltighet.

Såväl de XML-behandlare som testar giltighet som de som inte gör det måste rapportera överträdelser av välutformningsbegränsningar enligt denna specifikation från innehållet i dokumententiteten och alla andra analyserade entiteter som de läser.

XML-behandlare som testar giltighet måste rapportera överträdelser av de begränsningar som uttryckts av deklarationerna i DTDn och varje icke uppfylld giltighetsbegränsning som angivits i denna specifikation. För att uppnå det måste XML-behandlare som testar giltighet läsa och bearbeta hela DTDn och alla externa analyserade entiteter som åberopats i dokumentet.

XML-behandlare som inte testar giltighet behöver bara analysera dokumententiteten, inklusive hela den interna DTD-delmängden med avseende på välutformning. Eftersom de inte behöver analysera dokumentet med avseende på giltighet, måste de bearbeta alla deklarationer de läser i den interna DTD-delmängden och i alla parameterentiter som de läser ända fram till den första referensen till en parameterentitet som de inte läser. Dvs de måste använda informationen i dessa deklarationer för att normalisera attributvärdena, infoga ersättningstexten för interna entiteter och förse attraibuten med ingångsvärden. De får inte bearbeta entitetsdeklarationer eller attributlist-deklarationer som de möter efter en referens till en parameterentitet som inte är läst, eftersom entiteten kan ha innehållit övertrumfande deklarationer.

5.2 Användning av XML-behandlare

Beteendet hos en XML-behandlare som testar giltighet är högst förutsägbart; den måste läsa varje del av ett dokument och rapportera alla välutformnings- och giltighetsöverträdelser. Mindre krävs av en XML-behandlare som inte testar giltighet; den behöver inte läsa någon annan del av dokumentet än dokumententiteten. Detta har två konsekvenser som kan vara viktiga för användare av XML-behandlare:

För maximal tillförlitlighet i samarbetet mellan olika XML-behandlare skall applikationer som använder XML-behandlare som inte analyserar giltighet ["utan endast välutformning"] inte bygga på beteenden som inte krävs av sådana verktyg. Applikationer som kräver hjälpmedel som t.ex. användningen av ingångsvärden för attribut eller interna entiteter, som är deklarerade i externa entiteter, skall använda XML-behandlare som testar giltighet.

6. Beteckningssätt

Den formella grammatiken i XML är given i denna specifikation genom en enkel användning av beteckningssättet Extended Backus-Naur Form (EBNF). Varje regel i grammatiken definierar ett begrepp i formen:

begrepp ::= uttryck

Begrepp är skrivna med en inledande versal om de är definierade av ett regelmässigt uttryck eller annars med en inledande gemen ["liten bokstav"]. Innehållet i "literal strings" är placerat mellan anföringstecken.

Inom uttrycket som anges på högersidan av en regel används följande uttryck för att kontrollera överensstämmelse med strängar som innehåller ett eller flera tecken:

#xN
där N är ett hexadecimalt heltal; uttrycket ansluter till tecknet i ISO/IEC 10646 vars kanoniska (UCS-4) kodvärde, tolkat som ett binärt tal utan förtecken ("unsigned"), har det angivna värdet. Antalet inledande nollor i #xN-formen är oväsentligt; antalet inledande nollor i det motsvarande kodvärdet styrs av den teckenkod som används och är inte betecknande för XML.
[-'()+,./:=?;!*#@$_%]
överensstämmer med något av de angivna tecknen.
[a-zA-Z], [#xN-#xN]
överensstämmer något tecken med ett värde inom och inklusive det angivna intervallet/en.
[^a-z], [^#xN-#xN]
överensstämmer något tecken med ett värde utanför det angivna intervallet.
[^abc], [^#xN#xN#xN]
överensstämmer något tecken med ett värde som inte är bland de angivna tecknen.
"string"
överensstämmer med en "literal string" som överensstämmer med det som anges innanför citationstecknen.
'string'
överensstämmer med en "literal string" som överensstämmer med det som anges innanför apostroftecknen.
Dessa begrepp kan vara kombinerade för att överensstämma med mer komplexa mönster som nedan, där A och B representerar enkla uttryck:
(uttryck)
uttryck behandlas som en enhet och kan kombineras som beskrivs i denna lista.
A?
överensstämmer med A eller ingenting; valfritt A.
A B
överensstämmer med A följt av B.
A | B
överensstämmer med A eller B men inte båda.
A - B
överensstämmer med varje sträng som överensstämmer med A men inte överensstämmer med B.
A+
överensstämmer med en eller flera förekomster av A.
A*
överensstämmer med ingen, en eller flera förekomster av A.
Andra beteckningssätt som används i definitionerna är:
/* ... */
kommentar.
[ wfc: ... ]
välutformningsbegränsning ("well-formedness constraint"); detta identifierar namnet på en begränsning för välutformade dokument anknuten till en definition.
[ vc: ... ]
giltighetsbegränsning ("validity constraint"); detta identifierar namnet på en begränsning för giltiga dokument anknuten till en definition.

Bilagor

A. Referenser

A.1 Normativa referenser

IANA
(Internet Assigned Numbers Authority) Official Names for Character Sets, ed. Keld Simonsen m.fl. Se 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 tillägg AM 1 through AM 7).
Unicode
The Unicode Consortium. The Unicode Standard, Version 2.0. Reading, Mass.: Addison-Wesley Developers Press, 1996.

A.2 Andra referenser

Aho/Ullman
Aho, Alfred V., Ravi Sethi och Jeffrey D. Ullman.Compilers: Principles, Techniques, and Tools. Reading: Addison-Wesley, 1986, rpt. corr. 1988.
Berners-Lee m.fl.
Berners-Lee, T., R. Fielding och L. Masinter. Uniform Resource Identifiers (URI): Generic Syntax and Semantics. 1997. (Pågående arbete; se uppdateringar till RFC1738.)
Brüggemann-Klein
Brüggemann-Klein, Anne. Formal Models in Document Processing. Habilitationsschrift. Faculty of Mathematics at the University of Freiburg, 1993, available at ftp://ftp.informatik.uni-freiburg.de/documents/papers/brueggem/habil.ps
Brüggemann-Klein och Wood
A. Brüggemann-Klein und D. Wood. Deterministic Regular Languages. Extended abstract in A. Finkel, M. Jantzen, Hrsg., STACS 1992, S. 173-184. Springer-Verlag, Berlin 1992. Lecture Notes in Computer Science 577. Full version titled "One-Unambiguous Regular Languages" in Information and Computation 140 (2): 229--253, February 1998.
Clark
James Clark. Comparison of SGML and XML. Se 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. Teckenklasser

Med beaktande av de i Unicode-standarden definierade egenskaperna klassas tecken som bastecken (bl.a. innehåller dessa de alfabetiska tecknen i det latinska alfabetet utan diakritiska tecken ["accenter, ö-prickar osv"]), ideografiska tecken och kombinationstecken (bl.a. innehåller denna klass de flesta diakritiska tecknen). Dessa klasser kombineras för att utforma klassen bokstäver ("letters"). Siffror och skiljetecken är också representerade.

Tecken
[84] Letter ::= BaseCharIdeographic
[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]

De teckenklasser som definierats här kan härledas från Unicodes teckendatabas enligt nedan:

C. XML och SGML (icke normativt)

XML är utformat som en delmängd av SGML på så sätt att varje giltigt XML-dokument också skall vara ett godkänt ("conformant") SGML-dokument. För en detaljerad jämförelse av de ytterligare begränsningar som XML ger för dokument utöver de som finns i SGML, se [Clark].

D. Expansion av entitets- och teckenreferenser (icke normativt)

Denna bilaga innehåller några exempel som illustrerar en följd av identifieringar och expansioner av entitets- och teckenreferenser, vilket har specificerats i "4.4 Bearbetning av entiteter och referenser i en XML-behandlare".

Om DTDn innehåller deklarationen

<!ENTITY exempel "<p>Ett och-tecken (&#38;#38;) får undvikas
numeriskt (&#38;#38;#38;) eller med en generell entitet
(&amp;amp;).</p>" >

kommer XML-behandlaren att acceptera teckenreferenserna när den tolkar entitetsdeklarationen och lösa upp dem innan den lagrar följande sträng som värde på entiteten "exempel":

<p>Ett och-tecken (&#38;) får undvikas
numeriskt (&#38;#38;) eller med en generell entitet
(&amp;amp;).</p>

En referens i dokumentet till "&exempel;" kommer att göra att text analyseras på nytt, varvid start- och slut-taggarna i elementet "p" kommer att accepteras och de tre referenserna accepteras och expanderas, vilket resulterar i ett "p"-element med följande innehåll (allt är data - inte skiljetecken eller uppmärkning):

Ett och-tecken (&) får undvikas
numeriskt (&#38;) eller med en generell entitet
(&amp;).

Ett mer komplext exempel illustrerar reglerna och deras konsekvenser fullt ut. I följande exempel är radnumren enbart till för referens.

1 <?xml version='1.0'?>
2 <!DOCTYPE test [
3 <!ELEMENT test (#PCDATA) >
4 <!ENTITY % xx '&#37;zz;'>
5 <!ENTITY % zz '&#60;!ENTITY knepig "fel-benägen" >' >
6 %xx;
7 ]>
8 <test>Detta prov visar en &knepig; metod.</test>

Detta producerar följande:

E. Deterministiska innehållsmodeller (icke normativt)

För kompatibilitet krävs det att innehållsmodeller i elementtypsdeklarationer blir deterministiska.

SGML kräver deterministiska innehållsmodeller (SGML kallar dem "otvetydiga"). XML-behandlare som byggts för att använda SGML-system kan signalera en icke deterministisk innehållsmodell som fel.

T.ex. är innehållsmodellen ((b, c) | (b, d)) icke deterministisk, därför att givet ett inledande b kan inte tolken avgöra vilket b i modellen som stämmer överens utan att titta i förväg för att se vilket element som följer efter b. I detta fall kan de två referenserna till b reduceras till en enda referens, vilket ger modellen följande utseende (b, (c | d)). Ett inledande b överensstämmer nu tydligt bara med ett enda namn i innehållsmodellen. Tolken behöver inte titta i förväg för att se vad som följer; endera c eller d kommer att accepteras.

Mer formellt sett: en ändlig nivå-robot ("state automaton") kan skapas ur en innehållsmodell med användning av standardalgoritmer, t.ex. algoritm 3.5 i avsnitt 3.9 av Aho, Sethi och Ullman [Aho/Ullman]. I många sådana algoritmer skapas en tilläggsuppsättning för varje position i det regelrätta uttrycket (dvs. för varje löv-nivå i syntaxträdet för det regelrätta uttrycket). Om någon position har en tilläggsuppsättning i vilken mer än en åtföljande position har samma elementtypsnamn, är innehållsmodellen felaktig och får anges som ett fel.

Det finns algoritmer som tillåter att många, men inte alla, icke deterministiska innehållsmodeller får reduceras automatiskt till ekvivalenta deterministiska modeller; se Brüggemann-Klein 1991 [Brüggemann-Klein].

F. Automatiskt fastställande av teckenuppsättningar (icke normativt)

XMLs teckenuppsättningsdeklaration fungerar som en intern etikett på varje entitet, som anger vilken teckenuppsättning som används. Innan en XML-behandlare emellertid kan läsa den interna etiketten, måste den uppenbarligen veta vilken teckenuppsättning som används - vilket är vad den interna etiketten försöker att ange. I det generella fallet är detta en hopplös situation. I XML är det emellertid inte helt hopplöst på grund av att XML begränsar det generella fallet på två sätt: varje tillämpning antas stödja bara en begränsad uppsättning teckenkoder och XMLs teckenuppsättningsdeklaration är begränsad i position och innehåll för att kunna göra det möjligt att automatiskt fastställa den teckenuppsättning som används i varje entitet i normala fall. I många fall finns också andra källor för information tillgänglig utöver själva XML-dataflödet. Två fall kan urskiljas beroende på om XML-entiteten är presenterad för XML-behandlaren utan eller med någon åtföljande (extern) information. Vi betraktar det första fallet först.

Eftersom varje XML-entitet som inte är i UTF-8- eller i UTF-16-format måste börja med en teckenuppsättningsdeklaration i XML, i vilken de första tecknen måste vara '<?xml', kan varje godkänd XML-behandlare efter två till fyra inmatade oktetter fastställa vilket av de åtföljande alternativen som gäller. När den läser denna lista, kan den ha hjälp av att veta att i UCS-4 motsvaras '<' av "#x0000003C" och '?' av "#x0000003F" samt byteordningsmärkningen som krävs för UTF-16-dataflöden är "#xFEFF".

(Den angivna algoritmen fungerar inte för UTF-7.)

Denna automatiska fastställelsenivå är tillräcklig för att läsa teckenuppsättningsdeklarationer i XML och tolka teckenkodsidentifieraren, som fortfarande är nödvändig för att urskilja de individuella medlemmarna i varje teckenkodsfamilj (dvs. att skilja UTF-8 från 8859 och delarna av 8859 från varandra eller att urskilja den specifika EBCDIC-kodsida som används, osv.).

Eftersom innehållet i teckenuppsättningsdeklarationen är begränsad till ASCII-tecken, kan en XML-behandlare tillförlitligt läsa hela teckenuppsättningsdeklarationen så fort den har fastställt vilken kodfamilj som används. Eftersom i praktiken alla brett använda teckenkoder hamnar i en av kategorierna ovan, medger teckenuppsättningsdeklarationen i XML en godtagbart tillförlitlig beskrivning av teckenuppsättningar, även då externa informationskällor på nivån för operativsystem eller överföringsprotokoll inte är tillförlitliga.

När väl XML-behandlaren har fastställt den använda teckenuppsättningen, kan den agera på förväntat sätt, genom att endera infoga en separat inmatningsrutin för varje alternativ eller kalla på själva konverteringsfunktionen för varje inmatat tecken.

Liksom varje egen-definierat system kommer teckenuppsättningsdeklarationen i XML inte att fungera om varje mjukvara byter entitetens teckenuppsättning eller -kod utan att uppdatera teckenuppsättningsdeklarationen. De som tillämpar teckenkodsrutiner måste vara försiktiga för att säkra tillförlitligheten i den interna och externa information som används för att beskriva entiteten.

Det andra möjliga fallet uppkommer när XML-entiteten är åtföljd av teckenkodsinformation, som i vissa filsystem och nätverksprotokoll. När flera informationskällor är tillgängliga, måste deras inbördes prioritet och den angivna metoden för att lösa konflikter specificeras som en del av det högnivå-protokoll ("higher-level protocol") som används för XML. Regler för den inbördes prioriteringen av den interna märkningen och MIME-typmärkningen i t.ex. ett externt protokollshuvud skall utgöra del av RFC-dokumentet som definierar MIME-typerna för text/xml och applikation/xml. Av utbytesskäl är emellertid följande regler rekommenderade.

Dessa regler träder bara in i frånvaro av dokumentation av protokoll-nivån. I synnerhet när MIME-typerna text/xml och applikation/xml är definierade övertrumfar rekommendationerna i den relevanta RFCn dessa regler.

G. W3Cs arbetsgrupp för XML ("W3C XML Working Group") (icke normativt)

Denna specifikation togs fram och godkändes för publicering av W3Cs arbetsgrupp för XML (WG). WGs godkännande av denna specifikation innebär inte nödvändigtvis att alla WG-medlemmar röstade för dess godkännande. De aktuella och tidigare medlemmarna av XML WG är:

Jon Bosak, Sun (ordförande); James Clark (teknisk ledning); Tim Bray, Textuality and Netscape (XML-redaktör); Jean Paoli, Microsoft (XML-redaktör); C. M. Sperberg-McQueen, U. of Ill. (XML-redaktör); Dan Connolly, W3C (W3C-kontaktman); Paula Angerstein, Texcel; Steve DeRose, INSO; Dave Hollander, HP; Eliot Kimber, ISOGEN; Eve Maler, ArborText; Tom Magliery, NCSA; Murray Maloney, Muzmo och Grif; Makoto Murata, Fuji Xerox Information Systems; Joel Nava, Adobe; Conleth O'Connell, Vignette; Peter Sharpe, SoftQuad; John Tigue, DataChannel

Copyright  ©  1998 W3C (MIT, INRIA, Keio ), All Rights Reserved. W3C liability, trademark, dokument use and software licensing rules apply.