Transcript XMLゼミ

XMLゼミ
独習XML
~第3章 文書と構造~
3.3 スキーマ
3.3 XML Schema
谷津 哲平
スキーマとは
さまざまな文書やデータの内容構造を定義したもの(広義)
整形式文書(内容の保証なし)
検証済み文書(構造が厳格)
スキーマ文書
XML文書の構造を定義するための方法
DTD (Document Type Definition、文書型定義)
XML Schema (XMLスキーマ)
RELAX (Regular Language Description for XML)
Microsoft XML Schema (XML Data)
※スキーマとXML Schemaは同じではない
有効性を検証した文書(valid XML document)はタグの順序や属性値などが
スキーマ文書に定義されているとおりだと保証される
XML Schema 概要
XMLの文書型定義にはDTDが使われてきたが不十分になり、
XML Schemaは機能不足を改善し、文法規則をXMLと同じにした
使い方
musinst.xml
XML文書
musinst.xsd
XML Schema
バリデータ(Validator)
or
XMLパーサ
XML文書を
検証する
Schema 要素
XML Shema を定義するときは schema要素を記述し,その中に
スキーマの定義を記述する
XMLスキーマのスケルトン
<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>
(スキーマ定義)
</xml:schema>
コメント,要素宣言
XML Schemaのコメント
<!-- schema.xsd -->
※XML 文書と同じ
XML Schemaの要素宣言(element declaration)
<xsd:element name=“楽器” type=“xsd:string”>
type属性の値
string(文字列型)であることを示す
name属性の値
要素名が「楽器」であることを示している
単純型(simpleType)
XML Schemaではデータ型に単純型と複合型がある
単純型
単純型
説明
値の例
string
文字列
Mojiretu
positiveInteger
正の整数
1, 126789
integer
整数
-126789, -1, 0, 1
uriReference
URL
http://www.ibaraki.ac.jp/
decimal
10進数
-10, 0, 123.4, 1000.0
time
時刻
13:20:00.000
単純型のユーザ定義
独自の単純な型を単純型(simpleType)として定義できる
ユーザ定義の例
<xsd:simpleType name=“MyType” base=“xsd:string”>
<xsd:pattern value=“[A-Z]{2}”/>
</xml:simpleType>
「MyType」という単純型を文字列方をベースに
A-Zの範囲の大文字の英文字2文字で構成されるpatternと定義
(文字列の形式を指定する要素)
複合型 (complexType)
XML文書の構造や複数の要素を含む要素はcomplexTypeを使う
複合型
<?xml version=“1.0” encoding=“UTF-16” ?>
<!– schema.xsd -->
<xsd:schema xmlns:xsd=“http://www.w3.org/1999/XMLSchema”>
<xsd:complexType name=“連絡先”>
<xsd:element name=“氏名” type=“xsd:string”>
要素宣言
<xsd:attribute name=“CODE” type=“xsd:long”/>
<xsd:attribute name=“TEL” type=“xsd:string”/>
属性宣言
<xsd:attribute name=“FAX” type=“xsd:string”/>
</xsd:element>
</xsd:complexType>
</xmd:schema>
要素参照,出現回数
要素参照の指定
<xsd:element ref=“Title” minOccurs=“0” />
要素の参照は ref属性を使う
出現回数の指定
<xsd:element name=“氏名” type=“xsd:string” minOccurs=“1” />
<xsd:element name=“TEL” type=“xsd:string” />
<xsd:element name=“別名” type=“xsd:string” minOccurs=“0”
maxOccurs=“unbounded” />
要素「氏名」タグが少なくとも1個,要素「TEL」も少なくとも1個
要素「別名」は出現しなくても,いくつ出現してもよい
要素がいくつでもよいとき maxOccurs に“unbounded”を指定する
属性宣言(attribute declaration)
属性はattribute要素で宣言する
属性の指定
<xsd:attribute name=“CODE” type=“xsd:NMTOKEN”/>
連絡先の<氏名>タグの属性“CODE”を“xsd:NMTOKEN”型の
属性として指定する例
ファセット(facet)[1]
制限を表すもの
XML Shema では既存のデータ型の範囲やサイズを制限して
新しいデータ型を定義することができる
xsd:length
値の長さを限定する.文字列の場合は文字単位,
バイナリーデータの場合はオクテット(8ビット)単位,
リストの場合はリスト項目単位で指定.
<xsd:length value=”5”>
文字列の場合 5文字という制限になる
ファセット(facet)[2]
xsd:minLength
値の長さの最小値を限定する.
xsd:maxLength
値の長さの最大値を限定する.
要素名「title」
<xsd:element name="title">
単純型である
<xsd:simpleType>
<xsd:restriction base="xsd:string"> 「xsd:string」を元に制限をつける
<xsd:maxLength value=“32" />
<xsd:minLength value=“6" /> ファセット
</xsd:restriction>
最大値32,最小値6 という制限
</xsd:simpleType>
</xsd:element>
ファセット(facet)[3]
xsd:maxInclusive
値の範囲の最大値を限定する.指定した値は含まれる.
<xsd:maxInclusive value=”10”>
10以下
xsd:maxExclusive
値の範囲の最大値を限定する.指定した値は含まれない.
<xsd:maxExclusive value=”10”>
10未満
XML Schema の例 (再)
「楽器リスト」は「楽器」要素で構成
「楽器」の個数は無限
「記譜音域」は省略できる
文字型要素
正の整数型要素
課題
●XML Schema で,要素の内容を1以上10未満に
制約する定義を記述する