Copyright (C) 1995-1998 World Wide Web Consortium, All Rights Reserved.

Copyright (C) 1998 Nihon Unisys,Ltd. for Japanese translation only.

Copyright (C) 2001 Rick Logical Laboratory for W3C 2nd Edition dated 6 October 2000.

XML1.0構文(XML 1.0 Syntax Second Edition)

by 若鳥陸夫(Rick Wakatori), Latest updated 1 October 2001.

W3CのXML1.0の構文規則を次に示す。表記の仕方は,意味を理解しや すくするために,文書記述言語SGML(JIS X 4151)ですでに採用されて いる用語はそれを適用し, 新しい用語もできるだけ日本語を使った 記法によって示す。

なお,形式仕様を重視され,日本語化することによって別な言語になった との立場の場合, 原勧告(XML 1.0 Recommendation,6 October 2000)を 参照されたい。

1 文書(documents)

XML文書は,整形式XML文書(well-formed XML document)と妥当なXML文書(valid XML document)とに分けられる。整形式XML文書は,ここで規定した事項に 適合する。整形式XML文書は,更に制約に適合すれば妥当なXML文書でもある。

1.1 整形式XML文書(well-formed XML documents)

文面対象体が,次の3条件を満たせば,整形式XML文書と見なす。

全体的に,”_文書”で始まる生成式に適合する。

この規定の整形式XML文書の制約に従っている。

XML文書中で直接又は間接的に参照される構文解析済み実体が整形式である。

_文書 ::= _前書き _要素 _雑* ----[1]

1.2 文字(characters)

_文字 ::= #x9 | #xA | #xD | [#x20-#xD7FF] |

