XMLスキーマとは、XML文書のスキーマ定義を行うスキーマ定義言語です。DTDと異なり、XMLスキーマはXMLの文法に則って記述します。その使い方とサンプルをご紹介します。
XMLスキーマのルート要素はschemaであり、名前空間の接頭辞xsdを付けて、xsd:schemaと表記される。
xsd:schema
要素の開始タグと終了タグがそれぞれXMLスキーマ定義の開始と終了を意味します。
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<-- スキーマ定義 -->
</xsd:schema>
XMLスキーマの名前空間URIは「http://www.w3.org/2001/XMLSchema」である。
xmlns属性で接頭辞を定義することにより、各要素に名前空間を表す任意の接頭辞を付けることができるが、XMLスキーマの接頭辞は慣習的に
xsd
又は
xs
という接頭辞にすることが多い。
XMLスキーマの要素を次の表に示す。
要素 | 説明 |
---|---|
schema | XMLスキーマのルート要素 |
element | 要素の定義 |
attribute | 属性の定義 |
complexType | 複合型の定義 |
sequence | 要素の順序の定義 |
choice | 要素の択一の定義 |
annotation | コメント |
appinfo | システムが参照するコメント |
documentation | 人間が参照するコメント |
extension | 単純型に属性持たせる。 |
restriction | データ型に制限を加える。 |
attribute | 属性グループを定義する。 |
XMLスキーマのルート(最上位)要素です。開始タグ
<xsd:schema>
がXMLスキーマ定義の開始、終了タグ
</xsd:schema>
がXMLスキーマ定義の終了を表します。開始タグと終了タグの間に要素(エレメント)や属性(アトリビュート)の定義を記述します。
(子要素を含まない)要素の定義は
xsd:element
、属性の定義は
xsd:attribute
で行います。複数の子要素を含む要素は
xsd:complexType
で行います。
Attribute | Description |
---|---|
blockDefault | 指定した派生型を持つcomplexTypeが継承したcomplexTypeの代わりに使用されないようにする。 |
targetNamespace | このスキーマで定義する言語の名前空間をURIで指定する。 |
xmlns[:prefix] | XMLスキーマの名前空間をURIで指定する。 |
なし
element、complexType、annotation、import、group、simpleType、attributeGroup
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="book" type="BookType"/>
<xsd:complexType name="BookType">
<xsd:element name="author" type="xsd:string"/>
<xsd:element name="price" type="xsd:int"/>
<xsd:attribute name="isbn" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:schema>
要素(エレメント)を定義します。
xsd:complexType
)を指定します。
maxOccurs="unbounded"
と指定します。
<xsd:element name="data">
<xsd:complexType>
<xsd:element name="name" type="xsd:string" minOccurs="2" maxOccurs="unbounded"/>
</xsd:complexType>
</xsd:element name="data">
XMLスキーマのattribute要素は、属性を定義する要素である。
データ型として、組み込みデータ型または複合型(complexType)を指定する。
値 | 説明 |
---|---|
required | 必須 |
optional | 省略可能(規定値) |
prohibited | 存在を禁止 |
use属性がoptional の場合、省略時のデフォルト値を指定します。default 属性と fixed 属性は併用できません。
固定値を指定します。default属性とfixed属性は併用できません。
attributeGroup、extension、restriction
複合型(complexType)の要素
book
に属性
isbn
を定義する例を示します。
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="book" type="BookType"/>
<xsd:complexType name="BookType">
<xsd:element name="author" type="xsd:string"/>
<xsd:element name="price" type="xsd:int"/>
<xsd:attribute name="isbn" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:schema>
<xs:complexType name="foo">
<xs:element name="bar" type="xs:string"/>
<xs:attribute name="baz" type="xs:string" use="optional" default="qux"/>
</xs:complexType name="foo">
<xs:complexType name="quux">
<xs:element name="foobar" type="xs:string"/>
<xs:attribute name="baz" type="xs:string" use="optional" default="qux"/>
</xs:complexType name="foo">
あらかじめ定義した属性をrefで参照することもできる。上記のサンプルは次のような書き方もできる。
<xs:attribute name="baz" type="xs:string" use="optional" default="qux"/>
<xs:complexType name="foo">
<xs:element name="bar" type="xs:string"/>
<xs:attribute ref="baz"/>
</xs:complexType name="foo">
<xs:complexType name="quux">
<xs:element name="foobar" type="xs:string"/>
<xs:attribute ref="baz"/>
</xs:complexType name="foo">
複合型を定義します。複合型は複数の子要素を含む変数型で、組み込み変数型の子要素や他の複合型の子要素を持つことができます。
複合型に複数の子要素を定義したとき、その子要素の出現順序は順不同です。例えば、 XMLスキーマで複合型
book
の子要素として
title
と
author
の2つの子要素を持つように定義した場合、実際のXMLデータで
title
と
author
のどちらの子要素が先に出現しても構いません。子要素の順番まで決めたい場合は
xsd:sequence
で子要素の出現順序を定義します。
次に xsd:complexType を使用したXMLスキーマの例を示します。
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="book" type="BookType"/>
<xsd:complexType name="BookType">
<xsd:element name="author" type="xsd:string"/>
<xsd:element name="price" type="xsd:int"/>
<xsd:attribute name="isbn" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:schema>
上記の例では、子要素authorと子要素priceを持つ複合型 BookType を定義しています。
xsd:sequence は、要素の順番を定義します。開始タグと終了タグの間の要素定義は、記述された順序性を保ちます。 開始タグと終了タグの間に要素(エレメント)定義があれば、その定義された順番を保ちます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="address" type="AddressType" />
<xsd:ComplexType name="AddressType" />
<xsd:sequence>
<xsd:element ref="address" />
<xsd:element ref="name" />
</xsd:sequence>
<xsd:element name="text" type="xsd:string" />
<xsd:element name="number" type="xsd:int" />
開始タグ
<xsd:choice>
と終了タグ
</xsd:choice>
の間で定義された複数の要素のうち、ひとつだけ存在を許します。
<xsd:complexType name="AccountNo">
<xsd:choice>
<xsd:element name="bank" type="xsd:string" />
<xsd:element name="postalSaving" type="xsd:string" />
</xsd:choice>
</xsd:complexType>
XMLスキーマのannotation要素は、XMLスキーマ文書内にコメントを入れるための要素である。
属性 | 説明 |
---|---|
xmlns | XMLスキーマの名前空間をURIで指定する。接頭辞を指定している場合は省略できる。 |
appinfo、documentation
<xs:annotation>
<xs:appinfo>foo</xs:appinfo>
<xs:documentation>サンプルです。</xs:documentation>
</xs:annotation>
XMLスキーマのappinfo要素は、システムが参照するためのコメントを記述する要素である。
属性 | 説明 |
---|---|
xmlns | XMLスキーマの名前空間をURIで指定する。接頭辞を指定している場合は省略できる。 |
annotation
なし
XMLスキーマのdocumentation要素は、人間が参照するためのコメントを記述する要素である。
属性 | 説明 |
---|---|
source | より詳細なドキュメントの場所を表すURIを指定する。 |
xmlns | XMLスキーマの名前空間をURIで指定する。接頭辞を指定している場合は省略できる。 |
annotation
なし
<xs:annotation>
<xs:appinfo>foo</xs:appinfo>
<xs:documentation source="http://itref.fc2web.com/xml/xmlschema.html">サンプルです。</xs:documentation>
</xs:annotation>
組み込みデータ型の一覧を以下に示します。
型名 | 説明 |
---|---|
anyURI | URI |
base64Binary | バイナリデータ。Base64方式 |
boolean | true/false |
byte | 1バイトの整数 |
date | 日付 |
datetime | 日付+時刻 |
decimal | 10進数 |
double | 64ビットの浮動小数点数 |
duration | 特定期間の時間 |
ENTITIES | 複数のエンティティ |
ENTITY | エンティティ |
float | 32ビットの浮動小数点数 |
gDay | 日付 |
gMonth | 月 |
gMonthDay | 日付 |
gYear | 年 |
gYearMonth | 年+月 |
hexBinary | バイナリデータ。Base64方式16進 |
ID | 識別子 |
IDREF | 識別子への参照 |
IDREFS | 複数の識別子への参照 |
int | 4バイトの整数 |
integer | 整数 |
language | xml:langの属性値 |
long | 8バイトの整数 |
Name | XML1.0の名前 |
NCName | 名前空間名の接頭辞以下 |
negativeInteger | 負の整数 |
NMTOKEN | 名前トークン |
NMTOKENS | 複数の名前トークン |
nonNegativeInteger | 負でない整数 |
nonPositiveInteger | 正でない整数 |
normalizedString | 復帰・改行・タブなし文字列 |
NOTATION | 記法属性 |
positiveInteger | 正の整数 |
QName | 名前空間名 |
short | 2バイトの整数 |
string | 文字列 |
time | 時刻 |
token | 改行・タブ・半角スペースなしトークン文字列 |
unsignedByte | 1バイトの正の整数。 |
unsignedInt | 4バイトの正の整数 |
unsignedLong | 8バイトの正の整数 |
unsignedShort | 2バイトの正の整数 |
組み込みデータ型は xsd:element や xsd:attribute などの type 属性に指定することができます。
次に組み込みデータ型を使用したXMLスキーマの例を示します。
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="book" type="BookType"/>
<xsd:complexType name="BookType">
<xsd:element name="author" type="xsd:string"/>
<xsd:element name="price" type="xsd:int"/>
<xsd:attribute name="isbn" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:schema>
上記の例では、文字列型の要素authorと4バイト整数型の要素priceを定義しています。
XMLスキーマインスタンスでは、XMLインスタンスで使用する4つの属性を定義している。
XMLスキーマインスタンスの名前空間URIは「http://www.w3.org/2001/XMLSchema-instance」である。
xmlns属性で接頭辞を定義することにより、各要素に名前空間を表す任意の接頭辞を付けることができるが、XMLスキーマインスタンスの接頭辞は慣習的に
xsi
という接頭辞にすることが多い。
XMLスキーマインスタンスには、次の属性がある。
true
を指定する。