NomExML

:warning: :construction: Under Heavy Development :construction: :warning:

Things are likely to change and break often until testing has been completed.

The following table needs to be verified as of June 2, 2023


Extensible Markup Language (XML) 1.0 (Fifth Edition)

## W3C Recommendation 26 November 2008

| Production Rule | Name | Definition | Implemented | Tested | :bug: | |:----------------------:|:----------|-------------|:-----------:|:------:|:----------:| | [1] | document | prolog element Misc* | :heavycheckmark: | :x: | | [2] | Char | #x9 \| #xA \| #xD \| [#x20-#xD7FF] \| [#xE000-#xFFFD] \| [#x10000-#x10FFFF] | :heavycheckmark: | :x: | | [3] | S | (#x20 \| #x9 \| #xD \| #xA)+ | :heavycheckmark: | :x: | | [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] | :heavycheckmark: | :x: | | [4a] | NameChar | NameStartChar \| "-" \| "." \| [0-9] \| #xB7 \| [#x0300-#x036F] \| [#x203F-#x2040] | :heavycheckmark: | :x: | | [5] | Name | NameStartChar (NameChar)* | :heavycheckmark: | :x: | | [6] | Names | Name (#x20 Name)* | :heavycheckmark: | :x: | | [7] | Nmtoken | (NameChar)+ | :heavycheckmark: | :x: | | [8] | Nmtokens | Nmtoken (#x20 Nmtoken)* | :heavycheckmark: | :x: | | [9] | EntityValue | '"' ([^%&"] \| PEReference \| Reference)* '"' \| "'" ([^%&'] \| PEReference \| Reference)* "'" | :heavycheckmark: | :x: | | [10] | AttValue | '"' ([^<&"] \| Reference)* '"' \| "'" ([^<&'] \| Reference)* "'" | :heavycheckmark: | :x: | | [11] | SystemLiteral | ('"' [^"]* '"') \| ("'" [^']* "'") | :heavycheckmark: | :x: | | [12] | PubidLiteral | '"' PubidChar* '"' \| "'" (PubidChar - "'")* "'" | :heavycheckmark: | :x: | | [13] | PubidChar | #x20 \| #xD \| #xA \| [a-zA-Z0-9] \| [-'()+,./:=?;!*#@$%] | :heavycheckmark: | :x: | | [14] | CharData | [^<&]* - ([^<&]* ']]>' [^<&]) | :heavy_check_mark: | :x: | | [15] | Comment | '' | :heavy_check_mark: | :x: | | [16] | PI | '' Char)))? '?>' | :heavycheckmark: | :x: | | [17] | PITarget | Name - (('X' \| 'x') ('M' \| 'm') ('L' \| 'l')) | :heavycheckmark: | :x: | | [18] | CDSect | CDStart CData CDEnd | :heavycheckmark: | :x: | :question: | | [19] | CDStart | 'checkmark: | :x: | :question: | | [20] | CData | (Char* - (Char* ']]>' Char)) | :heavy_check_mark: | :x: | :question: | | [21] | CDEnd | ']]>' | :heavy_check_mark: | :x: | :question: | | [22] | prolog | XMLDecl? Misc (doctypedecl Misc)? | :heavy_check_mark: | :x: | | [23] | XMLDecl | '' | :heavy_check_mark: | :x: | | [24] | VersionInfo | S 'version' Eq ("'" VersionNum "'" \| '"' VersionNum '"') | :heavy_check_mark: | :x: | | [25] | Eq | S? '=' S? | :heavy_check_mark: | :x: | | [26] | VersionNum | '1.' [0-9]+ | :heavy_check_mark: | :x: | | [27] | Misc | Comment \| PI \| S | :heavy_check_mark: | :x: | | [28] | doctypedecl | '' | :heavy_check_mark: | :x: | | [28a] | DeclSep | PEReference \| S | :heavy_check_mark: | :x: | | [28b] | intSubset | (markupdecl \| DeclSep) | :heavycheckmark: | :x: | | [29] | markupdecl | elementdecl \| AttlistDecl \| EntityDecl \| NotationDecl \| PI \| Comment | :heavycheckmark: | :x: | | [30] | extSubset | TextDecl? extSubsetDecl | :heavycheckmark: | :x: | | [31] | extSubsetDecl | (markupdecl \| conditionalSect \| DeclSep)* | :heavycheckmark: | :x: | | [32] | SDDecl | S 'standalone' Eq (("'" ('yes' \| 'no') "'") \| ('"' ('yes' \| 'no') '"')) | :heavycheckmark: | :x: | | [39] | element | EmptyElemTag \| STag content ETag | :heavycheckmark: | :x: | | [40] | STag | '<' Name (S Attribute)* S? '>' | :heavycheckmark: | :x: | | [41] | Attribute | Name Eq AttValue | :heavycheckmark: | :x: | | [42] | ETag | '' | :heavycheckmark: | :x: | | [43] | content | CharData? ((element \| Reference \| CDSect \| PI \| Comment) CharData?)* | :heavycheckmark: | :x: | | [44] | EmptyElemTag | '<' Name (S Attribute)* S? '/>' | :heavycheckmark: | :x: | | [45] | elementdecl | '' | :heavycheckmark: | :x: | | [46] | contentspec | 'EMPTY' \| 'ANY' \| Mixed \| children | :heavycheckmark: | :x: | | [47] | children | (choice \| seq) ('?' \| '' \| '+')? | :heavy_check_mark: | :x: | | [48] | cp | (Name \| choice \| seq) ('?' \| '' \| '+')? | :heavycheckmark: | :x: | | [49] | choice | '(' S? cp ( S? '\|' S? cp )+ S? ')' | :heavycheckmark: | :x: | | [50] | seq | '(' S? cp ( S? ',' S? cp )* S? ')' | :heavycheckmark: | :x: | | [51] | Mixed | '(' S? '#PCDATA' (S? '\|' S? Name)* S? ')' \| '(' S? '#PCDATA' S? ')' | :heavy_check_mark: | :x: | | [52] | AttlistDecl | ' S? '>' | :heavycheckmark: | :x: | | [53] | AttDef | S Name S AttType S DefaultDecl | :heavycheckmark: | :x: | | [54] | AttType | StringType \| TokenizedType \| EnumeratedType | :heavycheckmark: | :x: | | [55] | StringType | 'CDATA' | :heavycheckmark: | :x: | | [56] | TokenizedType | 'ID'\| 'IDREF'\| 'IDREFS'\| 'ENTITY' \| 'ENTITIES' \| 'NMTOKEN' \| 'NMTOKENS' | :heavycheckmark: | :x: | | [57] | EnumeratedType | NotationType \| Enumeration | :heavycheckmark: | :x: | | [58] | NotationType | 'NOTATION' S '(' S? Name (S? '\|' S? Name)* S? ')' | :heavycheckmark: | :x: | | [59] | Enumeration | '(' S? Nmtoken (S? '\|' S? Nmtoken)* S? ')' | :heavycheckmark: | :x: || [60] | DefaultDecl | '#REQUIRED' \| '#IMPLIED' \| (('#FIXED' S)? AttValue) | :heavycheckmark: | :x: | | [61] | conditionalSect | includeSect \| ignoreSect | :x: | :x: | | [62] | includeSect | ') | :x: | :x: | | [66] | CharRef | '&#' [0-9]+ ';' \| '&#x' [0-9a-fA-F]+ ';' | :heavy_check_mark: | :x: | | [67] | Reference | EntityRef \| CharRef | :heavy_check_mark: | :x: | | [68] | EntityRef | '&' Name ';' | :heavy_check_mark: | :x: | | [69] | PEReference | '%' Name ';' | :heavy_check_mark: | :x: | | [70] | EntityDecl | GEDecl \| PEDecl | :heavy_check_mark: | :x: | | [71] | GEDecl | '' | :heavy_check_mark: | :x: | | [72] | PEDecl | '' | :heavy_check_mark: | :x: | :question: | | [73] | EntityDef | EntityValue \| (ExternalID NDataDecl?) | :heavy_check_mark: | :x: | | [74] | PEDef | EntityValue \| ExternalID | :heavy_check_mark: | :x: | | [75] | ExternalID | 'SYSTEM' S SystemLiteral \| 'PUBLIC' S PubidLiteral S SystemLiteral | :heavy_check_mark: | :x: | | [76] | NDataDecl | S 'NDATA' S Name | :heavy_check_mark: | :x: | | [77] | TextDecl | '' | :x: | :x: | | [78] | extParsedEnt | TextDecl? content | :x: | :x: | | [80] | EncodingDecl | S 'encoding' Eq ('"' EncName '"' \| "'" EncName "'" ) | :heavy_check_mark: | :x: | | [81] | EncName | [A-Za-z] ([A-Za-z0-9._] \| '-') | :heavycheckmark: | :x: | | [82] | NotationDecl | '' | :heavycheckmark: | :x: | | [83] | PublicID | 'PUBLIC' S PubidLiteral | :heavycheckmark: | :x: | | [84] | Letter | BaseChar \| Ideographic | :x: | :x: | | [85] | BaseChar | ... | :x: | :x: | | [86] | Ideographic | [#x4E00-#x9FA5] \| #x3007 \| [#x3021-#x3029] | :x: | :x: | | [87] | CombiningChar | ... | :x: | :x: | | [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] | :x: | :x: | | [89] | Extender | #x00B7 \| #x02D0 \| #x02D1 \| #x0387 \| #x0640 \| #x0E46 \| #x0EC6 \| #x3005 \| [#x3031-#x3035] \| [#x309D-#x309E] \| [#x30FC-#x30FE] | :x: | :x: |