XML 1.1-Dokumentgrammatik

(Auszug aus "XML in a Nutshell" von Elliotte Rusty Harold & W. Scott Means)

Im Folgenden finden Sie die Extended Backus-Naur-Format (EBNF)-Produktionsregeln für die XML 1.1-Empfehlung.

EBNF-Grammatik für XML 1.1

Dokument

[1] document ::= prolog22 element39 Misc27* - Char2* RestrictedChar2a Char2*

Zeichenbereich

[2] Char ::= [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */ [2a] RestrictedChar ::= [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]

Whitespace

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

Namen und Token

[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a] NameChar ::= NameStartChar4 | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5] Name ::= NameStartChar4 ( NameChar4a)*
[6] Names ::= Name5 (#x20 Name5)*
[7] Nmtoken ::= ( NameChar4a)+
[8] Nmtokens ::= Nmtoken7(#x20 Nmtoken7)*

Literale

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

Textdaten

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

Kommentare

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

Verarbeitungsanweisungen

[16] PI ::= '<?' PITarget17( S3( Char2* - ( Char2* '?>' Char2*)))? '?>'
[17] PITarget ::= Name5 - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

CDATA-Abschnitte

[18] CDSect ::= CDStart19 CData20 CDEnd21
[19] CDStart ::= '<![CDATA['
[20] CData ::= ( Char2* - ( Char2* ']]>' Char2*))
[21] CDEnd ::= ']]>'

Prolog

[22] prolog ::= XMLDecl23 Misc27* ( doctypedecl28 Misc27*)?
[23] XMLDecl ::= '<?xml' VersionInfo24 EncodingDecl80? SDDecl32? S3?'?>'
[24] VersionInfo ::= S3 'version' Eq25("'" VersionNum26 "'" | '"' VersionNum26 '"')
[25] Eq ::= S3? '=' S3?
[26] VersionNum ::= '1.1'
[27] Misc ::= Comment15 | PI16 | S3

Dokumenttyp-Definition

[28] doctypedecl ::= '<!DOCTYPE' S3 Name5( S3 ExternalID)? S3? ('[' intSubset28b']' S3?)? '>'
[28a] DeclSep ::= PEReference69 | S3
[28b] intSubset ::= ( markupdecl29 | DeclSep28a)*
[29] markupdecl ::= elementdecl45 | AttlistDecl52 | EntityDecl70 | NotationDecl82 | PI16 | Comment15

Externe Teilmenge

[30] extSubset ::= TextDecl77? extSubsetDecl31
[31] extSubsetDecl ::= ( markupdecl29 | conditionalSect61 | DeclSep28a)*

Standalone-Dokument-Deklaration

[32] SDDecl ::= #x20+ 'standalone' Eq25(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"'))

Element

[39] element ::= EmptyElemTag44 | STag40 content43 ETag42

Start-Tag

[40] STag ::= '<' Name5 ( S3 Attribute41)* S3? '>'
[41] Attribute ::= Name Eq AttValue

End-Tag

[42] ETag ::= '</' Name5 S3? '>'

Elementinhalte

[43] content ::= CharData14? (( element39 | Reference67 | CDSect18 | PI16 | Comment15) CharData14?)*

Tags für leere Elemente

[44] EmptyElemTag ::= '<' Name5( S3 Attribute41)* S3? '/>'

Elementtyp-Deklaration

[45] elementdecl ::= '<!ELEMENT' S3 Name5 S3 contentspec46 S3? '>'
[46] contentspec ::= 'EMPTY' | 'ANY' | 51 | children47

Modelle von Elementinhalten

[47] children ::= ( choice49 | seq50) ('?' | '*' | '+')?
[48] cp ::= ( Name5 | choice49 | seq50) ('?' | '*' | '+')?
[49] choice ::= '(' S3? cp48( S3? '|' S3? cp48)+ S3? ')'
[50] seq ::= '(' S3? cp48( S3? ',' S3? cp48)* S3? ')'

Deklaration von gemischtem Inhalt

[51] Mixed ::= '(' S3? '#PCDATA' ( S3? '|' S3? Name5)* S3? ')*' | '(' S3? '#PCDATA' S3? ')'

Deklaration von Attributlisten

[52] AttlistDecl ::= '<!ATTLIST' S3 Name5 AttDef53* S3? '>'
[53] AttDef ::= S3 Name3 S3 AttType3 S3 DefaultDecl3

Attributtypen

[54] AttType ::= StringType55 | TokenizedType56 | EnumeratedType57
[55] StringType ::= 'CDATA'
[56] TokenizedType ::= 'ID'

| 'IDREF'
| 'IDREFS'
| 'ENTITY'
| 'ENTITIES'
| 'NMTOKEN'
| 'NMTOKENS'

Attribute mit aufzählenden Typen

[57] EnumeratedType ::= NotationType58 | Enumeration59
[58] NotationType ::= 'NOTATION' S3'(' S3? Name5( S3? '|' S3? Name5)* S3? ')'
[59] Enumeration ::= '(' S3? Nmtoken7( S3? '|' S3? Nmtoken7)* S3? ')'

Default-Werte von Attributen

[60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S3)? AttValue10)

Bedingte Abschnitte

[61] conditionalSect ::= includeSect62 | ignoreSect63
[62] includeSect ::= '<![' S3? 'INCLUDE' S3? '[' extSubsetDecl31']]>'
[63] ignoreSect ::= '<![' S3? 'IGNORE' S3? '[' ignoreSectContents64* ']]>'
[64] ignoreSectContents ::= Ignore65('<![' ignoreSectContents64']]>' Ignore65)*
[65] Ignore ::= Char2* - ( Char2* ('<![' | ']]>') Char2*)

Zeichen-Referenz

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

Entity-Referenzen

[67] Reference ::= EntityRef68 | CharRef66
[68] EntityRef ::= '&' Name5';'
[69] PEReference ::= '%' Name5';'

Entity-Deklaration

[70] EntityDecl ::= GEDecl71 | PEDecl72
[71] GEDecl ::= '<!ENTITY' S3 Name5 S3 EntityDef73 S3? '>'
[72] PEDecl ::= '<!ENTITY' S3'%' S3 Name5 S3 PEDef74 S3? '>'
[73] EntityDef ::= EntityValue9 | ( ExternalID75 NDataDecl76?)
[74] PEDef ::= EntityValue9 | ExternalID75

Deklaration externer Entities

[75] ExternalID ::= 'SYSTEM' S3 SystemLiteral11 | 'PUBLIC' S3 PubidLiteral12 S3 SystemLiteral11
[76] NDataDecl ::= S3 'NDATA' S3 Name5

Text-Deklaration

[77] TextDecl ::= '<?xml' VersionInfo24? EncodingDecl80 S3? '?>'

Wohgeformte externe geparste Entities

[78] extParsedEnt ::= TextDecl77? content43 - Char2* RestrictedChar2a Char2*

Kodierungsdeklaration

[80] EncodingDecl ::= S3 'encoding' Eq25 ('"' EncName81'"' | "'" EncName81"'" )
[81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')* /* Encoding name contains only Latin characters */

Notationsdeklaration

[82] NotationDecl ::= '<!NOTATION' S3 Name5 S3( ExternalID75 | PublicID83) S? '>'
[83] PublicID ::= 'PUBLIC' S3 PubidLiteral12

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

  


Copyright © 2005 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML in a Nutshell" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de