ホーム > X-Plus > XML Square >  デベロッパーズコーナー  >  エンジニアのためのXMLスキーマ講座

この記事を送る はてなブックマークに追加する BuzzurlにブックマークBuzzurlにブックマーク Yahoo!ブックマークに登録
テキストリンクコードを取得する

デベロッパーズコーナー:エンジニアのためのXMLスキーマ講座 I(5)

2002年06月15日作成 

エンジニアのためのXMLスキーマ講座
第1回:XMLにおけるスキーマとは何か

(株)日本ユニテック
竹内 理


目次<全7ページ>

5.表現方法の種類
        ①DTD(Document Type Definition:文書型定義)
6.    ②XML Schema
    おわりに


表現方法の種類

先に述べたように、現在XMLのスキーマの表現方法として存在しているものはひとつではありません。ここでは現在存在する3つの主な仕様‐DTD、XML Schema、Relaxを紹介してみます。

① DTD(Document Type Definition:文書型定義)

<!ENTITY % id-attr &id ID #IMPLIED&>
<!ENTITY % title-attr &title CDATA #IMPLIED&>
<!ENTITY % skip-attr &skip-content (true|false) 'true'&>
<!ENTITY % desc-attr &
    %title-attr;
    abstract    CDATA    #IMPLIED
    author    CDATA    #IMPLIED
    copyright    CDATA    #IMPLIED
&>
<!ELEMENT smil (head?,body?)>
<!ENTITY % layout-section &layout|switch&>
<!ENTITY % head-element &(meta*,((%layout-section;), meta*))?&>
<!ELEMENT head %head-element;>
<!ATTLIST head %id-attr;>
<!ELEMENT layout ANY>
…・・・・・
…・・・・・
DTDはXML1.0で採用された仕様です。またDTDはXMLの前身であるSGMLでも採用されていました 。 次に挙げるのはDTDの例です。

<DTDの例(SMIL10.DTD:抜粋)>

現在、DTDはもっとも一般的に使用されているスキーマ表現です。

例えば、SMIL(同期をとったマルチメディアプレゼンテーションを記述する。 http://www.w3.org/TR/REC-smil/SMIL10.dtd )などのXMLサブセットのスキーマを表現するのにDTDを使用しています。

また現在するXMLパーサで、検証XMLプロセッサ(validating XML processor)と呼ばれるものは、DTDによる検証をサポートします(XML1.0に沿ったものであれば当然ですが…)。さらに、効率良くXMLを利用することを意図し、複数の既存のDTDを公開しているサイトがいくつも存在します。ユーザは公開されているDTDをダウンロードしそのまま、あるいは必要な変更を加えてそれらのDTDを利用することができます。

また、以前SGMLでシステムを構築していたユーザがXMLに移行する際、DTDを使用するならばシステムに大きな変更を加える必要がない、という利点もあります。

このように考えていくと、DTDをめぐる環境はかなり整っています。ですから実際にXMLを導入する際に、DTDをまず最初に候補に挙げるのが一般的と言えるでしょう。


DTDは主に次の4つの部分から構成されています。

名称 説明
要素型宣言 XMLインスタンスで使用できる要素を定義する部分です。要素の名前、要素の階層構造(親子関係、兄弟関係)、要素の出現ルールなどを規定します。 <! ELEMENT para (#PCDATA) >
属性リスト宣言 要素の不可情報としての属性を定義します。どの要素にどんな属性がつくか、属性名はなにか、属性値としてどんなものを指定できるか、属性の指定は必須か任意か、デフォルト値は何かといったことを規定します。 <! ATTLIST id ID #IMPLIED>
エンティティ宣言 XMLインスタンス中やDTDで使用したいエンティティの定義。置き換えたい文字列や取り込みたい外部ファイルはなにか、それを参照するときに使用するエンティティ名はなにか、といった情報を規定します。 <! ENTITY chapA SYSTEM "http://www.utj.co.jp/chapA.xml">
記法宣言 外部のファイルとして参照するエンティティがXML以外の記法(BMPやTeXなど)を使用している場合、その記法を識別するための名前を指定。 <! NOTAION CGM PUBLIC "ISO 8632/4//NOTATION clear text encoding//EN …">

DTDはSGML時代の遺産という面ももっているため、XMLに関して使用する際にいくつかの問題点を持っています。その中には非常に大きな問題点もあります。これらの問題点があるがゆえに、現在DTD以外の多くのスキーマの表現方法が登場しているのです。

以下に良く知られている問題点をいくつか挙げてみましょう。

XMLとは別の書式を用いている XMLとは異なる記法ですから書いたり読んだりする人に多くの負担がかかります。それだけでなく、DTDを処理するのにはXMLとは異なるソフトウェアが必要になります。これはコストや開発の期間の面から考えても望ましくないことです。
XMLの名前空間との相性が悪い DTDはSGML時代から採用されている仕様です。一方「名前空間」の概念はXMLになって初めて登場しました。ですから名前空間を用いる際にはさまざまな問題が生じます.例えば、DTD内で名前空間を使って要素宣言や実体宣言を参照することができません。
データ型が用意されていない XMLをデータ連携などに利用する開発者からするとDTDには、データ型が用意されていないという問題も存在します。もともとDTDを採用していたSGMLがどちらかというと文書を扱うための仕様であったためです。



関連サービス

XMLスキーマの策定、作成業務





ページトップへ戻る