XML
データをタグで囲み、要素の名前と入れ子によって構造を表現するマークアップ言語。用途に応じて要素名を定義でき、データ交換や設定ファイルなどに使われる。
イマシルちゃんの解説
箱の中に小さな箱を入れて、それぞれに「商品」「名前」「値段」と札を付けるとするよ。
中身だけを並べるより、何を表しているのかわかりやすいよね。
ただし、札の名前と意味は、渡す相手ともそろえておく必要があるんだ。
きれいに箱詰めしただけでは、届け方や保管の決まりまでは決まらないよ。
より深い解説
表すものと基本の形
XMLはW3Cが定めた言語である。タグや属性を使い、データの構造をテキストとして表す。表示の見た目や通信手順を、それだけで決めるものではない。
次は、独自に作った商品データの例である。
<product code="A7">
<name>ノート</name>
<price>240</price>
</product>
productの内側にnameとpriceを置くことで、商品に名前と価格が属することを表せる。codeは属性である。XML自体がpriceを必ず円として扱うわけではなく、値の意味は利用者間で取り決める。
文書として満たす規則
| 規則 | 内容 |
|---|---|
| 全体の親 | 文書をまとめるルート要素は一つ |
| 対応 | 開始と終了の名前を一致させる |
| 入れ子 | 要素が途中で交差しないように閉じる |
| 名前の比較 | 英字の大文字と小文字を区別する |
| 特殊文字 | 区切りと紛らわしい文字は参照表現などで表す |
このような構文上の規則を満たす文書を整形式のXML文書という。構文が正しくても、必要な項目が欠けていたり、価格の欄が文字列だったりする場合がある。
データの約束を検証する
DTDやXML Schemaを使うと、要素の並びや出現回数などの制約を定められる。XML Schemaでは数値や日付などのデータ型も記述できる。
構文として読めることと、決めたデータ仕様に合うことを分けて確認する。相手が送った文字列をそのまま信頼せず、期待する項目と値を検査する必要がある。
通信仕様との違い
| 技術 | XMLとの関係 |
|---|---|
| SOAP | XMLでメッセージを記述する |
| SAML | XMLで本人確認の結果などを表す |
| WebSocket | メッセージはテキストやバイナリを運べ、XMLは必須ではない |
| XMLHttpRequest | 名前にXMLを含むが、JSONや通常の文字列も扱える |
XMLはデータの表現方法であり、双方向通信を実現するための接続方式ではない。たとえばWebSocket上でXMLの文字列を送ることはできるが、XMLを選ぶことと通信路を選ぶことは別の設計判断である。