Генерация объектной модели из схемы RelaxNG с помощью RNGOM - как начать? - PullRequest
6 голосов
/ 30 сентября 2011

Я хочу создать объектную модель из схемы RelaxNG.

Поэтому я хочу использовать RNGOM Object Model / Parser (главным образом потому, что я не мог найти никакой альтернативы - хотя мне даже наплевать на язык, на котором написан / генерируется синтаксический анализатор). Теперь, когда я проверил источник RNGOM из SVN, у меня нет ЛЮБОЙ идеи, как использовать RNGOM, так как нет никакой информации об использовании.

Полезный совет, как начать с RNGOM - ссылка, пример или любое описание, которое избавляет меня от необходимости понимать весь исходный код RNGOM, - будет присужден в качестве ответа. Еще лучше будет простой пример использования синтаксического анализатора для генерации объектной модели из файла RNG.

Больше информации:

Я хочу создать классы Java из следующей схемы RelaxNG:
http://libvirt.org/git/?p=libvirt.git;a=tree;f=docs/schemas;hb=HEAD

Я узнал, что ребята из Glassfish используют rngom для генерации той же объектной модели, которая мне нужна, но я пока не мог выяснить, как они используют rngom.

Ответы [ 2 ]

3 голосов
/ 16 февраля 2012

Чтобы продолжить, можно:

  1. использовать jing для преобразования из Relax NG в XML-схему ( см. Здесь )
  2. использовать более распространенные инструментыгенерировать классы (например, JaxB).
0 голосов
/ 03 декабря 2014

Привет, я столкнулся с тем же требованием, за исключением того, что сконцентрировался на компактном синтаксисе. Вот один из способов сделать то, что вы хотите, но YMMV.

Чтобы дать некоторый контекст, моя цель состоит из двух этапов: (a) Попытка вырвать компактный синтаксис RelaxNG и пройти по объекту / дереву для создания POJO Spring 4, пригодных для использования в Spring 4 Rest Controller. (б) Оттуда я хочу разработать валидатор запроса, который использует RNG Compact и автоматически проверяет запрос, прежде чем Spring десериализует запрос. По сути, это поддержка разработки JSON REST API с использованием RelaxNG Compact Syntax как для разработки / документации, так и для определения / проверки схемы JSON.

Для первой цели я подумал о том, чтобы аннотировать CompactSyntax с JJTree, но я явно не владею JavaCC, поэтому я решил использовать более программный подход ...

Я проанализировал и протестировал код несколькими способами, чтобы определить, была ли реализация дерева в двоичных, переваренных и / или nc-пакетах, но я не думаю, что есть один (om / tree) как таковой.

Итак, мой последний, действительно успешный подход, заключался в том, чтобы основываться на двоичном и расширять SchemaBuilderImpl, реализовывать интерфейс посетителя и передавать мой собственный SchemaBuilderImpl в CompactSyntax с использованием длинного конструктора: CompactSyntax (CompactParseable parseable, Reader r, String sourceUri, SchemaBuilder sb, ErrorHandler eh, String наследуемые Ns)

Когда вы вызываете CompactParseable.parse, вы получаете структурированные события в интерфейсе посетителя, и я думаю, что этого достаточно для обхода схемы rng, и отсюда вы можете легко создать OM или дерево.

Но я не уверен, что это лучший подход. Может быть, я что-то пропустил, и на самом деле существует OM / Tree, созданный реализацией rngom (в моем случае CompactSyntax), который вы можете пройти, чтобы легче определить отношения родитель / потомок. Или, может быть, есть другие подходы к этому.

Во всяком случае, это один подход, который, кажется, работает для того, что я хочу. В основном на основе шаблонов посетителей, и поскольку интерфейсы были там, я решил использовать их. Может быть, это будет работать для вас. В итоге, я не смог найти OM / AST, который может быть реализован где-либо в пакетах реализации (nc, binary, digested).

...