目次 英語ドキュメント

# RelaxNGCC ( RELAX NG Compiler Compiler)

$Revision: 1.13 $ By RelaxNGCC SourceForge Project / 岡嶋 大介

RelaxNGCCは、RELAX NGで書かれたスキーマからJavaのソースコードを生成するツールです。入力XMLの各エレメントやアトリビュートを読んだときのアクションを、yaccやJavaCCと同様の手法でユーザが直接スキーマに追加記述します。

- マニュアル
- 初歩的な使い方を示すチュートリアル１
- もうちょっと高度な使い方を示すチュートリアル２
- 略記法とASTに関するチュートリアル３(英語)
- ASTに関して更に解説したチュートリアル４(英語)
- ランタイムを活用するチュートリアル５(英語)
- 生成されたコードを駆動するには？チュートリアル６(英語)
- RelaxNGCCをAntから使うには(英語)
- どのような原理で動いているかの内部的な説明(これを読むにはRELAX NGとオートマトンについての予備知識が必要です。)
- ダウンロード

コンパイラの実行にはJRE1.2以降が必要です。

生成されたコードの実行にはSAXパーサが必要です。

## 主な特徴

スキーマからソースコードを生成するツールとしてはRelaxerが有名ですが、RelaxNGCCは次のような違いがあります。

- RelaxNGCCは、もとのXML文書の木構造にとらわれない処理が簡単です。RelaxerがXML文書全体について各部分に対応するオブジェクトを生成するのに対し、XML文書から必要なデータだけを抽出・加工する処理が得意です。
- RelaxNGCCは、XML文書を読み込むだけの機能です。XML文書を出力する機能はありません。XML->Javaの一方通行のツールです。
- 一からDOMやSAXのプログラムを書くよりも簡単にXMLを読む機能が実装できます。

## 問い合わせ

RelaxNGCCに関する質問・要望は、開発者全員がモニターしているRelax開発者メーリングリストへお願いします。まだ安定した実装になっているとはいえないので、使ってみておかしいと思ったらお気軽にご連絡ください。できる限りすみやかに対処します。ユーザの声が僕らのモチベーションを引き出すのでよろしくお願いします。

## ライセンス

RelaxNGCC本体はApache Software License風のライセンスに従って配布されます。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/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コードを正しく解析するようになりました。これに伴い、宣言されたエイリアスの取り扱いがスマートになりました
- 2002/10 バージョン1.1をリリースしました。
  - RelaxNGCCのAnt用タスクを導入しました。
  - CodeDOMを導入し、生成されるソースコードが統一的なフォーマットで出力されるようになりました。
  - `cc:class` アトリビュートがどこにでもかけるようになりました。これにより<define>ブロックがどこにでもあるかのように扱えます。
  - 生成されたコードの仕組み、特にアトリビュートの取り扱いを整理しました。

さらに前のリリース履歴はこちらです。

## 将来のバージョンで行う予定のこと

- トークンの先読みをしてより広いスキーマに対応
- C#のコード生成
- ドキュメント整備、特に内部的なアルゴリズムについて

この他の機能の提案などがあれば、SourceForgeのウェブサイトに書き込んでください.

## 関連リソース

- プロジェクトウェブサイト（SourceForge）
- RELAX NG official page
- RELAX NG チュートリアル(英語)
- RELAX NG チュートリアル(日本語, ただし内容は少し古いです)
- James Clark氏のRELAX NG関連ページ