ここではまず、HTML文書との比較を通して、XML文書の文法を見ていきます。
HTML5 に準拠したHTML文書として、以下の例を考えてみます。
<!DOCTYPE HTML> <HTML> <HEAD> <TITLE>電大太郎のページ</TITLE> </HEAD> <BODY> <P>ようこそ! </BODY> </HTML>
1行目に記述されている部分を文書型宣言と呼びます。
<!DOCTYPE HTML>
文書型宣言で、このHTML文書がどのバージョンの仕様に従っているかを宣言していて、 上記のようにバージョンの指定がないと HTML5 になります。
HTML 4.01 の場合には、3種類あります。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
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 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では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で定義されている (改行がされない空白)は、 XML文書では意味を持たないため使用できません。 XSLT で出力する HTML文書に含めたい場合には &nbsp; と書きます。
入れ子になっていないタグは許されませんが、これはHTMLでも言えることです。
<b> <i> タグが入れ子になっていない例 </b> </i>
また、属性値をクォートする(" "で囲む)ことも必要です。
XMLの文法に沿った文書を整形式(well-formed)の文書といいます。 整形式である主な条件を以下に示します。
HTMLは、XMLの祖先であるSGMLという枠組みによってつくられた言語です。 HTML文書をXML文書としても扱うことができるよう、 XMLによってHTMLを再定義したXHTMLという仕様が策定されています。