目次

        1.簡単なXML Schemaから始めよう

        2.複数要素を定義する4つの基本形を覚えよう

        3.複雑型を定義する定番テクニック

        4.豊富に用意されたデータ型を利用する

        5.ユーザー独自のデータ型を作ろう

        6.属性のデータ型、デフォルト値、グループ

XMLの構造を表すスキーマ言語とは?

 

スキーマ言語は、XMLのスキーマを記述するための言語で、「XMLがどのような構造になっているのか」を説明するためのものです。XMLパーサは、スキーマ言語を知っていれば、そのスキーマ言語で記述された文書を読むだけで、これから解析しようとしているXML文書の構造が分かるわけです。

 

XML Schemaの生い立ち

XMLのスキーマ言語として最もなじみ深いのはDTDDocument Type Definition)でしょう。DTDXMLが誕生したときから存在するシンプルなスキーマ言語です。しかし、XMLの利用が急速に拡大し、その使用目的も多様化してきたため、DTDでは機能が不足してきています。そこで、DTDに代わるスキーマ言語として、XML Schemaが作成されました。

XML Schemaの生い立ち

        XML Schemaは次世代のスキーマ言語として、2001年にW3Cより勧告されました。XML Schemaは非常に強力なスキーマ言語で、「要素の内容には指定の文字列しか含まない」「この要素は最高5つまで指定可能」など、XMLの構造の細部まで指定できます。しかし、その半面仕様が膨大です。勧告当初は「XML Schemaを実装したXMLパーサは作成するのが困難」「使い物にならない」などといわれていました。しかし、2年たった現在、XML Schemaは確実に市場に受け入れられつつあります。

最も簡単なXML Schema

<greeting>Hello World!!</greeting>

XMLの構造は、以下のようになっています。

        ルート要素は、greeting

        greeting要素は属性を持たない

        greeting要素の内容は文字列

        greeting要素は子供要素を持たない

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 <xsd:element name="greeting" type="xsd:string"/>

</xsd:schema>

 

子要素を持つ要素のスキーマ定義:

<customer>

 <name>安登 マーク</name>

 <address>東京都千代田区丸の内3-3-1新東京ビル8F</address>

</customer>

 

1: <?xml version="1.0"?>

 2: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 3:   <xsd:element name="customer">

 4:    <xsd:complexType>

 5:      <xsd:sequence>

 6:        <xsd:element name="name" type="xsd:string"/>

 7:        <xsd:element name="address" type="xsd:string" />

 8:      </xsd:sequence>

 9:    </xsd:complexType>

10: </xsd:element>

11: </xsd:schema>

単純型と複雑型

        複雑型

        子要素または属性を持つ要素のデータ型

        単純型

        子要素および属性を持たない要素のデータ型、あるいは属性値のデータ型

        複雑型を表す「complexType

        子要素の順番を指定する「sequence

        ref属性で要素を参照

属性を宣言する

customer id="111111">

 <name>安登 マーク</name>

 <address>東京都千代田区丸の内3-3-1新東京ビル8F</address>

</customer>

 

11:       <xsd:attribute name="id" type="xsd:string"/>

 

複雑型を定義する定番テクニック

maxOccurs属性

1:<?xml version="1.0"?>

 2:<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 3:

 4: <xsd:element name="order">

 5:    <xsd:complexType>

 6:      <xsd:sequence>

 7:        <xsd:element name="orderItem"

                          type="xsd:string" maxOccurs="10"/>

 8:      </xsd:sequence>

 9:    </xsd:complexType>

10: </xsd:element>

11:

12:</xsd:schema>

7:        <xsd:element name="orderItem"

                    type="xsd:string" maxOccurs="unbounded"/>

 

minOccurs属性

1:<?xml version="1.0"?>

 2:<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 3:

 4: <xsd:element name="order">

 5:    <xsd:complexType>

 6:      <xsd:sequence>

 7:        <xsd:element name="orderItem"

                          type="xsd:string" maxOccurs="10"/>

 8:        <xsd:element name="comment"

                          type="xsd:string" minOccurs="0"/>

 9:      </xsd:sequence>

10:    </xsd:complexType>

11: </xsd:element>

12:

13:</xsd:schema>

 

 

choice要素

1:<?xml version="1.0"?>

 2:<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 3:

 4: <xsd:element name="order">

 5:    <xsd:complexType>

 6:      <xsd:sequence>

 7:        <xsd:element ref="orderItem" maxOccurs="10"/>

 8:      </xsd:sequence>

 9:    </xsd:complexType>

10: </xsd:element>

11:

12: <xsd:element name="orderItem">

13:    <xsd:complexType>

14:      <xsd:choice>

15:        <xsd:element name="name" type="xsd:string"/>

16:        <xsd:element name="id" type="xsd:string"/>

17:      </xsd:choice>

