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 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 リファレンス
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
 
        