RelaxNGCC ( RELAX NG Compiler Compiler)
$Revision: 1.8 $
By RelaxNGCC SourceForge Project /
岡嶋 大介
RelaxNGCCは、RELAX NGで書かれたスキーマからJavaのソースコードを生成するツールです。入力XMLの各エレメントやアトリビュートを読んだときのアクションを、yaccやJavaCCと同様の手法でユーザが直接スキーマに追加記述します。
コンパイラの実行にはJRE1.2以降が必要です。
生成されたコードの実行にはSAXパーサが必要です。
主な特徴
スキーマからソースコードを生成するツールとしてはRelaxerが有名ですが、RelaxNGCCは次のような違いがあります。
- RelaxNGCCは、もとのXML文書の木構造にとらわれない処理が簡単です。RelaxerがXML文書全体について各部分に対応するオブジェクトを生成するのに対し、XML文書から必要なデータだけを抽出・加工する処理が得意です。
- RelaxNGCCは、XML文書を読み込むだけの機能です。XML文書を出力する機能はありません。XML->Javaの一方通行のツールです。
- 一からDOMやSAXのプログラムを書くよりも簡単にXMLを読む機能が実装できます。
問い合わせ
RelaxNGCCに関する質問・要望は、開発者全員がモニターしているRelax開発者メーリングリストへお願いします。まだ安定した実装になっているとはいえないので、使ってみておかしいと思ったらお気軽にご連絡ください。できる限りすみやかに対処します。ユーザの声が僕らのモチベーションを引き出すのでよろしくお願いします。
ライセンス
RelaxNGCC本体はGNU GENERAL PUBLIC LICENSE(GPL)に従って配布されます。RelaxNGCCが生成したJavaソースコードについては我々は著作権を放棄します。
AttributesImpl.javaについて注意
生成されるAttributesImpl.javaはorg.xml.sax.Attributesの実装として使っています。このソースコードはXerces等とともに配布されているorg.xml.sax.helpers.AttributesImplのソースコードを元にしていますが、現在のところこれにはremoveAttributeメソッドにバグがあるため、それを避ける目的でバグを修正したものをrelaxngcc.runtimeパッケージに配置して使用しています。なので当面の間、relaxngcc.runtime.AttributesImpl.javaだけはorg.xml.sax.helpers.AttributesImplに倣ってpublic domainのライセンスとします。なおこのバグはJRE1.4でも同様の模様です。
リリース
- 2002/03/03 バージョン0.51を公開しました。
- JDK1.4上での動作確認と、開発環境のEclipseへの移行をしました。RelaxNGCCの機能自体は変わっていません。
- 2002/03/17 バージョン0.6を公開しました。
- RelaxNGCCで処理できない文法が入力された場合のエラーメッセージを強化しました。
list
にalias
アトリビュートをつけることができるようにしました。
- 2002/05/03 バージョン0.7を公開しました。
inline
アトリビュートを導入し、スコープの展開ができるようになりました。
- マニュアルを改訂しました。
- 2002/06 バージョン1.0を公開しました。
- 川口耕介が開発に参加したのに伴い、プロジェクトをSourceForgeに移管しました
- RelaxNGCC自身を使って作ったパーサを使ってRELAX NG文法を読み込むように書き換えました
- コンパイラのアルゴリズムを全面的に変更し、正しいコードが生成されるようにしました
- 属性によらない簡易記法を試験的に実装しました
- 新しい機能を追加し、それに伴いc:with-params, c:params, c:return-typeやc:return-value といった属性を追加しました
- ランタイムを再デザインしなおしました。処理をつかさどるNGCCRuntimeクラスが生成されるようになりました
- RELAX NG コンパクト文法サポートは取り除かれました
- コンパイラはc:java-body内のJavaコードを正しく解析するようになりました。これに伴い、宣言されたエイリアスの取り扱いがスマートになりました
さらに前のリリース履歴はこちらです。
将来のバージョンで行う予定のこと
- トークンの先読みをしてより広いスキーマに対応
- C#のコード生成
- ドキュメント整備、特に内部的なアルゴリズムについて
この他の機能の提案などがあれば、SourceForgeのウェブサイトに書き込んでください.
関連リソース