2011-09-30 6 views
6

Quiero generar un modelo de objetos a partir de un esquema RelaxNG.Genere el modelo de objetos del esquema RelaxNG con RNGOM - ¿cómo comenzar?

Por lo tanto, quiero usar el RNGOM Object Model/Parser (principalmente porque no pude encontrar ninguna alternativa, aunque ni siquiera me importa el lenguaje en el que el analizador está escrito/genera). Ahora que comprobé el RNGOM source desde SVN, no tengo NINGUNA idea de cómo usar RNGOM, ya que no hay ningún tipo de información sobre el uso.

Se dará una sugerencia útil sobre cómo comenzar con RNGOM, un enlace, un ejemplo o cualquier descripción que me evite tener que leer para comprender todo el código fuente de RNGOM. Aún mejor sería un ejemplo simple de cómo usar el analizador para generar un modelo de objeto a partir de un archivo RNG.

Más informaciones:

Quiero generar clases Java a cabo de la siguiente RelaxNG esquema:
http://libvirt.org/git/?p=libvirt.git;a=tree;f=docs/schemas;hb=HEAD

descubrí que los chicos Glassfish están utilizando rngom para generar el mismo modelo de objetos I Necesito, pero todavía no pude averiguar cómo están usando Rngom.

+0

No lo he usado yo mismo. ¿Has considerado contactar al autor? Él tiene cuentas de Twitter/LinkedIn/Facebook en http://kohsuke.org/ –

Respuesta

3

A manera de proceder podría ser a:

  1. uso Jing convertir de Relax NG a XML esquema (see here)
  2. utilizar herramientas más comunes para generar clases (por ejemplo jaxb).
+2

Pregunta "Cómo convertir RelaxNG al modelo de objetos" y tu respuesta es efectivamente: "No uses RelaxNG, utiliza algo diferente". Eso está bien como comentario, pero definitivamente no es una respuesta. – Recurse

+0

Permítanme aclarar mi punto de vista: para mí es perfecto usar Relax NG (es más fácil de implementar y más expresivo que XML Schema, así que nunca digo "no lo use"). Si quieres tener objetos, nada te prohíbe usar Relax Ng como contrato de datos y luego producir el código XML Schema con Jing (una toma), y luego usar JaxB. El contrato Relax NG Data está aquí como una fuerte interfaz de datos, usted valida con él. Cuando tiene datos válidos: los archivos XML se pueden transformar en objetos con JaxB. –

+0

@Recurse no; Esta es la respuesta correcta. Usted no entiende lo que RelaxNG es. RelaxNG es una extensión gramatical de la gramática xml. El hecho de que pueda expresarse mediante una sintaxis compacta es irelavant. El punto entero de la sintaxis compacta es que convierte a xml. Una vez que tienes xml, entonces usas herramientas preexistentes para generar tu modelo de objetos automáticamente. – dcow

0

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).

Cuestiones relacionadas