Relax NGのスキーマファイル(*.rng)からあらかじめjavaファイルを作成しておきます。 ルートノードがhogeだとすると
Hoge hoge=new Hoge([ファイルパス]);
としてインスタンスを作成すれば、xmlファイルへの参照の作成は完了です。
DOMを用いていると、XMLの内容をコンソールに書き出すだけでも面倒ですが、Relaxerでは一つのメソッドでStringインスタンスを取得することができます。
System.out.println(hoge.makeTextDocument());
BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(new File([パス])),"EUC-JP")); writer.write(URelaxer.doc2String4Print(hoge.makeDocument(), "EUC-JP")); writer.close();
基本的に要素の個数の定義は、その定義を
<optional> <zeroOrMore> <oneOrMore>
などでくくってあげることで表現する。たとえば
<element name="menubar"> <zeroOrMore> <- ココ <ref name="menu"/> </zeroOrMore> <- ココ </element>
などのように。
あってもなくてもよい要素(0 or 1) (DTDの?)は
<optional>
でくくればよい。
0...n の要素 (DTDの*)は
<zeroOrMore>
でくくればよい。
1...n の要素 (DTDの+)は
<oneOrMore>
でくくればよい。
属性は
<element name="item"> <attribute name="className"> <data type="token"/> </attribute> <data type="token"/> </element>
と書く。*1
要素と同様、
<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
この記事は
現在のアクセス:6027