18:    </xsd:complexType>

19: </xsd:element>

20:

21:</xsd:schema>

 

豊富に用意されたデータ型を利用する

 

データ型の名前

内容

boolean

真偽

truefalse10

base64Binary

Base64エンコードされたバイナリ値

GpM7

hexBinary

16進数

0FB7

float

単精度32ビット浮動小数

-INF-1E4-0012.78E-212INFNaN

double

倍精度64ビット浮動小数

-INF-1E4-0012.78E-212INFNaN

decimal

10進数

-1.230123.41000.00

integer

整数

-126789-101126789

nonPositiveInteger

0以下の整数

-126789-10

negativeInteger

0未満の整数

-126789-1

long

-9223372036854775808から9223372036854775807までの整数

-112678967543233

int

-2147483648から2147483647までの整数

-1126789675

short

-32768から32767までの整数

-112678

byte

-128から127までの整数

-1126

nonNegativeInteger

0以上の整数

01126789

unsignedLong

0から18446744073709551615までの整数

012678967543233

unsignedInt

0から4294967295までの整数

01267896754

unsignedShort

0から65535までの整数

012678

unsignedByte

0から255までの整数

0126

positiveInteger

1以上の整数

1126789

 

基本データ型

データ型の名前

内容

duration

ある一定の期間。例は「12カ月310時間3012.3秒」を表す

P1Y2M3DT10H30M12.3S

dateTime

特定の日時。例は「世界時間(UTC)から5時間遅れの東部標準時
における1999531日午後120分」を表す

1999-05-31T13:20:00.000-05:00

time

時刻。例は「世界時間(UTC)から5時間遅れの東部標準時における午後120分」を表す

13:20:00.000-05:00

date

日付。例は「1999531日」を表す

1999-05-31

gYearMonth

グレゴリアン暦の年月。例は「19992月」を表す

1999-02

gYear

グレゴリアン暦の年。例は「1999年」を表す

1999

gMonthDay

グレゴリアン暦の月日。例は「531日」を表す

--05-31

gMonth

グレゴリアン暦の月。例は「5月」を表す

--05--

gDay

グレゴリアン暦の日。例は「31日」を表す

---31

 

データ型の名前

内容

string

文字列

Confirm this is electric.
Again ,confirm it.

normalizedString

改行文字、タブ文字を含まない文字列

Confirm this is electric

token

改行、先頭・末尾の空白、および2つ以上連続した空白を含まない文字列

Confirm this is electric

language

xml:lang属性の値として有効なもの。XML 1.0で定義されている

en-GBen-USfr

Name

XML 1.0 Name型。要素や属性の名前に使用可能な形式の文字列で、先頭と2文字目以降に使用できる文字が規定された文字列

shipTo

QName

XML Namespace QName。名前空間URIとローカル名の組からなる

po:USAddress

NCName

XML Namespace NCNameQNameより接頭辞とコロンを取り除いたもの

USAddress

anyURI

URIの形式をした文字列

http://www.example.com/doc.html#ID5

 

基本データ型

データ型の名前

内容

ID

DTDID

IDREF

DTDIDREF

IDREFS

DTDIDREFS

ENTITY

DTDENTITY

ENTITIES

DTDENTITIES

NMTOKEN

DTDNMTOKEN

NMTOKENS

DTDNMTOKENS

NOTATION

DTDNOTATION


ユーザー独自のデータ型を作ろう

パターンデータ型を作成する

<xsd:simpleType name="idType">
  <xsd:restriction base="xsd:string">
    <xsd:pattern value="\d{1}-\d{4}-\d{4}-\d{1}"/>
  </xsd:restriction>
</xsd:simpleType>


値のリストを作成する

<xsd:simpleType name="idType">

 <xsd:restriction base="xsd:string">

    <xsd:enumeration value="4-8443-1780-6"/>

    <xsd:enumeration value="4-7741-1751-1"/>

    <xsd:enumeration value="4-7741-1684-1"/>

 </xsd:restriction>

</xsd:simpleType>


数値の範囲を設定する

<xsd:simpleType name="quantityType">

 <xsd:restriction base="xsd:integer">

    <xsd:minInclusive value="1"/>

    <xsd:maxInclusive value="10"/>

 </xsd:restriction>

</xsd:simpleType>


属性のデータ型、デフォルト値、グループ

ユーザー独自のデータ型を属性に指定する

<xsd:attribute name="id" type="idType"/>


書かなければいけない?
書かなくてもよい?

<xsd:attribute name="id" type="idType" use="required"/>

 

属性値

内容

required

属性は必ず書かなければならない

optional

属性は書かなくてもよい。もちろん書いてもよい

prohibited

属性は書いてはならない

 

属性のデフォルト値

<xsd:attribute name="quantity" type="xsd:integer" default="1"/>