1. XML - Extensible Markup Language

since: 30th/Aug./2001; last modified: 30th/Aug./2001

Contents

  1. 単純な XHTML 1.1
  2. XML 文書
    1. XML 宣言
      1. version 属性
      2. encoding 属性
      3. standalone 属性
    2. 整形式
    3. ルート要素
    4. 属性
    5. 大文字と小文字の区別
    6. 名前空間
    7. ルート要素の言語属性

SGML から XML へ

XHTML は、SGML アプリケーションであった HTML を XML ボキャブラリとして再形式化したものです。 XML 化された最初の HTML のバージョンは XHTML 1.0 です。これをモジュール化を用いて再形式化したのが XHTML 1.1 です。

企業の電子文書フォーマットとして実績のある SGML に代わって新たに XML が策定された理由は、幾つかありますが、 次の二点が挙げられます:

SGML では一度厳密に文書型を定義してから、それにしたがって、人が記述します。 HTML 4 までは SGML です。 SGML は一企業内で利用している分には高機能・高拡張性を持った素晴らしいものですが、ウェブとの相性が良くないとのことで、 XML が策定され、 HTML も XML 化されました。 XML ではオンライン・リアルタイム処理での利用、ドキュメントの自動作成・処理が前提とされています。

XHTML は、単純なウェブ・ページとしてだけでなく、 XML 文書としても解釈可能です。即ち、XSLT を応用した文書構造の転換、データベース化など、データとしての利用可能性が高まります。 関係データベース (RDB) の SQL (Structured Query Language) によるテーブル操作、ビューの作成と同様の機能を持っていると考えて結構です。

ここでは、 XML であるために XHTML 1.1 で必要とされる規則を紹介します。詳細は、 W3C 勧告「XML」を参照ください。

単純な XHTML 1.1

まずは XHTML 1.1 の具体的な文書例を見てみましょう:

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" >
  <head>
    <meta http-equiv="content-type"
          content="application/xhtml+xml; charset=Shift_JIS" />
    <title>XHTML 1.1 とはなんだろうか</title>
  </head>
  <body>
    <p>XHTML 1.1 は Modularization of XHTML に基づいて、
         XHTML 1.0 を再形式化したものです。</p>
  </body>
</html>

上に挙げた文書実例は、文字符号化方法を Shift_JIS に指定してある点だけ、状況に依存しますが、XHTML としてだけではなく、 XML 文書としても正しいものです。

XML 文書

XHTML は XML 文書でもあります。そのため、幾つかの条件があります。上に挙げた文書実例に則して解説しましょう。

XML 宣言

XML 文書の一行目は XML 宣言でなければなりません。 XHTML も XML 文書の一例ですから、一行目は XML 宣言です。

上にあげた例では、バージョン 1.0、文字符号化方法 "Shift_JIS" を指定しています。

1. version 属性

上のサンプルで、 version="1.0" とあるのが version 属性です。これは必須です。必ず書きましょう。

2. encoding 属性

XML はウェブでの利用を第一に掲げて開発されたので、グローバリゼーションを重視しています。そのため、文字コードは "UTF-8" (8ビットユニコード)か "UTF-16" (16ビットユニコード)が標準とされています。それ以外の文字コードを使うときは、 XML 宣言中で指定する必要があります。

日本語文字符号化方法
UTF-1616 ビットユニコード(不定長)。
UTF-8後方互換のために開発された、 8 ビットユニコード(不定長)
Shift_JISWindows ME 以前、 Machintosh などで使われています。
EUC-jpUNIX で使われています。
iso-2022-jp電子メールなど、ネットワークで使われています。JIS と呼ばれることがあります。

文字符号化法名は大文字と小文字を問いません。

3. standalone 属性

当該の XML 文書が則るべき DTD の有無を指定します。あれば no、無ければ yes とします。

参照する DTD は後続の DTD 宣言で識別しますが、この DTD に照らして適正な文書は、「妥当 (valid) な文書」だと云われます。この妥当性の検証は、情報の交換、共有時には絶対に必要なことです。

XHTML の場合は、参照すべき DTD が W3C から提供されていますから、 standalone="no" です。

<?xml version="1.0" encoding="shift_jis" standalone="no"?>

メディア・タイプ

インターネット上のメディアには型があり、2002 年の W3C Note では、XML のメディアタイプは、"application/xml" とされています。XHTML の場合は特別に、"application/xhtml+xml" が用意されています。

