XMLの取り決めについて
XMLは、人同士や、企業間とかでデータをやり取りするにあたり、本当にそのデータが正しいかどうか妥当性をチェックする必要があります。
DTD
XMLでは、タグの取り決めをDTD(Document Type Definition)という仕様によって規定しています。
「XML文書中にどのように要素や属性が現れるのか」の取り決めを定義することが可能です。
デメリット
DTDは、XMLの文法とは異なる形式になっており、取り扱い上不便な点が多いです。
主に、データ型を利用できなかったり、DTDはタグを混在することを想定して作られておらず、「名前空間」の使用と相性が悪いです。
それを解決するために新たな仕様として「XML Schema」というものが登場しています。
名前空間とは?
例えば、別の会社が二つのXML文書を扱っていて、それを組み合わせたいということがあるかもしれません。
その際に、「<value>」という要素で重複していた場合は、エラーになってしまいます。
そのようなことを防ぐためにXMLには「名前空間」という仕組みがあります。
タグがどこで取り決められたものなのか識別することが可能になります。
名前空間を使った例
名前空間を指定する際は、「属性」にxmlnsを指定して各名前空間に対応した「URI」を指定する必要があります。
具体的には、下記のようなイメージになります。
1 2 3 4 5 |
<root xmlns:A="http://xxxx" xmlns:B="http://yyyy"> <A:value>test</A:value> <B:value>テスト</B:value> </root> |
XML Schema
XML Schemaを作成するためのポイント
- 拡張子を「xsd」にする。
- 形式がXML形式と同じ
- XML Schema特有の名前空間を使って内容を記述する。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?xml version="1.0" encoding="Shift_JIS" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="people"> <xsd:complexType> <xsd:sequence> <xsd:element name="man"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="age" type="xsd:decimal"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> |
XML Schmaのルート要素は、「xsd:schema」とすることになっています。
XML Schemaの要素
要素名 | 用途 |
---|---|
xsd:schema | XML Schemaのルート要素 |
├─xsd:element | 要素を決める。 |
├─xsd:complexType | 要素の中に要素を含める。子要素にその他要素や、属性を含める場合に使う。 |
├─xsd:sequence | 要素の出現順番を決めれる。 |
├─xsd:choice | 要素をいずれかを出現させれる。(いずれか1回) |
├─xsd:all | 内容を0回または1回出現させる。 |
├─xsd:attribute | 属性を定義できる。 |
└─xsd:simpleType | 子要素にテキストしか持たない要素の場合に使う。 |
├─xsd:restriction | 要素として指定するテキスト情報とかに、制約条件を指定することができる。 |
└─xsd:simpleType | 新しいデータ型の定義に使うことができる。 |
xsd:elementで指定できる属性
属性 | 説明 |
---|---|
type | stringとか、decimalとかのデータの種類 |
ref | xsd:elementを別の場所に外だししてxsdを読みやすくできる。 |
minOccurs | 最小出現回数を指定する。省略時は1回(つまり必須指定)、unboundedで上限をなくせる。 |
maxOccurs | 最大出現回数を指定する。省略時は1回(つまり必須指定)、unboundedで上限をなくせる。 |
xsd:complexTypeで指定できる属性
属性 | 説明 |
---|---|
mixed | 文字とタグの混合内容とできる。(例、これは<strong>重要事項</strong>です。) |
この記事へのコメントはありません。