1 / 30

RELAX チュートリアル

RELAX チュートリアル. 川口耕介 Swift,Inc. RELAX って何?. XML の書かれ方・書き方を限定する方法です. 例えば、次のような XML は許したいけれども …. <?xml version= “ 1.0 ” ?> <html> <body><br /></body> </html>. 次のような XML は許したくない時. <?xml version= “ 1.0 ” ?> <html> < ボディ ><br /></ ボディ > </html>. RELAX って何? (2).

Download Presentation

RELAX チュートリアル

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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なのかの規則を示す方法です • このようなもの全般をスキーマといいます • DTD, XML Schema, … • XMLの書き方を決める方法です • 自然言語よりも厳密に決められます

  4. 自分が書いたXMLが正しいかどうかを自動チェックできます自分が書いたXMLが正しいかどうかを自動チェックできます 文法のリファレンスとして役立ちます スキーマを使うと何が嬉しいの? 苦労してスキーマを書く(あるいは、誰かの書いたスキーマを使う)と、次のような良い事があります。

  5. DTDと比べると…

  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=“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>

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

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

  11. 値の種類がうまく指定できない場合 src属性の値はURLのみにしたいんだけど、どうしたらいいの? 指定したいものより広いデータ型を使って妥協します 例:奇数だけ→整数を全部許すように妥協 例:URLだけ→文字列を全部許すように妥協 3'.属性について

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

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

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

  15. 4.2.要素だけの場合 • 基本形 • 本当に困ったら <elementRule role=“親の要素名”> 中にどのように要素が現れてよいかの決まり </elementRule> <elementRule role=“親の要素名”> <choice occurs=“*”> <ref label=“子に現れてよい要素名1” /> <ref label=“子に現れてよい要素名2” /> … </choice> </elementRule>

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

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

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

  19. 子要素の現れ方の指定 • 基本形 <ref label=“子要素の名前”/> <ref label=“子要素の名前”occurs=“出現の仕方”/>

  20. このrefに… occurs指定なし occurs=“?” occurs=“+” occurs=“*” occurs指定 <elementRule role=“body”> <ref label=“p” /> </elementRule>

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

  24. RELAX文法を使う

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

  26. RELAX Verifier for Javaを使う • RELAX文法と、XML文書を照合して、間違いがないかをチェックします(validation) • 準備 • http://www.swiftinc.co.jp/からVerifierフルセット版をダウンロードします • Zipに含まれるverifier.jarファイルをどこかに置きます • 準備完了です

  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を使う • 準備 • http://www.geocities.co.jp/SiliconValley-Bay/4639/vbrelax.htmからVBRELAXをダウンロードしてセットアップ • http://www.geocities.co.jp/SiliconValley-Bay/4639/relaxws/default.htmを開く • エラーが出る場合は、同ページを「信頼済みサイト」に追加するか、標準のセキュリティセッティングを「低」にします

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

  30. 付録:データ型便覧

More Related