схема — Как воспроизвести правила Relax NG в объектах C ++?

Сейчас я работаю над частью моего приложения, где мне нужно проанализировать схему Relax NG и воспроизвести правила в файле в объектах C ++. Я начну с примера кода, чтобы я мог объяснить лучше.

<!-- property.element -->
<define name="property.element">
<element name="property">
<attribute name="type" />
<interleave>
<zeroOrMore>
<ref name="resource.class" />
</zeroOrMore>
<ref name="literal.class" />
</interleave>
</element>
</define>

Я хочу создать объект, где я могу хранить информацию, такую ​​как:

  • [определить] имя,
  • имя элемента,
  • имена атрибутов,
  • разрешены дочерние элементы со связанными правилами (ноль или более, один или несколько).

Затем я хочу отобразить все возможные элементы в моем графическом интерфейсе, где я могу добавить только допустимые (в терминах схемы Relax NG) элементы в древовидную структуру. Например, я могу добавить только resource.class или literal.class в свой property.element, каждый другой возможный элемент отображается в моем GUI серым, когда я выбрал узел property.element в GUI. Я использую Qt, поэтому загружаю схему в QDomDocument, чтобы получить доступ к дереву DOM.

Такой механизм должен быть универсальным, то есть независимо от того, как называются элементы или какова его структура. В своем черновике я создал простой класс, в который я поместил несколько членов, таких как: define_name, element_name, required_attributes, необязательный_attributes. В настоящее время я застрял, потому что я не знаю, как представлять правила в классе C ++. Если бы у меня был постоянный набор объектов, над которыми я работаю, я бы жестко запрограммировал каждый объект, но мой набор объектов, скорее всего, со временем сильно изменится. У кого-нибудь есть идеи?

1

Решение

Преобразуйте файл RNG в XSD с помощью TRANG, затем преобразуйте XSD в c ++ с использованием CodeSynthesis (XSD или XSDe). Существует множество примеров с XSDe, поэтому может быть один, демонстрирующий, как проверить ввод XML с правилами схемы.

http://www.thaiopensource.com/relaxng/trang.html
http://www.codesynthesis.com/products/xsde/

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]