HTTP サーバの設定によって、 HTTP レスポンスヘッダに含める方法が推奨されますが、HTML 文書の head 要素の子要素として、 meta http-equiv を含める方法もあります。次の例は、メディアタイプが application/xml+xhtml であり、文字コードが Shift_JIS である場合です。

<meta http-equiv="content-type"
      content="application/xhtml+xml; charset=Shift_JIS" />

HTML は text/html でした。XHTML は、"application/xhtml+xml" であるべきです(SHOULD)。"text/html" も不可とはされていませんが推奨されません(SHOULD NOT)。HTML 4 との後方互換性を意識した版である XHTML 1.0 だけに限るべき (SHOULD) だとされています。

"application/xhtml+xml" である文書には、meta http-equiv を指定すべきでない (SHOULD NOT) とされています。このとき、文字符号化方法は、XML 宣言の encoding 属性でのみ記述されます。HTTP による要求/応答の場合は、HTTP サーバは、HTTP 応答ヘッダの CHARSET を含む推奨されています。

HTML/XHTML 文書のメディア・タイプ
メディア型HTML 4XHTML 1.0XHTML 1.0XHTML Basic / 1.1XHTML+MathML
text/html推奨可能 非推奨 非推奨 非推奨
application/xhtml+xml禁止 推奨 推奨 推奨 推奨
application/xml禁止 可能 可能 可能 可能
text/xml禁止 可能 可能 可能 可能

個人的な意見では、XHTML の場合、XML 的な取り扱いをしないのであれば、メディアタイプは text/html にして meta http-equiv に文字コードと共に明記することをお勧めします。原始的な文字化けを回避できるからです。

過去の互換性維持のためなので、他の選択肢として、次の例が挙げられます:

一方、構成ファイルやデータベースのように、XML 的な取り扱いを期待する場合、DOM/SAX などの XML インタフェースを使う場合は、application/xhtml+xml としたほうが良いでしょう。

整形式

XML は、ウェルフォームド(整形式)でなければなりません。

1. 木構造

最初に、全体構造をかいつまんで紹介します:

XHTML文書の全体構造:ルート要素は html 要素であり、その内容に head 要素と body 要素がこの順番で一つずつ存在する。特に、 head 要素の内容には title 要素が必須である。

図:XHTML 文書の木構造

XML 文書の要素構造は、木構造(ツリー構造)でなければなりません。即ち、親要素は複数の子要素を持つことが出来て、子要素は必ず一つの親要素を持ちます。親要素が明確に定義できない要素を持つ構造は木構造ではありません。

このとき、各要素をノード(節)と呼び、上位の節を、下位の節をと呼びます。また、同じ親を持つ節同士は兄弟と呼びます。

一番上の、親を持たない節をルートと呼び、一番下の子を持たない節をリーフ(葉)と呼んだりもします。どの節をルートと見ても、下層の節は木構造になっており、全体の木構造の一部分の木構造を、部分木と呼びます。

XHTML 文書のルート要素は html 要素であり、その子要素は head 要素と body 要素です。この二つは、 html 要素に対して兄弟要素でもあります。

また、 XHTML 文書内で、別の名前空間を用いる場合は、その最上位の要素以下は木構造であり、 XHTML 文書木構造から見ると、部分木になってます。

このように、要素をノード(節)と見て、文書構造を木構造として捕らえることによって、要素を操作の対象(オブジェクト)にできます。

以上が、 XML 文書の木構造の説明です。以下では、より詳細で具体的な内容を紹介します:

2. 終了タグ省略不可

XML 文書は各要素を節として、正しく木構造になっていなければなりません。そのため、要素の開始と終了は明確でなければなりません。

そのために、要素は必ず開始タグで始まり、終了タグで終了します。 HTML では、要素の開始と終了が自明な例では、開始タグ/終了タグともに省略できる場合がありましたが、 XML 文書としては不可であり、 XHTML 文書としても不可です。このように変更した一番の理由は、解釈ツールが、暗黙の指定を解釈できるようにすることで、ツールの複雑化を招いてしまうのを避けたからです。

次の例は、 p 要素の終了タグが省略されています。 HTML 4 としては正しいのですが、 XML, XHTML としては不可です:

<p>こんにちは。ここでは XHTML 1.1 の XML 文書としての側面を紹介します。
<p>XML は SGML を修正して開発された、ウェブ用のマークアップ言語開発言語です。

