Upload
jesse-england
View
74
Download
0
Embed Size (px)
DESCRIPTION
RELAX チュートリアル. 川口耕介 Swift,Inc. RELAX って何?. XML の書かれ方・書き方を限定する方法です. 例えば、次のような XML は許したいけれども …. . 次のような XML は許したくない時. < ボディ > . RELAX って何? (2). - PowerPoint PPT Presentation
Citation preview
RELAX チュートリアル
川口耕介 Swift,Inc.
RELAX って何? XML の書かれ方・書き方を限定する方法です
<?xml version=“1.0” ?><html>
<body><br /></body></html>
例えば、次のような XML は許したいけれども…
<?xml version=“1.0” ?><html>
< ボディ ><br /></ ボディ ></html>
次のような XML は許したくない時
RELAX って何? (2) どのような XML は OK なのかの規則を
示す方法です このようなもの全般をスキーマといいま
す DTD, XML Schema, …
XML の書き方を決める方法です 自然言語よりも厳密に決められます
スキーマを使うと何が嬉しいの?苦労してスキーマを書く(あるいは、誰かの書いたスキーマを使う)と、次のような良い事があります。
自分が書いた XML が正しいかどうかを自動チェックできます
文法のリファレンスとして役立ちます
DTD と比べると…
RELAX DTD
XML で書ける? ○ ×
データ型 ○ ×
表現できる文法 DTD より強力 -
データ型「データ型」の機能を使うと、書け
るテキストデータの種類にも制限を設けられます
これは OK
これは NG
<?xml version=“1.0” ?><price>1000</price>
<?xml version=“1.0” ?><price>xyz</price>
RELAX 文法の書き方入門
1. 最初の雛型を書く
例:トップレベルには html 要素だけがきてよい
<?xml version=“1.0”?><module moduleVersion=“1.0” relaxCoreVersion=“1.0”
xmlns=“http://www.xml.gr.jp/2000/relaxCore”> <export> <interface label=“ トップレベルにきてよい要素名 1” /> <interface label=“ トップレベルにきてよい要素名 2” /> </export>
ここにこれから RELAX 文法の中身を書きます</module>
<?xml version=“1.0”?><module …> <export> <interface label=“html” /> </export> …</module>
2. 使う要素名を ( 1つ ) 決める 例: img という要素名を使うことにする
<tag name=“img” />
3. 要素に付随する属性を決める 属性の名前を何にするか 属性は必須なのか省略可能なのか 属性の値はどのようなものなのか
何でも良い、数値、 URL 、文字列、 on か off … 例
src 属性は必須、値はなんでもいい height 属性は省略可能で、値は正の整数
<tag name=“img”> <attribute name=“src” required=“true” /> <attribute name=“height” type=“positiveInteger” /> … 必要なだけ …</tag>
3'. 属性について 値の種類がうまく指定できない場合
src 属性の値は URL のみにしたいんだけど、どうしたらいいの?
指定したいものより広いデータ型を使って妥協します 例:奇数だけ→整数を全部許すように妥協 例: URL だけ→文字列を全部許すように妥協
4. タグの中身:総論 タグの中に書けるもの
中身があってはいけない場合 テキストだけの場合 要素だけの場合 要素もテキストも混在する場合
中身があってはいけない場合 基本形
例: img 要素は中に何をも含んではならない
間違いやすい例
<elementRule role=“ 親の要素名” type=“emptyString” />
<elementRule role=“img” type=“emptyString” />
<elementRule role=“img” type=“none” />
4.1. テキストだけの場合 基本形
p 要素の中には文字列を書けます
price 要素の中には正の整数が書けます
落とし穴:前後に空白が入ってはいけません
<elementRule role=“p” type=“string” />
<elementRule role=“price” type=“positiveInteger” />
<elementRule role=“ 親の要素名” type=“ 中に入れるデータ型” />
<price> 10000</price>
4.2. 要素だけの場合 基本形
本当に困ったら
<elementRule role=“ 親の要素名” >
中にどのように要素が現れてよいかの決まり
</elementRule>
<elementRule role=“ 親の要素名” > <choice occurs=“*”> <ref label=“ 子に現れてよい要素名 1” /> <ref label=“ 子に現れてよい要素名 2” /> … </choice></elementRule>
4.3. 要素もテキストも混在 基本形
「要素だけの場合」と一緒ですmix 要素を使います
落とし穴: RELAX ではできないこと次のような XML で、値段の中身を数字に限定することができません
<?xml version=“1.0” ?>< 値段 単位 =“ 円” > 100 < 消費税 >5</ 消費税 ></ 値段 >
4.3 要素もテキストも混在 基本形
mixed で囲まれた中には、指示した決まりに従っう要素のほかに、任意のテキストがあらわれてもよいことになります
<elementRule role=“ 親の要素名” > <mixed> 中にどのように要素が現れてよいかの決まり </mixed></elementRule>
5. 以上を繰り返し 考えたそれぞれの要素について
名前を決めて tag 要素を書く 付随する属性を決めて attribute 要素を書
く 要素の中身を決めて elementRule 要素を書
く
のステップを繰り返します
子要素の現れ方の指定 基本形
<ref label=“ 子要素の名前” />
<ref label=“ 子要素の名前” occurs=“ 出現の仕方” />
occurs 指定
意味
occurs=“?”
省略可能
occurs=“+”
繰り返し現れても良い
occurs=“*”
省略可能でもあり、かつ繰り返し現れても良い
occurs 指定 例 この ref に…
occurs 指定なし occurs=“?” occurs=“+” occurs=“*”
<elementRule role=“body”> <ref label=“p” /></elementRule>
なし ? + *
空 × ○ × ○
P ○ ○ ○ ○
PP × × ○ ○
PPPP × × ○ ○
子要素の現れ方の指定 最初はこれ、次にこれ、その次は…
sequence 指定を使います 例: html 要素の中身は、まず head 要素で
次が body 要素
occurs 指定も使えます
<elementRule role=“html”> <sequence> <ref label=“head” /> <ref label=“body” /> </sequence></elementRule>
子要素の現れ方の指定 A か、 B か、あるいは C か…
choice 指定を使います 例: img 要素か、 p 要素か、 table 要素が
あらわれていい場合
occurs 指定も使えます
<elementRule role=“html”> <choice> <ref label=“img” /> <ref label=“p” /> <ref label=“table” /> </choice></elementRule>
RELAX ではできないこと 次のような指定はうまくできません
どうしてもやりたい人は
login という要素の下には、 user 要素と password 要素と domain 要素が必ず一回登場しなくてはいけないが、しかしその順序はどうでもよい
<elementRule role=“login”> <choice> <sequence> <ref label=“user” /><ref label=“password” /><ref label=“domain” /> </sequence><sequence> <ref label=“user” /><ref label=“domain” /><ref label=“password” /> </sequence><sequence> <ref label=“password” /><ref label=“user” /><ref label=“domain” /> …
RELAX 文法を使う
RELAX 文法の使い方 XML 文書が文法に沿っているか検査
Verifier 文法のリファレンスとして使います
現在誰かが開発中 ?
RELAX Verifier for Java を使う RELAX 文法と、 XML 文書を照合して、間
違いがないかをチェックします (validation)
準備 http://www.swiftinc.co.jp/ から Verifier フルセット版をダウンロードします
Zip に含まれる verifier.jar ファイルをどこかに置きます
準備完了です
実際に照合してみましょう
XML 文書が正しく書かれていた場合
RELAX Verifier for Java を使う
C:\>java –jar d:\verifier.jar c:\test.rlx c:\test.xml
RELAX モジュールをロードしていますXML 文書を検証していますXML 文書は RELAX モジュールに対して妥当です
XML 文書が間違っていた場合RELAX モジュールをロードしていますXML 文書を検証していますXML 文書に違反が見つかりました : コンテントモデルが不正です( 3行目 19 文字目)ここに来る事ができるのは次のどれかです : <p>, endTag
VBRELAX を使う 準備
http://www.geocities.co.jp/SiliconValley-Bay/4639/vbrelax.htm から VBRELAX をダウンロードしてセットアップ
http://www.geocities.co.jp/SiliconValley-Bay/4639/relaxws/default.htm を開く
エラーが出る場合は、同ページを「信頼済みサイト」に追加するか、標準のセキュリティセッティングを「低」にします
VBRELAX を使う 実際に照合してみましょう
上の欄に RELAX 文法を入れます 下の欄に XML 文書を入れます 「 parse 」ボタンを押します
XML 文書が正しく書けていた場合 「 valid 」と出ます
XML 文書が間違っていた場合 エラーメッセージがいろいろ出
ます
付録:データ型便覧型名 意味string 文字列。要するに何でもよいboolean “true” か“ false”NCName XML の NCNameinteger 整数“ 1” や“ -195” などdouble 0.256などemptyString 空文字列“”のみnone 全てが駄目