「CSVからXMLへ」でも触れていますが、CSVが持つ環境に依存しない特性を継承しつつ、より高度で柔軟なデータ交換が行えるのがXMLです。ただ、その自由度の高さは、ときに思わぬ落とし穴にもなりえます。例えば、毎日の売上データを各支店から本店へ送信するようなシステムがあったとします。
その際、送信するデータのXML文書構造が各支店ごとにバラバラだったらどうなるでしょう。
<送信データ> <集計日>2013/08/12</集計日> <店舗>横浜支店</店舗> <商品>ブレンドコーヒー</商品> <単価>100</単価> <販売数>3</販売数> <売上額>300</売上額> </送信データ> <送信データ 集計日="2013/08/12"> <店舗コード>005</店舗コード> <店舗>神奈川支店</店舗> <商品コード>D103</コード> <商品>ブレンドコーヒー</商品> <単価>100</単価> <売上数>3</販売数> </送信データ>
データの内容は同じでも、このようにバラバラでは受ける側のシステムは、やはり2つのプログラムを用意する必要があったり、バラバラのフォーマットを統一するように変換するためのXSLTをそれぞれ用意しなくてはならず、開発コストが膨らんでしまいます。そのため、上記例のように各支店が自分勝手にタグを使って良いというわけにはなかなか行きません。
システムにより業務処理を自動化するためには、全てのフローを厳密に取り決めなくてはなりませんが、自由度の高いXMLは、ときにその特性により不都合が生じる場合もあるということです。
そこで、データ交換する用途などでXMLを用いる場合は、XML文書中で使うタグなどの規則を事前に取り決めておく必要が出てくるわけです。そのための仕様がDTDとXML Schemaです。
DTD(Document Type Definition:文書型宣言)
DTD(Document Type Definition:文書型宣言)は、XML文書をある一定の構文に従ってルール付けするためのものです。DTDは「XML文書中にどのように要素や属性があらわれるのか」というふうに取り決めを記述していきます。
DTDの問題点
DTDはXMLの前身であるSGMLより基本的な構文を受け継いでいます。SGMLという歴史のある仕様に準拠することで、他のXML関連技術と比較して、長い利用実績により熟成されていると言えます。ただ、DTDには以下のような問題があります。
- DTDはXML構文とは異なる形式で記述される
- DTDはデータ型を持たない
- DTDは名前空間をサポートしない
詳細は割愛しますが、ようするにDTDはXML文書と相性が良いとは言えないのです。そして、そのDTDが抱える問題を解決する次世代の文書型宣言がXML Schemaです。
XML Schema
XML文書の構造を取り決めるためにDTDに変わって新しく策定された仕様がXML Schemaです。XML Schemaは上記であげた3つの問題を解決し、DTDより柔軟かつ強力な仕様となっています。
XMLでのすべてのニーズに対応するための仕様と言えるでしょう。
整形式文書と妥当な文書
整形式文書とは、XML文書の前置きとなるXML宣言と、実際のデータをあらわすXML文書本体に分かれる構造となるXML文書のことです。これまでのサンプルで使ってきたXML文書はまさに整形式文書です。
対して、妥当な文書とは、DTDやXML Schemaにより、ある規則に従ったタグを持つXML文書のことです。つまり、整形式文書の規則を守り、かつDTDやXML Schemaに従ったタグを持つ文書です。
ですので、これから解説していくXML文書は、「妥当な文書」となります。