// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents

Log4jのXML形式のConfigファイルをRelaxerを用いて入出力できれば便利だなぁと思って色々試行錯誤したときのメモ。

***要件 [#z820428f]
-Log4jの制御をWEB上で行えるようにしたい。
-Log4jの状態をWEB上で確認できるようにしたい。

***メモ [#l7829f8f]
幸いlog4j.dtdがあるのでここからRELAXNGスキーマを作ればよいと思ったんだけど、log4j.dtdがDTDのくせに名前空間を考慮して作成されているみたいで、dtdInstやDTD2RELAXがエラーになっちゃう。最終的にはTrangを使用するのがよいという結論に落ち着きました。


***Trangをつかってみる [#gfc918cd]
[[Trang:http://www.thaiopensource.com/relaxng/trang.html]]よりダウンロード。で、
 java -jar ./trang.jar log4j.dtd log4j.rng <- 全く元のlog4j.dtdです
 relaxer -java -java.package:nu.mine.kino.log4j.binding
         -java.xml.namespace log4j.rng <- 上で作成したlog4j.rngです。
でOKでした。いままでなにやってたんだろー。。。。


ようするに
-[[QName:http://www.kohsuke.org/relaxng/tutorial.ja.html#IDALJZR]]に対応してるってことかな??
-[[RELAX NG 入門:QName:http://www.kohsuke.org/relaxng/tutorial.ja.html#IDALJZR]]に対応してるってことかな??


:参考|[[RELAX分割検証参照モデル:http://www.xml.gr.jp/relax/dandVRefereceModel-j.html]]


**以下、試行錯誤 [#q8e61ff5]

***log4j.dtd -> log4j.rngに変換したい。 [#a9211394]
やり方は
-log4j.dtdは名前空間込みでdtd定義されているので要素名のlog4j:などを消去((log4j.dtdはlog4jのtarに入ってる))((こうした瞬間にlog4jの名前空間とまざっちゃうよなぁ))。
-[[DTDinst:http://www.thaiopensource.com/relaxng/dtdinst/]]で中間ファイルを作成
 java -jar dtdinst.jar log4j.dtd > log4.tmp.xml
-Xalanで変換(xslはDTDinstに添付されている)
-ちょっと古いバージョンでrngが作成されるのと、また、
  <start>
    <ref name="hogehoge"/>
  </start>
が出力されないので、適当に修正。。
-relaxerでJavaクラス生成
 relaxer -java.package:nu.mine.kino.binding.log4j
         -dir:../source/nu/mine/kino/binding/log4j log4j.rng 

こうやると何故かクラス名にElement..ってprefixがついちゃう。けすにはrngのなかのrefを置換かぁ??








----
この記事は
#vote(おもしろかった,そうでもない)

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS