2003年度 データベース論

XML Schema (2)
ソフトウェア特論
第4回 / 2004-05-21
きょうの目標


XML Schema の組み込みのデータ型につ
いて学ぶ。
XML Schema の複合型について学ぶ。
単純型と複合型
単純型と複合型

単純型




内容がテキストのみ
あらかじめ、いくつかのデータ型が定義されている。
データの派生に使う ときは、<xsd:simpleType>~
</xsd:simpleType>
複合型


内容に要素や属性を含む
<xsd:complexType>~ </xsd:complexType>
XML Schema 組み込みの
データ型
さまざまなデータ型 (1)

string


文字列
boolean


論理型
true か false (または 1 か 0)
さまざまなデータ型 (2)

integer


nonNegativeInteger


整数
0以上の整数
nonPositiveInteger

0以下の整数
さまざまなデータ型 (3)

float


単精度浮動小数
double

倍精度浮動小数
さまざまなデータ型 (4)

date



日付
例) 2004-05-21
time


時刻
例) 10:40:00-09:00
XML Schema の例
(名前空間などの属性を外した)
<?xml version="1.0"?>
<xsd:schema>
<xsd:element name=“number”
type="xsd:integer"/>
</xsd:schema>
XMLインスタンスの例
(名前空間などの属性を外した)
<?xml version="1.0"?>
<st:number>
123
</st:number>
だめな例
<?xml version="1.0"?>
<st:number>
abcdefghij
</st:number>

整数ではないから。
複合型 (1)
要素の中に要素を指定する
(子要素)

student の子要素として familyName と
givenName がある。
<st:student>
<st:familyName>安藤</st:familyName>
<st:givenName>友晴</st:givenName>
</st:student>
XML インスタンスの例
<?xml version="1.0"?>
<st:student
xmlns:st=http://www.wakhok.ac.jp/~tomoharu/students
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=
"http://www.wakhok.ac.jp/~tomoharu/students sample03.xsd">
<st:familyName>安藤</st:familyName>
<st:givenName>友晴</st:givenName>
</st:student>
XML Schema の例
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
……>
<xsd:element name="student">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="familyName" type="xsd:string"/>
<xsd:element name="givenName" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
複合型の指定
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
……>
<xsd:element name="student">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="familyName" type="xsd:string"/>
<xsd:element name="givenName" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:sequence>
項目が順番に出現する
<xsd:sequence>
<xsd:element
name="familyName“ type="xsd:string"/>
<xsd:element
name="givenName" type="xsd:string" />
</xsd:sequence>


familyName 要素が出てから givenName 要素が出現
順番の変更や要素の省略は許されない
XML Schema に適合する例
<st:student>
<st:familyName>安藤</st:familyName>
<st:givenName>友晴</st:givenName>
</st:student>
XML Schema に
適合しない例 (1)
<st:student>
<st:givenName>友晴</st:givenName>
<st:familyName>安藤</st:familyName>
</st:student>

givenName と familyName が逆
XML Schema に
適合しない例 (2)
<st:student>
<st:familyName>安藤</st:familyName>
</st:student>

givenName がない
グローバル要素とローカル要素

グローバル要素


schema 要素の直下で定義されている要素
ローカル要素

complexType 要素の中で定義されている要
素
このXML Schema のうち、グローバ
ル要素とローカル要素は?
<xsd:schema>
<xsd:element name="student">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="familyName" type="xsd:string"/>
<xsd:element name="givenName" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>


Student 要素がグローバル要素
familyName 要素と givenName 要素がローカル要素
グローバル要素・ローカル要素
と名前空間 (1)


XML Schema のデフォルトの設定では、ローカ
ル要素に名前空間が適用されない。
以下の XML インスタンスは間違いとなる。
<st:student>
<st:familyName>安藤</st:familyName>
<st:givenName>友晴</st:givenName>
</st:student>
グローバル要素・ローカル要素
と名前空間 (2)

次のように、子要素には名前空間を指定
できなくなる。
<st:student>
<familyName>安藤</familyName>
<givenName>友晴</givenName>
</st:student>
グローバル要素・ローカル要素
と名前空間 (3)

ElementFormDefault 属性の値を “qualified” にすること
で、familyName 要素や givenName 要素に名前空間を
付けられる。
<xsd:schema
xmlns:xsd=http://www.w3.org/2001/XMLSchema
elementFormDefault=“qualified” ……>
<xsd:element name="student">
……
</xsd:element>
</xsd:schema>
グローバル要素・ローカル要素
と名前空間 (4)

以下の XML インスタンスは正しい。
<st:student>
<st:familyName>安藤</st:familyName>
<st:givenName>友晴</st:givenName>
</st:student>
ref 属性による参照 (1)
<?xml version="1.0"?>
<xsd:schema …>
<xsd:element name="student">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="st:familyName" />
<xsd:element ref="st:givenName" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="familyName" type="xsd:string" />
<xsd:element name="givenName" type="xsd:string" />
</xsd:schema>
ref 属性による参照 (2)

ref 属性を使うことによって、XML Schema
の階層が深くなっても、わかりやすい
Schema を記述できる。
ref 属性による参照 (3)


ref 属性を使うことによって、complexType
要素の中で定義されている要素も、グロー
バル要素にすることができる。
その結果、ElementFormDefault 属性を付
け加えなくても、名前空間が利用できる。
参考文献・URL

Extensible Markup Language (XML) 1.0
(Third Edition)



http://www.w3.org/TR/REC-xml/
XML 1.0 の仕様書です。
W3C XML Schema


http://www.w3.org/XML/Schema
XML Schema の仕様書など。