- 追加された行はこの色です。
- 削除された行はこの色です。
#topicpath
----
//ここにコンテンツを記述します。
#contents
***XMLファイルへの参照を取得する。 [#ca33b1fa]
Relax NGのスキーマファイル(*.rng)からあらかじめjavaファイルを作成しておきます。
ルートノードがhogeだとすると
Hoge hoge=new Hoge([ファイルパス]);
としてインスタンスを作成すれば、xmlファイルへの参照の作成は完了です。
***文字列を取得する。 [#be7928af]
DOMを用いていると、XMLの内容をコンソールに書き出すだけでも面倒ですが、Relaxerでは一つのメソッドでStringインスタンスを取得することができます。
System.out.println(hoge.makeTextDocument());
***XMLの内容をファイルに書き出す [#j7cc7f62]
BufferedWriter writer =
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(new File([パス])),"EUC-JP"));
writer.write(URelaxer.doc2String4Print(hoge.makeDocument(), "EUC-JP"));
writer.close();
***既存のデータベース用のRelaxNGスキーマを生成する(書き途中!) [#p08d26d9]
rjdbcファイルを作成し(内容は下記参照)
<rjdbc>
<uri>[いわゆるURI(JDBCに渡すヤツね)]</uri>
<uri>jdbc:postgresql://[hostname]:5432/[DBName](JDBCに渡すヤツね)</uri>
<table>test</table>
<username></username>
<password/>
<driver>org.postgresql.Driver(<-JDBCに渡すヤツね)</driver>
<classpath>[たとえば]c:\hoge\postgresql.jar</classpath>
<classpath>[たとえば]c:\hoge\jdbc7.2dev-1.2.jar</classpath>
</rjdbc>
んで
relaxer -rng test.rjdbc
とやるとtest.rngが生成された!JDBC経由でRDBMSのスキーマを参照し、それようのRelaxNGファイルを生成しているようだ。。恐るべし。。((インピーダンスミスマッチする場合はどうなるのかぁ?))
とやるとtest.rngが生成されました。JDBC経由でRDBMSのスキーマを参照し、それようのRelaxNGファイルを生成しているもよう。。((インピーダンスミスマッチする場合はどうなるのかぁ?))と思ってたんだけど、このrngファイルをもとに
relaxer -java -jdbc test.rng
とやっても、元のデータベースのddlはできないみたい。どうも使い道が違うのかなぁ。。
でも[[ここ:http://www2.xml.gr.jp/log.html?MLID=relax-users-j&N=2735]]をみるとそんなようなことを書いてあるしなあ。
参考
http://www.asahi-net.or.jp/~dp8t-asm/java/tools/Relaxer/man_ja.html
**文法覚え書き [#j68fcd6e]
***0 or 1 (optional) [#r93b8a03]
基本的に要素の個数の定義は、その定義を
<optional>
<zeroOrMore>
<oneOrMore>
などでくくってあげることで表現する。たとえば
<element name="menubar">
<zeroOrMore> <- ココ
<ref name="menu"/>
</zeroOrMore> <- ココ
</element>
などのように。
あってもなくてもよい要素(0 or 1) (DTDの?)は
<optional>
でくくればよい。
***0...n (zeroOrMore) [#tf290aba]
0...n の要素 (DTDの*)は
<zeroOrMore>
でくくればよい。
***1...n (oneOrMore) [#z63d447e]
1...n の要素 (DTDの+)は
<oneOrMore>
でくくればよい。
***属性の定義 [#r72ef7d7]
属性は
<element name="item">
<attribute name="className">
<data type="token"/>
</attribute>
<data type="token"/>
</element>
と書く。((要素の定義と同じだ。))
***あってもなくてもよい属性 [#p7421550]
要素と同様、
<element name="item">
<optional>
<attribute name="className">
<data type="token"/>
</attribute>
</optional>
<data type="token"/>
</element>
optionalでくくるだけ。簡単。
***要素の選択 [#ue889951]
たとえばmenuタグでもitemタグでもどちらでもよいとき、つまり
<!ELEMENT menu (title, (item | menu)*)>
は
<define name="menu">
<element name="menu">
<element name="title">
<data type="token"/>
</element>
<zeroOrMore>
<choice> <-選択
<ref name="menu"/> <- menu か
<element name="item"> <- item のどちらか
<data type="token"/>
</element>
</choice>
</zeroOrMore>
</element>
</define>
とかく。
***参考にしたサイト [#rd63e82a]
http://www.asahi-net.or.jp/~dp8t-asm/java/tools/Relaxer/man_ja.html
http://www.atmarkit.co.jp/fxml/rensai2/xmltool04/02.html
----
この記事は
#vote(おもしろかった,そうでもない)
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}