/ja?>
RelaxNGCC ( RELAX NG Compiler Compiler)
RelaxNGCCは、RELAX NGで書かれたスキーマからJavaのソースコードを生成するツールです。入力XMLの各エレメントやアトリビュートを読んだときのアクションを、yaccやJavaCCと同様の手法でユーザが直接スキーマに追加記述します。/ja?>
RelaxNGCC is a tool for generating Java source code from a given RELAX NG grammar. By embedding code fragments in the grammar like yacc or JavaCC, you can take appropriate actions while parsing valid XML documents against the grammar./en?>
/ja?>
/en?>
コンパイラの実行にはJRE1.2以降が必要です。/ja?>
JRE 1.2 or later is required to run the compiler./en?>
生成されたコードの実行にはSAXパーサが必要です。/ja?>
Generated code will only need a SAX parser to run./en?>
主な特徴/ja?>Feature Highlights/en?>
スキーマからソースコードを生成するツールとしてはRelaxerが有名ですが、RelaxNGCCは次のような違いがあります。/ja?>
Relaxer is another famous tool for generating Java source code from a given grammar, but RelaxNGCC is different from Relaxer at following points./en?>
- RelaxNGCCは、もとのXML文書の木構造にとらわれない処理が簡単です。RelaxerがXML文書全体について各部分に対応するオブジェクトを生成するのに対し、XML文書から必要なデータだけを抽出・加工する処理が得意です。/ja?>The code generated by RelaxNGCC can ignore unnecessary parts of the input XML document while Relaxer retrieves all information in the document. It is powerful especially when you want to extract necessary data from XML instances./en?>
- RelaxNGCCは、XML文書を読み込むだけの機能です。XML文書を出力する機能はありません。XML->Javaの一方通行のツールです。/ja?>RelaxNGCC focuses on reading XML instances. Generation of XML documents from Java objects is outside the scope of RelaxNGCC./en?>
- 一からDOMやSAXのプログラムを書くよりも簡単にXMLを読む機能が実装できます。/ja?>RelaxNGCC makes programming easy for reading XML in comparison with writing raw DOM or SAX code./en?>
問い合わせ/ja?>Your Comment/en?>
RelaxNGCCに関する質問・要望は、開発者全員がモニターしているRelax開発者メーリングリストへお願いします。まだ安定した実装になっているとはいえないので、使ってみておかしいと思ったらお気軽にご連絡ください。できる限りすみやかに対処します。ユーザの声が僕らのモチベーションを引き出すのでよろしくお願いします。/ja?>
If you hava any comments, questions, or requests, please post them to reldeve mailing list, where all the developers are monitoring. We always welcome your comments, as those are the ultimate motivation that drives us to further development./en?>
ライセンス/ja?>License/en?>
RelaxNGCC本体はApache Software License風のライセンスに従って配布されます。RelaxNGCCが生成したJavaソースコードについては我々は著作権を放棄します。/ja?>
RelaxNGCC is licensed under Apache Software License-like license. For the code generated by RelaxNGCC, we waive our copyrights, so they are all yours./en?>
AttributesImpl.javaについて注意/ja?>Note about AttributesImpl.java/en?>
生成される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でも同様の模様です。
/ja?>
The generated AttributesImpl.java is used as an implementation of org.xml.sax.Attributes
. It is based on the source code of org.xml.sax.helpers.AttributesImpl
distributed with some products such as Xerces, but the original org.xml.sax.helpers.AttributesImpl
has a bug in removeAttribute method. To avoid the bug, I modified the original and located at relaxngcc.runtime package. relaxngcc.runtime.AttributesImpl.java
is in the public domain like the original for this reason. The bug has not been fixed in JRE1.4./en?>
リリース/ja?>Release Notes/en?>
- 2002/05/03 バージョン0.7を公開しました。/ja?>May 3, 2002 Version 0.7 is released. /en?>
inline
アトリビュートを導入し、スコープの展開ができるようになりました。/ja?>Added inline
attribute for expanding a scope into other scopes./en?>
- マニュアルを改訂しました。/ja?>Revised manuals./en?>
- 2002/06 バージョン1.0を公開しました。/ja?>Jun, 2002 Version 1.0 is released/en?>
- Kohsuke Kawaguchi joined the development and the project is now hosted at SourceForge.
- RelaxNGCC became self-sufficient; now it uses itself to parse RELAX NG grammars.
- Replaced the compiler algorithm so that it generates code that works correctly
- Implemented an experimental text-based shorthand syntax.
- Added new features represented by c:with-params, c:params, c:return-type, and c:return-value attributes.
- Runtime code is refactored. The compiler now generates NGCCRuntime class, which coordinates the entire processing.
- The RELAX NG compact syntax support was pulled out.
- The compiler is now smart enough to handle multiple aliases with the same name, and aliases colliding with fields defined in c:java-body elements.
/en?>
- 川口耕介が開発に参加したのに伴い、プロジェクトをSourceForgeに移管しました
- RelaxNGCC自身を使って作ったパーサを使ってRELAX NG文法を読み込むように書き換えました
- コンパイラのアルゴリズムを全面的に変更し、正しいコードが生成されるようにしました
- 属性によらない簡易記法を試験的に実装しました
- 新しい機能を追加し、それに伴いc:with-params, c:params, c:return-typeやc:return-value といった属性を追加しました
- ランタイムを再デザインしなおしました。処理をつかさどるNGCCRuntimeクラスが生成されるようになりました
- RELAX NG コンパクト文法サポートは取り除かれました
- コンパイラはc:java-body内のJavaコードを正しく解析するようになりました。これに伴い、宣言されたエイリアスの取り扱いがスマートになりました
/ja?>
-
2002/10 バージョン1.1をリリースしました。/ja?>Oct, 2002 Version 1.1 is released./en?>
- RelaxNGCCのAnt用タスクを導入しました。/ja?>Implemented an Ant task for RelaxNGCC./en?>
- CodeDOMを導入し、生成されるソースコードが統一的なフォーマットで出力されるようになりました。/ja?>Introduced CodeDOM for more stable code generation./en?>
cc:class
アトリビュートがどこにでもかけるようになりました。これにより<define>ブロックがどこにでもあるかのように扱えます。/ja?>attribute can be now specified for any pattern, and it will become its own class, as if it were <define>d as a separate block./en?>
- 生成されたコードの仕組み、特にアトリビュートの取り扱いを整理しました。/ja?>Organized the structure of the generated code especially the treatment of attributes./en?>
さらに前のリリース履歴はこちらです。/ja?>Earlier release notes are available here./en?>
将来のバージョンで行う予定のこと/ja?>Wish list for future versions/en?>
- Token looking ahead support to handle ambiguous schemas/en?> トークンの先読みをしてより広いスキーマに対応/ja?>
- Supporting code generation in other languages, such as C#/en?> C#のコード生成/ja?>
- Enhancing documents, especially internal algorithm/en?> ドキュメント整備、特に内部的なアルゴリズムについて/ja?>
To file a feature request, please visit the project website at SourceForge./en?>
この他の機能の提案などがあれば、SourceForgeのウェブサイトに書き込んでください./ja?>
関連リソース/ja?>Related resources/en?>