Presentation is loading. Please wait.

Presentation is loading. Please wait.

RELAX チュートリアル 川口耕介 Swift,Inc..

Similar presentations


Presentation on theme: "RELAX チュートリアル 川口耕介 Swift,Inc.."— Presentation transcript:

1 RELAX チュートリアル 川口耕介 Swift,Inc.

2 RELAXって何? XMLの書かれ方・書き方を限定する方法です 例えば、次のようなXMLは許したいけれども…
<?xml version=“1.0” ?> <html> <body><br /></body> </html> 次のようなXMLは許したくない時 <?xml version=“1.0” ?> <html> <ボディ><br /></ボディ> </html>

3 RELAXって何?(2) どのようなXMLはOKなのかの規則を示す方法です XMLの書き方を決める方法です
このようなもの全般をスキーマといいます DTD, XML Schema, … XMLの書き方を決める方法です 自然言語よりも厳密に決められます

4 スキーマを使うと何が嬉しいの? 苦労してスキーマを書く(あるいは、誰かの書いたスキーマを使う)と、次のような良い事があります。
間違いをしてしまった場所、間違いの内容などを教えてもらえます。 正しいXMLはどのように記述されるべきなのかの情報を含んでいるので、それを「読んで」どのようなXMLは正しいのかを知ることが出来ます。 ただし、リファレンスに使えるだけで、チュートリアルには使えません。最初に覚える人向けのわかりやすい解説は別に必要です。 自分が書いたXMLが正しいかどうかを自動チェックできます 文法のリファレンスとして役立ちます

5 DTDと比べると… RELAX DTD XMLで書ける? ○ × データ型 表現できる文法 DTDより強力 - XMLで書けるので
文法を覚える必要がありません プログラムからも取り扱いが容易です データ型は、文字列の部分にも検証をかける方法です 表現できる文法というのは難しい概念です。 でも、強力な部分は説明しません。

6 データ型 「データ型」の機能を使うと、書けるテキストデータの種類にも制限を設けられます これはOK これはNG
<?xml version=“1.0” ?> <price>1000</price> 自分でデータ型を決めることも出来ます <?xml version=“1.0” ?> <price>xyz</price>

7 RELAX文法の書き方入門

8 1.最初の雛型を書く 例:トップレベルにはhtml要素だけがきてよい
<?xml version=“1.0”?> <module moduleVersion=“1.0” relaxCoreVersion=“1.0” xmlns=“ <export> <interface label=“トップレベルにきてよい要素名1” /> <interface label=“トップレベルにきてよい要素名2” /> </export> ここにこれからRELAX文法の中身を書きます </module> おまじないです interface要素は複数書くことも出来ます 例:トップレベルにはhtml要素だけがきてよい <?xml version=“1.0”?> <module …> <export> <interface label=“html” /> </export> … </module>

9 2.使う要素名を(1つ)決める 例:imgという要素名を使うことにする <tag name=“img” />

10 3.要素に付随する属性を決める 属性の名前を何にするか 属性は必須なのか省略可能なのか 属性の値はどのようなものなのか 例
何でも良い、数値、URL、文字列、onかoff … src属性は必須、値はなんでもいい height属性は省略可能で、値は正の整数 @requiredを省略すると、falseを指定したのと一緒。 @typeを省略すると、何でもいいことになる。 <tag name=“img”> <attribute name=“src” required=“true” /> <attribute name=“height” type=“positiveInteger” /> … 必要なだけ … </tag>

11 3'.属性について 値の種類がうまく指定できない場合 指定したいものより広いデータ型を使って妥協します
src属性の値はURLのみにしたいんだけど、どうしたらいいの? 頑張ると、ある程度は頑張れます。 でも、とりあえず妥協しておいて後で直すことは簡単です。 でも、妥協しないで頑張ってしまうと、スキーマが出来ません。 +自然言語でコメントを書きます 指定したいものより広いデータ型を使って妥協します 例:奇数だけ→整数を全部許すように妥協 例:URLだけ→文字列を全部許すように妥協

12 4.タグの中身:総論 タグの中に書けるもの 中身があってはいけない場合 テキストだけの場合 要素だけの場合 要素もテキストも混在する場合
ここが一番難しいところ

13 中身があってはいけない場合 基本形 例:img要素は中に何をも含んではならない 間違いやすい例
<elementRule role=“親の要素名” type=“emptyString” /> <elementRule role=“img” type=“emptyString” /> なぜnoneでは駄目なのか <elementRule role=“img” type=“none” />

14 4.1.テキストだけの場合 基本形 p要素の中には文字列を書けます price要素の中には正の整数が書けます
落とし穴:前後に空白が入ってはいけません <elementRule role=“親の要素名” type=“中に入れるデータ型” /> <elementRule role=“p” type=“string” /> pitfallに注意しましょう。この制限は嫌いな人もいるでしょう。 <elementRule role=“price” type=“positiveInteger” /> <price> 10000 </price>

