XMLの構造

HTMLとの比較

ここではまず、HTML文書との比較を通して、XML文書の文法を見ていきます。

HTML文書の例

HTML5 に準拠したHTML文書として、以下の例を考えてみます。

<!DOCTYPE HTML>
<HTML>
   <HEAD>
      <TITLE>電大太郎のページ</TITLE>
   </HEAD>
   <BODY>
      <P>ようこそ!
   </BODY>
</HTML>

上記のページをブラウザで見ると、このようになります。

HTMLの文書型宣言

1行目に記述されている部分を文書型宣言と呼びます。

<!DOCTYPE HTML>

文書型宣言で、このHTML文書がどのバージョンの仕様に従っているかを宣言していて、 上記のようにバージョンの指定がないと HTML5 になります。

HTML 4.01 の場合には、3種類あります。

HTML 4.01 Strict
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
HTML 4.01 Transitional
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
HTML 4.01 Frameset
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
  "http://www.w3.org/TR/html4/frameset.dtd">

XML文書の例

XML 1.0 では、例えば次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<挨拶状>
   <宛先>
      <名前>電大牛男</名前>
      <所属>東京電機大学</所属>
   </宛先>
   <本文>
      <段落>ようこそ!</段落>
   </本文>
</挨拶状>

上記のXML文書をhello.xmlという名前で保存し、Webブラウザで読み込んでみると、こんな感じになります。 Webブラウザによって表示のされ方が異なりますが、Google Chrome や Microsoft Edge では、 元のファイルを清書したようなツリー表示が確認できるはずです。 XML文書は階層構造(木構造)となっていることがよくわかるでしょう。

Webブラウザ上で表示されているXML文書の各要素の先頭にある「▼」の部分をクリックすると、 それ以下の要素を隠すことができます。 再度クリックするとまた表示されます。

演習 上に示したサンプルを参考に、独自のXML文書を作成してみましょう。 エディタでXML文書を作成したら、「~.xml」という名前で保存します。 そのファイルをWebブラウザで表示させてみましょう。 ファイルの文字コードとして utf-8 を指定することに注意しましょう。 (TeraPad なら ファイル -> 文字/改行コード指定保存 で UTF-8N を指定)

Webブラウザでツリー表示がされず、 エラーのメッセージが表示される場合があります。 エラーの原因としては、文字コードの不一致か、 打ち間違いなどで文法がXML文書の仕様から外れてしまったことが考えられます。 たいていのWebブラウザの場合、 HTML文書では多少間違えていても適当に表示してくれますが、 XML文書の場合には文法的に間違っているとエラーになります。 エラーメッセージを読んで、修正しましょう。

XML宣言

最初の一行はXML宣言と呼ばれ、この文書がXML文書であることを示しています。

<?xml version="1.0" encoding="utf-8"?>

version はXMLの勧告のversionで、ここでは1.0とします。 encodingは文字コードのことです。 XML文書ではUnicode(utf-8,utf-16)が推奨されていますので、utf-8 を指定しています。 実際には、パソコンで広く使われている Shift_JIS なども使用することができます。

HTMLとXMLの文法の違い

それでは、HTML文書とXML文書を見比べていきましょう。 どこが違うでしょうか。

タグ名について

HTMLではHTMLの勧告で定められたタグ名しか現れませんが、 XMLでは独自に決めたタグ名が使用されます。 例にあるように、アルファベット以外の文字も使用できます。

XMLでは大文字小文字の区別があります。 HTMLでは <HTML> でも <html> でも、<HtML> だってよかったのですが、XML ではそうはいきません。 後に述べる、XMLベースのHTMLであるXHTMLでは、タグ名は小文字と決められています。

なおXMLのタグ名には、数字で始まってはいけない、空白が入ってはいけない、という制限があります。

終了タグについて

XMLは、HTMLよりも厳格な文法が採用されています。 XMLでは終了タグは必須です。 例えばHTMLではPタグの終了タグを省略できることになっていますが、 XMLではすべての終了タグは省略不可です。

そうすると、例えばHTMLのimg要素は次のように書くことになります。

<img src="test.png" alt="test"></img>

このように、要素の内容がない要素を空要素(empty element)といいます。 空要素は次のようにも書くことができます。

<img src="test.png" alt="test" />

古いWebブラウザでエラーが起こらないよう、 /の前に空白を入れることがよく行われています。

特殊記号の記述について

<, >, & といった文字はタグなどを表すのに使われるため、 直接要素の内容に書くことはできません。 これはHTMLでも同じことなのですが、 HTMLの場合にはWebブラウザが適当に判断して表示してくれていました。 XMLでは、きちんと規則を守らないとエラーになります。

<, >, & といった文字を使いたい場合には、 実体参照というやりかたをします。 具体的には、次のように書きます。

lt や gt を実体名といいます。< や > が実体です。

なお、HTMLで定義されている &nbsp; (改行がされない空白)は、 XML文書では意味を持たないため使用できません。 XSLT で出力する HTML文書に含めたい場合には &amp;nbsp; と書きます。

補足

入れ子になっていないタグは許されませんが、これはHTMLでも言えることです。

<b> <i> タグが入れ子になっていない例 </b> </i>

また、属性値をクォートする(" "で囲む)ことも必要です。

整形式(well-formed)

XMLの文法に沿った文書を整形式(well-formed)の文書といいます。 整形式である主な条件を以下に示します。

XHTML - XMLベースのHTML

HTMLは、XMLの祖先であるSGMLという枠組みによってつくられた言語です。 HTML文書をXML文書としても扱うことができるよう、 XMLによってHTMLを再定義したXHTMLという仕様が策定されています。