Top / Relaxer / TIPS集

XMLファイルへの参照を取得する。

Relax NGのスキーマファイル(*.rng)からあらかじめjavaファイルを作成しておきます。 ルートノードがhogeだとすると

Hoge hoge=new Hoge([ファイルパス]);

としてインスタンスを作成すれば、xmlファイルへの参照の作成は完了です。

文字列を取得する。

DOMを用いていると、XMLの内容をコンソールに書き出すだけでも面倒ですが、Relaxerでは一つのメソッドでStringインスタンスを取得することができます。

System.out.println(hoge.makeTextDocument());

XMLの内容をファイルに書き出す

BufferedWriter writer =
 new BufferedWriter(
  new OutputStreamWriter(
   new FileOutputStream(new File([パス])),"EUC-JP"));
writer.write(URelaxer.doc2String4Print(hoge.makeDocument(), "EUC-JP"));
writer.close();

既存のデータベース用のRelaxNGスキーマを生成する(書き途中!)

rjdbcファイルを作成し(内容は下記参照)

<rjdbc>
 <uri>[いわゆるURI(JDBCに渡すヤツね)]</uri>
 <table>test</table>
 <username></username>
 <password/>
 <driver>org.postgresql.Driver(<-JDBCに渡すヤツね)</driver>
 <classpath>[たとえば]c:\hoge\postgresql.jar</classpath>
</rjdbc>

んで

relaxer -rng test.rjdbc

とやるとtest.rngが生成された!JDBC経由でRDBMSのスキーマを参照し、それようのRelaxNGファイルを生成しているようだ。。恐るべし。。*1

参考 http://www.asahi-net.or.jp/~dp8t-asm/java/tools/Relaxer/man_ja.html

文法覚え書き

0 or 1 (optional)

基本的に要素の個数の定義は、その定義を

<optional>
<zeroOrMore>
<oneOrMore>

などでくくってあげることで表現する。たとえば

<element name="menubar">
  <zeroOrMore>     <- ココ
    <ref name="menu"/>
  </zeroOrMore>    <- ココ
</element>

などのように。

あってもなくてもよい要素(0 or 1) (DTDの?)は

<optional>

でくくればよい。

0...n (zeroOrMore?)

0...n の要素 (DTDの*)は

<zeroOrMore>

でくくればよい。

1...n (oneOrMore?)

1...n の要素 (DTDの+)は

<oneOrMore>

でくくればよい。

属性の定義

属性は

<element name="item">
  <attribute name="className">
    <data type="token"/>
  </attribute>
  <data type="token"/>
</element>

と書く。*2

あってもなくてもよい属性

要素と同様、

 <element name="item">
   <optional>
     <attribute name="className">
       <data type="token"/>
     </attribute>
   </optional>
   <data type="token"/>
 </element>

optionalでくくるだけ。簡単。

要素の選択

たとえば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>

とかく。

参考にしたサイト

http://www.atmarkit.co.jp/fxml/rensai2/xmltool04/02.html


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Relaxer / TIPS集

現在のアクセス:6027


*1 インピーダンスミスマッチする場合はどうなるのかぁ?
*2 要素の定義と同じだ。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS