XML-Schema
概要
XML Schema は XML 文書の構造と内容を定義するためのスキーマ言語である。スキーマには XML によるインターフェースを定義し、XML 文書の整合性を検証することでデータの信頼性と相互運用性を高める役割がある。
XML Schema 自体を XML で記述する。
Table of Contents
導入
最も単純な XML Schema は次のような定義である。この XML Schema は右の XML 文書の構造を定義している。
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="message" type="xsd:string"/>
</xsd:schema>
<?xml version="1.0" encoding="utf-8"?>
<message>
hello, world
</message>
XML Schema の定義は、XML Schema で定義しようとしている XML 文章の名前空間と、XML Schema 自身の名前空間が混在することに注意。
名前空間の指定
スキーマを定義する XML 文書に明示的な名前空間がある場合は XML Schema でもその名前空間を指定する必要がある。単一の名前空間のみであれば XML Schema での接頭辞は省略しても良い。
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
targetNamespace="https://hazm.at/xsd/greeting"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="message" type="xsd:string"/>
</xsd:schema>
<?xml version="1.0" encoding="utf-8"?>
<message xmlns="https://hazm.at/xsd/greeting">
hello, world
</message>
単一の名前空間でも明示的に接頭辞を示す場合や、一つの XML Schema で複数の名前空間の XML 文書を定義する場合は、XML Schema に接頭辞を追加することができる。XML Schema 実装系は、下記の greeting:message
や xsd:string
のように属性値に指定された要素名や属性名の接頭辞を認識する。
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
targetNamespace="https://hazm.at/xsd/greeting"
xmlns:mox="https://hazm.at/xsd/mox"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="message" type="mox:string"/>
</xsd:schema>
XML Schema 実装系
実装系としての XML Schema は XML 文書の検証機能を提供する。以下の Java プログラムはコマンドラインで指定した XML Schema ファイルに基づいて標準入力から得られる XML 文書を検証する。
import java.io.File;
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
public class Validate {
public static void main(String[] args) throws Exception {
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new StreamSource(new File(args[0])));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(System.in));
}
}
XML Schema リファレンス
id 属性や xml:lang 属性などは省略している。
<xsd:schema>
XML Schema によるスキーマのルート要素を定義する。
属性名 | 属性値 | デフォルト | 意味 |
---|---|---|---|
|
unqualified |
||
|
なし | ||
|
unqualified |
||
|
なし | ||
|
なし | ||
|
なし |
targetNamespace 属性は現在のスキーマで定義しようとしている要素や属性の名前空間を指定する。
blockDefault 属性は extension や restriction, substitution によって派生したデータ型が派生元のデータ型の代わりに使用できるかを設定する。この blockDefault 属性を指定しておくことで定義したデータを意図せず派生したデータ型で上書きされることを防ぐことができる。この設定を個別に行う場合は <xsd:element> や <xsd:complexType> の block 属性を使用することができる。
finalDefault 属性は <xsd:simpleType>, <xsd:complexType> で定義したデータ型を派生させることを禁止することができる。この finalDefault 属性を指定しておくことで定義したデータを意図せず派生したデータ型で上書きされることを防ぐことができる。この設定を個別に行う場合は <xsd:element> や <xs:complexType> の final 属性を使用することができる。
親:
子: <xsd:include>, <xsd:import>, <xsd:annotation>, <xsd:redefine>, <xsd:attribute>, <xsd:attributeGroup>, <xsd:element>, <xsd:group>, <xsd:notation>, <xsd:simpleType>, <xsd:complexType>,
<xsd:element>
要素を定義する。
属性名 | 属性値 | デフォルト | 意味 |
---|---|---|---|
|
false |
||
|
なし | ||
|
なし | ||
|
なし | ||
|
なし | ||
|
なし | ||
|
1 |
||
|
1 |
||
|
なし | ||
|
false |
||
|
なし | ||
|
なし | ||
|
なし |
abstract 属性が true の場合、要素は派生させる必要があり、要素そのものを XML 文書内で使用することはできない。
default 属性、fixed 属性はそれぞれデフォルト値と固定値を指定する。両方を指定することはできない。
nillable 属性を true にした場合、XML 文書内で xsi:nil 属性を指定して要素の内容を null に設定することができる。
親: <xsd:schema>, <xsd:choice>, <xsd:all>, <xsd:sequence>,
子: <xsd:simpleType>, <xsd:complexType>, <xsd:key>, <xsd:keyref>, <xsd:unique>,
参照
- W3C: XML Schema