[#xE000-#xFFFD] | [#x10000-#x10FFFF] ----[2]

備考 文字集合(省略時解釈値)は,機能制御文字のタブ停止(TAB),改行(LF)及び復帰(CR), 並びにISO/IEC 10646(UCS)の図形文字とする。

1.3 共通構文構成体(common syntactic constructs)

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

備考 間隔(SP),タブ停止(TAB),復帰(CR)及び改行(LF)は,ホワイトスペース(空白)と見なす。

_名前文字 ::= _Letter | _Digit | '.' | '-' | '_' | ':' | _合成文字 | _拡張子 ----[4]

_名前 ::= (_Letter | '_' | ':') (_名前文字)* ----[5]

_名前群 ::= _名前 (_S _名前)* ----[6]

_名前字句 ::= (_名前文字)+ ----[7]

_名前字句群 ::= _名前字句 (_S _名前字句)* ----[8]

_実体値 ::= '"' ([^%&"] | _引数参照 | _参照)* '"' |

"'" ([^%&'] | _引数参照 | _参照)* "'" ----[9]

_属性値 ::= '"' ([^<&"] | _参照)* '"' | "'" ([^<&'] | _参照)* "'" ----[10]

_システム字句 ::= ('"' [^"]* '"') | ("'" [^']* "'") ----[11]

_公開字句 ::= '"' _公開識別文字* '"' | "'" (_公開識別文字 - "'")* "'" ----[12]

_公開識別文字 ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'<)+,./:=?] ---[13]

1.4 文字データ及びマーク付け(character data and markup)

_文字データ ::= [^<&]* - ([^<&]* ']]' [^<&]*) ----[14]

1.5 注釈(comments)

_注釈 ::= '<!--' ((_文字 - '-') | '-' (_文字 - '-'))* '-->' ----[15]

1.6 処理命令(processing instructions)

_処理命令 ::= '<?' _処理命令目的 (_S (_文字* - (_文字* '?>' _文字*)))? '?>' -[16]

_処理命令目的 ::= _名前 - (('X' | 'x') ('M' | 'm') ('L' | 'l')) --[17]

1.7 データ文字区間(CDATA sections)

_データ文字区間 ::= _データ文字開始 _データ文字 _データ文字終了 --[18]

_データ文字開始 ::= '<![CDATA[' ----[19]

_データ文字 ::= (_文字* - (_文字* ']]>' _文字*)) ----[20]

_データ文字終了 ::= ']]>' ----[21]

1.8 前書及び文書型宣言(prolog and document type declaration)

整形式XML文書(well-formed)は,_前書き中の_XML宣言として_版情報を含まなければ ならないが,_文書型宣言はない。

妥当なXML文書(valid)は,_文書型宣言を必す(須)とする。

_前書き ::= _XML宣言? _雑* , (_文書型宣言 _雑*)? ----[22]

_XML宣言 ::='<?xml' _版情報 _符号化宣言? _自立宣言 _S? '?>' --[23]

_版情報 ::=_S 'version' _等号 ("'" _版数 "'" | '"' _版数 '"') ----[24]/**/

_等号 ::= _S? '=' _S? ----[25]

_版数 ::= ([a-zA-Z0-9_.:] | '-')+ ----[26]

_雑 ::= _注釈 | _処理命令 | _S ----[27]

_文書型宣言 ::= '<!DOCTYPE' _S _名前 (_S _外部識別子)? _S? ('[' _マーク付け宣言 | _宣言分離)* ']' , _S?)? '>' --[28]/**/

[ VC : 根要素型 ]

_宣言分離 ::= _引数参照 | _S ----[28a]/**/

_マーク付け宣言::= _要素宣言 | _属性宣言 | _実体宣言 | _記法宣言 | _処理命令 | _注釈 --[29]

[ VC: 適正な宣言及び引数実体の入れ子 ]

[ WFC: 内部の部分集合中の引数実体 ]

_外部部分集合 ::= _文面宣言? _外部部分集合宣言 ----[30]

_外部部分集合宣言 ::= (_マーク付け宣言 | _条件区間 | _宣言分離)* ----[31]/**/

1.9 自立文書宣言(standalone document declaration)

_自立宣言 ::= _S 'standalone' _等号 ( "'" ('yes' | 'no') "'" | '"' ('yes' | 'no') '"') --[32]

[ VC: 自立文書宣言 ]

1.10 言語識別(language identification)

(構文式33~38は,削除)/**/

2 論理構造群(logical structures)

2.1 開始タグ,終了タグ及び空要素タグ(start-tags,end-tags,and empty-element tags)

_要素 ::= _空要素タグ | _開始タグ _内容 _終了タグ ----[39]

[ WFC: 要素型の一致 ]

[ VC: 要素が妥当 ]

_開始タグ ::= '<' _名前 (_S _属性)* _S? '>' ----[40]

[WFC:一意な属性仕様]

_属性 ::=_名前 _等号 _属性値 ----[41]

[ VC: 属性値が型として宣言 ]

[ WFC: 外部実体参照なし ]

[ WFC: 属性値中に小号"<"を含まない ]

_終了タグ ::= '</' _名前 _S? '>' ----[42]

_内容 ::= _文字データ? ((_要素 | _参照 | _データ文字区間 | _処理命令 | _注釈) _文字データ)* ----[43]/**/

_空要素タグ ::= '<' _名前 (_S _属性)* _S? '/>' ----[44]

[ WFC: 一意な属性仕様 ]

備考 _空要素タグは,キーワードEMPTYを宣言されているかどうかには無関係に_内容のない要素に用いてよい。ただし,互換性のためには,EMPTYと宣言されている場合だけ _空要素タグを用いなければならない。

2.2 要素型宣言(element type declarations)

_要素宣言 ::= '<!ELEMENT' _S _名前 _S _内容仕様 _S? '>' ----[45]

[ VC: 一意な要素型宣言 ]

_内容仕様 ::= 'EMPTY' | 'ANY' | _混成 | _子 ----[46]

_子 ::= (_選択 | _連接) ('?' | '*' | '+')? ----[47]

_内 ::= (_名前 | _選択 | _連接) ('?' | '*' | '+')? ----[48]

_選択 ::= '(' _S? _内 (_S? '|' _S? _内)+ _S? ')' ----[49]/**/

[ VC: 適正な集団及び引数実体の入れ子 ]

_連接 ::= '(' _S? _内 (_S? ',' _S? _内)* _S? ')' ----[50]

[ VC: 適正な集団及び引数実体の入れ子 ]

_混成 ::= '(' _S? '#PCDATA' (_S? '|' _S? _名前)* _S? ')*' | '(' _S? '#PCDATA' _S? ')' ----[51]

[ VC: 適正な集団及び引数実体の入れ子 ]

[ VC: 重複した型なし ]

2.3 属性並び宣言(attribute-list declarations)

_属性宣言 ::= '<!ATTLIST' _S _名前 _属性定義* _S? '>' ----[52]

_属性定義 ::= _S _名前 _S _属性型 _S _省略時値宣言 ----[53]

_属性型 ::= _文字型 | _通行票型 | _列挙型 ---[54]

_文字型 ::= 'CDATA' ----[55]

_通行票型 ::= 'ID' ----[56]

[ VC: 識別子 ]

[ VC: 要素型当たりに単一な識別子 ]

[ VC: 識別子属性省略時値 ]

| 'IDREF' [ VC: IDREF ]

| 'IDREFS' [ VC: IDREF ]

| 'ENTITY' [ VC: 実体名 ]

| 'ENTITIES' [ VC: 実体名 ]

| 'NMTOKEN' [ VC: 名前字句 ]

| 'NMTOKENS' [ VC: 名前字句 ]

_列挙型 ::= _記法型 | _列挙 ----[57]

_記法型 ::= 'NOTATION' _S '(' _S? _名前 (_S? '|' _S? _名前)* _S? ')' -[58]

[ VC: 記法属性 ]

_列挙 ::= '(' _S? _名前字句 (_S? '|' _S? _名前字句) _S? ')' ----[59]

[ VC: 列挙 ]

_省略時値宣言 ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' _S)? _属性値) ----[60]

[ VC: 必須属性 ]

[ VC: 規定された属性省略時値 ]

[ WFC: 属性値中に小号なし ]

[ VC: 固定属性省略時値 ]

2.4 条件区間(conditional sections)

_条件区間 ::= _添加区間 | _無視区間 ----[61]

_添加区間 ::= '<![' _S? 'INCLUDE' _S? '[' _外部部分集合 ']]>' ----[62]

_無視区間 ::= '<![' _S? 'IGNORE' _S? '[' _無視区間内容群 ']]>' ----[63]

_無視区間内容群 ::= _無視 ('<![' _無視区間内容群 ']]>' _無視)* ----[64]

_無視 ::= _文字* - (_文字* ('<![' | ']]>') _文字*) ----[65]

3 物理構造群(physical structures)

3.1 文字参照及び実体参照(character and entity references)

_文字参照 ::= '&#' [0-9]+ ';' | '&#x' [0-9a-zA-Z]+ ';' ----[66]

[ WFC: 規定された文字 ]

_参照 ::= _実体参照 | _文字参照 ----[67]

_実体参照 ::= '&' _名前 ';' ----[68]

[ WFC: 宣言した実体 ]

[ VC: 宣言した実体 ]

[ WFC: 構文解析済み実体 ]

[ VC: 再帰的でない ]

_引数参照 ::= '%' _名前 ';' ----[69]

[ VC: 宣言した実体 ]

[ WFC: 再帰的でない ]

[ WFC: DTD中にあり ]

3.2 実体宣言(entity declarations)

_実体宣言 ::= _一般実体宣言 | _引数実体宣言 ----[70]

_一般実体宣言 ::= '<!ENTITY' _S _名前 _S _実体定義 _S? '>' ---[71]

_引数実体宣言 ::= '<!ENTITY' _S '%' _S _名前 _S _引数定義 _S? '>' ----[72]

_実体定義 ::= _実体値 | (_外部識別子 _非解析データ宣言?) ----[73]

_引数定義 ::= _実体値 | _外部識別子 ----[74]

_外部識別子 ::= 'SYSTEM' _S _システム字句 | 'PUBLIC' _S _公開字句 _S _システム字句 ----[75]

_非解析データ宣言 ::= _S 'NDATA' _S _名前 ----[76]

[ VC: 宣言された記法 ]

3.3 構文解析済み実体(parsed entities)

_文面宣言 ::= '<?xml' _版情報? _符号化宣言 _S? '?>' ----[77]

_外部構文解析済実体 ::= _文面宣言? _内容 ----[78]

(構文式79は,削除)/**/

_符号化宣言 ::= _S 'encoding' _等号 '"' _符号名, '"' | "'" _符号名, "'" ----[80]

_符号名 ::= [A-Za-z] ([A-Za-z0-9._] | '-')* ----[81]

備考 _符号名は,ラテン文字によって記述する。

3.4 記法宣言(notation declarations)

_記法宣言 ::= '<!NOTATION' _S _名前 _S (_外部識別子 | _公開識別子) _S? '>'-[82]

_公開識別子 ::= 'PUBLIC' _S _公開字句 ----[83]

_Letter ::= _基本文字 | _表意文字 ----[84]

_基本文字 ::= [#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6]

| [#x00D8-#x00F6] | [#x00F8-#x00FF] | [#x0100-#x0131]

| [#x0134-#x-13E] | [#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 | #0E8D

| [#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] ----[85]

_表意文字 ::= [#x4E00-#x9FA5]|[#x3007 | [#x3021-#x3029] ----[86]

_合成文字 ::= [#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-#x#x20DC] | #x20E1 | [#x302A-#x302F] | #x3099

| [#x309A] ----[87]

_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] ----[88]

_拡張子 ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640

| #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035]

| [#x309D-#x309E] | [#x30FC-#x30FE] ----[89]