Hola, me topé en su mayoría con el mismo requisito, excepto que me estoy concentrando en la sintaxis del Compact. Aquí hay una forma de hacer lo que quiere, pero YMMV.
Para dar un poco de contexto, mi objetivo en 2 fases: (a) Tratar de sorber RelaxNG Compact Syntax y atravesar un objeto/árbol para crear Spring 4 POJOs utilizables en Spring 4 Rest Controller. (b) A partir de ahí, deseo desarrollar un validador de solicitudes que use el RNG Compact y valide automáticamente la solicitud antes de que Spring deserialice la solicitud. Fundamentalmente andamiaje el desarrollo de API JSON REST usando RelaxNG Compact Syntax como diseño/documentación y definición/validación de esquema JSON.
Para el primer objetivo pensé en anotar el CompactSyntax con JJTree pero, obviamente, no soy fluido en JavaCC así que decidí ir un enfoque más programático ...
me ha analizado y comprobado el código de varias maneras a determinar si hubo una implementación de árbol en paquetes binarios, digeridos y/o nc, pero no creo que haya uno (un om/árbol) como tal.
Así que mi último enfoque, realmente exitoso, ha sido construir sobre el binario y extender SchemaBuilderImpl, implementar la interfaz de visitante y pasar mi SchemaBuilderImpl personalizado a CompactSyntax usando el constructor largo: CompactSyntax (CompactParseable analizables, Reader r, String sourceUri, SchemaBuilder sb, ErrorHandler eh, String inheritedNs)
Cuando llame a CompactParseable.parse obtendrá eventos estructurados en la interfaz de visitante y creo que esto es lo suficientemente bueno para atravesar el esquema de rng y desde aquí podría crear fácilmente un OM o árbol.
Pero no estoy seguro de que este sea el mejor enfoque.Tal vez me perdí algo y de hecho hay un OM/Tree creado por la implementación de rngom (en mi caso, CompactSyntax) que puedes recorrer para determinar las relaciones entre padres e hijos más fácilmente. O tal vez hay otros enfoques para esto.
De todos modos, este es un enfoque que parece estar funcionando para lo que quiero. La mayoría de los visitantes están basados en patrones y como las interfaces estaban allí, decidí usarlos. Tal vez funcionará para ti. En pocas palabras, no pude encontrar un OM/AST que se pueda atravesar implementado en cualquier lugar de los paquetes de implementación (nc, binary, digested).
No lo he usado yo mismo. ¿Has considerado contactar al autor? Él tiene cuentas de Twitter/LinkedIn/Facebook en http://kohsuke.org/ –