2003年度 データベース論

XML Schema (1)
ソフトウェア特論
第3回 / 2004-05-07
連絡

次週 (5/14) は休講となります。
きょうの目標

XML Schema の基本を知る
DTD
DTDとは何か

XMLベースの言語で、どのようなタグがど
のような組み合わせで利用できるかという
情報を記述するためのもの。
DTDの例
<?xml version="1.0" encoding="Shift_JIS"?>
<!ELEMENT BOOKLIST (BOOK+)>
<!ELEMENT BOOK (
TITLE, AUTHOR, PUBLISHER)>
<!ELEMENT TITLE
(#PCDATA)>
<!ELEMENT AUTHOR
(#PCDATA)>
<!ELEMENT PUBLISHER
(#PCDATA)>
DTDを使ったXML文書
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE BOOKLIST SYSTEM "BOOKLIST.dtd">
<BOOKLIST>
<BOOK>
<TITLE>情報メディア論</TITLE>
<AUTHOR>丸山不二夫 編著</AUTHOR>
<PUBLISHER>八千代出版</PUBLISHER>
</BOOK>
………
</BOOKLIST>
DTDの限界
1.
2.
3.
4.
XMLらしくない記法。
要素の出現回数、出現順序などの設定
に制限が多い。
データ型を指定できない。
名前空間が使いにくい。
XMLの限界 (1)
XMLらしくない記法

「要素を組み合わせる」という記法ではな
いので、わかりにくい。
<!ELEMENT BOOKLIST (BOOK+)>
<!ELEMENT BOOK (
TITLE, AUTHOR, PUBLISHER)>
<!ELEMENT TITLE
(#PCDATA)>
XMLの限界 (2) 要素の出現回数、
出現順序などの設定に制限が多い


この要素は2回以上5回まで出現できる、
といった指定ができない。
要素が順不同に出現する、といった指定
ができない。
XMLの限界 (3)
データ型を指定できない

DTD では、要素の内容として次の2つしか
指定できない。



他の要素
PCDATA
この要素には数字が入る、といったデータ
型の指定ができない。
XMLの限界 (4)
名前空間が使いにくい


DTDは名前空間を扱うようには設計されて
いない。
DTDで定義したタグを名前空間をつけて扱
えない。
XML Schema とは何か
XML Schema


DTD とは別に、World Wide Web
Consortium (W3C) が策定したスキーマ
言語。
いま述べた DTD の弱点を補える。
単純な XML Schema
<?xml version="1.0"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace=
"http://www.wakhok.ac.jp/~tomoharu/students"
xmlns:st=
"http://www.wakhok.ac.jp/~tomoharu/students">
<xsd:element name=“name”
type="xsd:string"/>
</xsd:schema>
もっと単純化すると
<?xml version="1.0"?>
<xsd:schema>
<xsd:element name=“name”
type="xsd:string"/>
</xsd:schema>
要素の指定
<xsd:element name=“name” type="xsd:string"/>



name という名前のタグがある。
内容は string (=文字列) である。
例)

<name>安藤友晴</name>
「名前空間」とは




XMLでは、ひとつの文書に(XMLベースの)複数
の言語を組み合わせて使うことができる。
複数の言語を使うとき、同じ名前のタグがあった
ら困る。
そこで、どの言語のタグなのかを名前空間で識
別する必要がある。
URIを名前空間として使うと、他とのダブリがなく
なる。
XML Schema 自体の
名前空間の指定
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace=
"http://www.wakhok.ac.jp/~tomoharu/students"
xmlns:st=
"http://www.wakhok.ac.jp/~tomoharu/students">
<xsd:element name=“name”
type="xsd:string"/>
</xsd:schema>
この XML Schema の
名前空間の指定
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace=
"http://www.wakhok.ac.jp/~tomoharu/students"
xmlns:st=
"http://www.wakhok.ac.jp/~tomoharu/students">
<xsd:element name=“name”
type="xsd:string"/>
</xsd:schema>
ファイルの保存

XML Schema のファイルは “.xsd” という
拡張子を持つのが普通

例えば sample01.xsd
このXML Schema を使った
XML インスタンス
<?xml version="1.0"?>
<st:name
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
sample01.xsd">
安藤友晴
</st:name>
属性を無視すると
<?xml version="1.0"?>
<st:name>
安藤友晴
</st:name>

XML Schema で指定
したとおり
 name という名前
のタグがある。
 内容は string (=
文字列) である。
XML Schema の指定 (1)
<?xml version="1.0"?>
<st:name
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
sample01.xsd">
安藤友晴
</st:name>
XML Schema の指定 (2)
xsi:schemaLocation=
"http://www.wakhok.ac.jp/~tomoharu/students
sample01.xsd">

XML Schema の URI

ファイルの実体がある場所でない
XML Schema のファイル
 sample01.xsd
 カレントディレクトリにある


http://www.wakhok.ac.jp/~tomoharu/students
このXML Schema の
名前空間 (1)
<?xml version="1.0"?>
<st:name
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
sample01.xsd">
安藤友晴
</st:name>
このXML Schema の
名前空間 (2)



http://www.wakhok.ac.jp/~tomoharu/st
udents という URI を持つ XML Schema
で定義されているタグは
st という接頭辞を持つ
例)

<st:name>安藤友晴</st:name>
XSV による検証
XSV





XML Schema の検証ツール。
XML 文書が XML Schema に適合しなけ
れば、エラーメッセージを出す。
W3C の協力を得ながら、エジンバラ大学
で開発が進んでいる。
オープンソース
http://www.ltg.ed.ac.uk/~ht/xsvstatus.html
XSV を使う



インストール
XSV をインストールしたフォルダに path を
通す。
使い方



コマンドプロンプト (or cygwin) から使う
xsv sample01.xml
検証結果は XML ファイルとして出力され
る。
XSV の使用例
C:\Home\200405>xsv sample01.xml
<?xml version='1.0'?>
<xsv xmlns="http://www.w3.org/2000/05/xsv"
docElt="{http://www.wakhok.ac.jp/~tomoharu/students}name"
instanceAssessed="true" instanceErrors="0" rootType="string"
schemaErrors="0"
schemaLocs="http://www.wakhok.ac.jp/~tomoharu/students ->
sample01.xsd"
target="file:///C:/Home/200405/sample01.xml" validation="strict"
version="XSV 2.7-1 of 2004/04/01 13:40:50">
<schemaDocAttempt URI="file:///C:/Home/200405/sample01.xsd"
namespace="http://www.wakhok.ac.jp/~tomoharu/students"
outcome="success" source="schemaLoc"/>
</xsv>
注意点



XML に日本語が含まれる場合、utf-8 で保
存する必要がある。
utf-8 = XML のデフォルトの設定
Shift_JIS や EUC ではだめ。
参考文献・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 の仕様書など。