Extensible Markup Language
XMLの構文と整形式XML文書

整形式XML文書が満たすべき構文の規則を説明する。
整形式XML文書としての条件が満たされることのみを考慮する場合 (スキーマ言語を使わずに手軽にXMLを使う場合) においても、XMLは、大量の文書やもしくは木構造として表現することができるデータを格納するための、一般的な枠組みとしての役割を果たすことができる。
XML文書は、要素 (element) と属性 (attribute) が複数集まって、構成されている。
要素は内部に子要素を含むことができる。属性は要素に付随し、属性の内部に子要素を含むことはできない。要素は開始タグと終了タグで内容を挟むことで表現する。
開始タグは「<要素名>」、終了タグは「</要素名>」で記述する。
一つの要素を記述するための基本的な構文を次に示す。
<要素名 属性="値">内容</要素名>
ここで、<要素名 属性="値"> をこの要素の開始タグといい、</要素名> を終了タグという。「内容」は何らかのテキストである。
次に示す例は整形式XML文書である。
<書籍 出版日="2007-10-31">これは書籍です.... </書籍>
この例は、書籍という要素を一つもつXML文書である。<書籍> が書籍要素の開始タグであり、</書籍> が書籍要素の終了タグである。「出版日="2007-10-31"」は書籍要素の属性である。この属性の名前 （属性名） は「出版日」であり、この属性の値 （属性値） は "2007-10-31" である。「これは書籍です.... 」は、書籍要素の内容である。
要素の内容を構成するテキストはまた、さらに任意の数の要素を含むことができる （なお、このように一つの要素内に文字列データと子要素が混在するものを、「混合内容」と呼ぶ）。
すなわち、一般的なXML文書は木構造をなす。
この点において、XMLはプログラミング言語LISPのS式と似ている。
S式でも木構造を記述する。S式の木構造のおのおのの節は、自分自身のプロパティリストをもつことができる。
要素は内部に別の要素を含むことができる。構造化したXML文書の例を示す。
<レシピ 名前="パン" 準備時間="5分" 調理時間="3時間">
   <料理>基本的なパン</料理>
   <材料 量='3' 単位='カップ'>小麦粉</材料>
   <材料 量='0.25' 単位='オンス'>イースト</材料>
   <材料 量='1.5' 単位='カップ' 状態="温かい">水</材料>
   <材料 量="1" 単位="ティースプーン">食塩</材料>
   <要領>
     <手順>全ての材料を一緒にして混ぜます。</手順>
     <手順>十分にこねます。</手順>
     <手順>布で覆い、暖かい部屋で1時間そのままにしておきます。</手順>
     <手順>もう一度こねます。</手順>
     <手順>パン焼きの容器に入れます</手順>
     <手順>布で覆い、暖かい部屋で1時間そのままにしておきます。</手順>
     <手順>オーブンに入れて温度を180℃にして30分間焼きます。</手順>
   </要領>
 </レシピ>
要素の属性の値は、必ずシングルクォート (') かダブルクォート (") で括らなければならない。そして要素内にある属性は、互いに属性名が異なっていなければならない。XML文書では要素は正しく入れ子になっていなければならない。要素は決してオーバーラップしていてはならない。
例えば、次の文書は整形式XML文書ではない。なぜなら 書名 要素と 著者 要素がオーバーラップしているからである。
<!-- 正しくありません! 整形式XML文書ではありません! -->
<書籍目録> <書名>XML入門<著者>筒井<書名>続・XML入門<著者>小松</書名></著者></書名></著者> </書籍目録>
次の2つの文書は整形式XML文書である。
<!-- 正しい整形式XML文書です -->
<書籍目録> <書名>XML入門</書名> <著者>筒井</著者> <書名>続・XML入門</書名> <著者>小松</著者> </書籍目録>
<!-- もう一つの正しい整形式XML文書です -->
<書籍目録> <書名>XML入門</書名> <著者>筒井<書名>続・XML入門<著者>小松</著者></書名></著者> </書籍目録>
整形式XML文書においては、XML文書は正確に一つのルート要素 （文書要素; document element とも呼ばれる） をもたなければならない。ルート要素とは、XML文書の要素の階層構造において最上位の要素のことをいう。最上位の要素は一つでなければならない。最上位の要素が複数ある文書は、整形式XML文書ではない。
整形式XML文書が一つのルート要素をもたなければならないという条件が意味することは、整形式XML文書のテキストは、ルート要素の開始タグと対応する終了タグの間に、収められなければならないということである。ルート要素の開始タグと終了タグの間に収められたテキストは、任意の数の要素や文字列データを含むことができる。
ルート要素の前に、必要に応じて、XML宣言 (XML declaration) をおくことができる。このXML宣言は、XMLのどのバージョンが使われているか （現時点ではバージョン1.0であることが多い） などを示す。XML宣言では、XMLのバージョンの他に、文字符号化方式 （文字コード） の指定や、他のXML文書との依存関係についての指定を、行うこともできる。
XML文書の文字符号化方式がUTF-8かUTF-16の場合は、XML宣言をおいてもよいし、XML宣言をおかなくてもよい。
XML文書の文字符号化方式がUTF-8でもUTF-16でもない場合は、XML宣言をおいて文字符号化方式を明示する必要がある。
XML宣言を含んだXML文書の例を示す。
<?xml version="1.0" encoding="UTF-8"?>
<書籍 出版日="2007-10-31">これは書籍です.... </書籍>
XML仕様では、XMLプロセサ （XMLパーサ、XML文書の構文解析器） が、Unicodeの文字符号化方式であるUTF-8およびUTF-16で記述されたXML文書を処理できることを、必須条件としている （UCS-4は必須条件ではない）。XMLプロセサは、UTF-8およびUTF-16の他にも、いくつかの任意の文字符号化方式の文書を処理できるようにして良い。例えば、UCS-4、EUC-JP、Shift_JIS、EBCDICなどの文字符号化方式の文書を処理できるXMLプロセサが、広く普及し、使われている。
コメントはXML文書の木構造のどこにでもおくことができる。

コメントは、"<!--" で始まり、"-->" で終わる。
なお、コメント内に "--" を含むことはできない。
コメントを含むXML文書の例を示す。
<書籍 出版日="2007-10-31">
 <!-- これはコメントです.... -->
 これは書籍です.... 
</書籍>
内容のない要素を空要素 (empty element) という。XMLでは、空要素を表現するために特別な構文を使うことができる。開始タグを書きその直後に終了タグを書くこともできるが、その代わりに空要素のタグを使うことができるのである。空要素タグは開始タグと似ているが、閉じ括弧の直前にスラッシュをおく。
次の3つの例は、XMLでは同等である。
<foo></foo>
<foo/>
<foo />
空要素タグは属性を含むことができる。
<情報 著者="小松左京" 分類="サイエンスフィクション" 日付="2009-01-01"/>