3. 整形式

要素は必ず一つだけ親要素を持ちます。したがって、複数の要素にまたがるような要素は誤りです:

誤った例:

<em>ここは em 要素です <strong>ここは strong 要素です</em></strong>

上の例は、 em 要素strong 要素が重なり合っているので、整形式ではありません。次のように修正します:

<em>ここは em 要素です <strong>ここは strong 要素です</strong></em>

4. 空要素

内容が存在しない要素である空要素の場合も、開始タグと終了タグが必須です。 XML では空要素は次のように記述します:

<link rel="next" href="./dtd.html" type="text/html"></link>

または

<link rel="next" href="./dtd.html" type="text/html" />

前者は旧版との互換性を持たないので、 W3C 勧告では後者のように記述するように推奨されています。後者は、通常の開始タグの末尾が「 /> 」となっており、スラッシュ「 / 」の直前に半角スペースが一つ挿入されています。

誤った例:

<link rel="next" href="./dtd.html" type="text/html">

これは HTML としては適当ですが、 XHTML としては誤りです。

ルート要素

XML 文書は木構造であり、一つの文書に最大レベルの親要素が一つだけ存在します。この最大レベル親要素のことをルート要素と呼びます。他の要素はルート要素の内容で子孫要素として存在します。

XHTML の文書型ではルート要素は html 要素です。また、このルート要素では、当該文書が則るべき文書型を参照するために、名前空間を指定しなければなりません。

この文書内で別の文書型に属する要素を用いたいときは、当該要素中で対応する名前空間を宣言します。

属性

html 要素中で xmlns="http://www.w3.org/1999/xhtml" とあるのが、名前空間を指定する xmlns 属性です。

要素には一般に、複数の属性が定義されており、要素の意味や機能を保管する情報を指定します。

要素の書式は、一般に「要素名="その値"」となります。

HTML では正しかった引用符の省略や、要素名の省略は、 XML 文書では認められず、 XHTML でも不可です。

border=1, border などは HTML 4 では正しい属性書式ですが、 XML, XHTML では不可です。次のように記述しなければなりません: border="1", frame="border"

大文字と小文字の区別

XML では要素や属性の文字列の、大文字と小文字を厳密に区別します。 XHTML では、全て小文字で定義されていますので、大文字の要素は誤りです。

HTML 4 では、 <BLOCKQUOTE>, <blockquote>, <BlockQuote> は全て等価で BLOCKQUOTE 要素の開始タグとして正しいのですが、 XHTML では、小文字の <blockquote> しか正しくありません。

<A Href="../index.html">, <a HREF="../index.html"> も誤りで、次のように書かねばなりません: <a href="../index.html">

名前空間

XML 文書では、複数の文書型を混合した文書を作成できます。この際、別々の文書型に含まれる要素は、別々の名前空間に存在すると考えます。XML によって、 XHTML に与えられた名前空間は、 http://www.w3.org/1999/xhtml です。

XHTML では、ルート要素である html 要素の xmlns 属性で指定するように求められています:

<html xmlns="http://www.w3.org/1999/xhtml">

Modularization of XHTML で定義されているモジュールの中から、必須モジュールを含む文書型は、 XHTML ファミリーと呼ばれ、この名前空間を持ちます。自分で作成した DTD モジュールを取り込むドライバを実装とする、プライベートな文書型でも、 XHTML ファミリーになります。例えば、機能が制限されたデバイスに対しては、 XHTML 1.1 は冗長すぎます。このときは、 XHTML Basic を土台としてモジュールを組み合わせます。

XML 名前空間の詳細は、 W3C 勧告「Namespaces in XML」を参照ください。

ルート要素の言語属性

ルート要素には言語属性を書きましょう:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">

上記の例では、当該文書の基本言語が日本語にセットされています。これをしないと、ユニコード使用時などに文字化けの原因になります。当該文書内で、内容が中国語や英語の要素を用いる場合は、当概要で改めで xml:lang 属性を指定します。

HTML 4 では、言語属性として lang 属性が定義されており、 XHTML 1.0 では後方互換のために、 xml:lang 属性と両方用いるように推奨されていました。しかし、 XHTML 1.1 では lang 属性の定義は消えており、 xml:lang だけしか定義されていません。


Copyright © 2001, SUGAI, Manabu. All rights reserved. 著作権は放棄していません。
SEO [PR] !uO z[y[WJ Cu