こんにちは、コンパクト構文に集中していることを除いて、ほとんど同じ要件に遭遇しました。これは、YMMV 以外の方法で実行する方法の 1 つです。
コンテキストを示すために、2 つのフェーズでの私の目標: (a) RelaxNG Compact Syntax をスラープし、オブジェクト/ツリーをトラバースして、Spring 4 Rest Controller で使用できる Spring 4 POJO を作成しようとしています。(b) そこから、RNG Compact を使用し、Spring がリクエストをデシリアライズする前にリクエストを自動的に検証するリクエストバリデーターを開発したいと考えています。基本的に、RelaxNG Compact Syntax を設計/ドキュメントと JSON スキーマの定義/検証の両方として使用して、JSON REST API 開発の足場を組んでいます。
最初の目的として、CompactSyntax に JJTree でアノテーションを付けることを考えましたが、明らかに JavaCC に精通していないので、よりプログラム的なアプローチを取ることにしました...
コードをいくつかの方法で分析およびテストして、バイナリ、ダイジェスト、および/または nc パッケージにツリー実装があるかどうかを判断しましたが、そのようなもの (om/tree) はないと思います。
したがって、実際に成功した私の最新のアプローチは、バイナリに基づいて構築し、SchemaBuilderImpl を拡張し、ビジター インターフェイスを実装し、長いコンストラクターを使用してカスタム SchemaBuilderImpl を CompactSyntax に渡すことでした: CompactSyntax(CompactParseable parseable, Reader r, String sourceUri, SchemaBuilder sb, ErrorHandlerええと、継承された文字列Ns)
CompactParseable.parse を呼び出すと、ビジター インターフェイスで構造化されたイベントが取得されます。rng スキーマをトラバースするにはこれで十分だと思います。ここから OM またはツリーを簡単に作成できます。
しかし、これが最善のアプローチであるかどうかはわかりません。多分私は何かを見逃していて、実際にはrngom実装(私の場合はCompactSyntax)によって構築されたOM /ツリーがあり、親子関係をより簡単に判断するためにトラバースできます。または、これには他のアプローチがあるかもしれません。
とにかく、これは私が望むもののために働いているように見える1つのアプローチです. 主にビジター パターン ベースであり、インターフェイスがあったので、それらを使用することにしました。多分それはあなたのために働くでしょう。要するに、実装パッケージ (nc、バイナリ、ダイジェスト) のどこにでも実装されたトラバース可能な OM/AST を見つけることができませんでした。