15 4.2.要素だけの場合 基本形 本当に困ったら <elementRule role=“親の要素名”>
中にどのように要素が現れてよいかの決まり </elementRule> emergency exitがあるので、迷ったらとりあえず妥協しましょう。 後できちんと書き換えればよいのです。 <elementRule role=“親の要素名”> <choice occurs=“*”> <ref label=“子に現れてよい要素名1” /> <ref label=“子に現れてよい要素名2” /> </choice> </elementRule>

16 4.3.要素もテキストも混在 基本形 落とし穴:RELAXではできないこと 「要素だけの場合」と一緒です mix要素を使います
次のようなXMLで、値段の中身を数字に限定することができません mixedの説明が抜けてる <?xml version=“1.0” ?> <値段 単位=“円”> 100 <消費税>5</消費税> </値段>

17 4.3 要素もテキストも混在 基本形 mixedで囲まれた中には、指示した決まりに従っう要素のほかに、任意のテキストがあらわれてもよいことになります <elementRule role=“親の要素名”> <mixed> 中にどのように要素が現れてよいかの決まり </mixed> </elementRule>

18 5.以上を繰り返し 考えたそれぞれの要素について のステップを繰り返します 名前を決めてtag要素を書く
付随する属性を決めてattribute要素を書く 要素の中身を決めてelementRule要素を書く のステップを繰り返します

19 子要素の現れ方の指定 基本形 occurs指定 意味 occurs=“?” 省略可能 occurs=“+” 繰り返し現れても良い
<ref label=“子要素の名前” /> <ref label=“子要素の名前” occurs=“出現の仕方”/> occurs指定 意味 occurs=“?” 省略可能 occurs=“+” 繰り返し現れても良い occurs=“*” 省略可能でもあり、かつ繰り返し現れても良い

20 occurs指定 例 このrefに… なし ? + * 空 × ○ P PP PPPP occurs指定なし occurs=“?”
<elementRule role=“body”> <ref label=“p” /> </elementRule> なし ? + * × P PP PPPP

21 子要素の現れ方の指定 最初はこれ、次にこれ、その次は… sequence指定を使います
例:html要素の中身は、まずhead要素で次がbody要素 occurs指定も使えます <elementRule role=“html”> <sequence> <ref label=“head” /> <ref label=“body” /> </sequence> </elementRule>

22 子要素の現れ方の指定 Aか、Bか、あるいはCか… choice指定を使います 例:img要素か、p要素か、table要素があらわれていい場合
occurs指定も使えます <elementRule role=“html”> <choice> <ref label=“img” /> <ref label=“p” /> <ref label=“table” /> </choice> </elementRule>

23 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” /> <ref label=“password” /><ref label=“user” /><ref label=“domain” />

24 RELAX文法を使う

25 RELAX文法の使い方 XML文書が文法に沿っているか検査 Verifier 文法のリファレンスとして使います 現在誰かが開発中?

26 RELAX Verifier for Javaを使う
RELAX文法と、XML文書を照合して、間違いがないかをチェックします(validation) 準備 からVerifierフルセット版をダウンロードします Zipに含まれるverifier.jarファイルをどこかに置きます 準備完了です RELAX文法を書くと、XMLにどのような制限を加えることが出来るか見てみましょう。

27 RELAX Verifier for Javaを使う
実際に照合してみましょう XML文書が正しく書かれていた場合 C:\>java –jar d:\verifier.jar c:\test.rlx c:\test.xml RELAXモジュールをロードしています XML文書を検証しています XML文書はRELAXモジュールに対して妥当です XML文書が間違っていた場合 RELAXモジュールをロードしています XML文書を検証しています XML文書に違反が見つかりました: コンテントモデルが不正です (3行目19文字目) ここに来る事ができるのは次のどれかです: <p>, endTag

28 VBRELAXを使う 準備 からVBRELAXをダウンロードしてセットアップ を開く エラーが出る場合は、同ページを「信頼済みサイト」に追加するか、標準のセキュリティセッティングを「低」にします

29 VBRELAXを使う 実際に照合してみましょう XML文書が正しく書けていた場合 XML文書が間違っていた場合
「parse」ボタンを押します XML文書が正しく書けていた場合 「valid」と出ます XML文書が間違っていた場合 エラーメッセージがいろいろ出ます

30 付録:データ型便覧 型名 意味 string 文字列。要するに何でもよい boolean “true”か“false” NCName
XMLのNCName integer 整数“1”や“-195”など double 0.256など emptyString 空文字列“”のみ none 全てが駄目


Download ppt "RELAX チュートリアル 川口耕介 Swift,Inc.."

Similar presentations


Ads by Google