在 momemet,我正在处理我的应用程序的一部分,我需要解析 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>
我想创建可以存储信息的对象,例如:
- [定义]名称,
- 元素名称,
- 属性名称,
- 允许具有关联规则的子元素(零个或多个,一个或多个)。
然后我想在我的 GUI 中显示所有可能的元素,在那里我只能将有效的(根据 Relax NG 模式)元素添加到树状结构中。例如 - 我只能将 resource.class 或 literal.class 添加到我的 property.element 中,当我在 GUI 中选择 property.element 节点时,我的 GUI 中所有其他可能的元素都是灰色的。我使用 Qt,所以我将模式加载到 QDomDocument 以访问 DOM 树。
这种机制必须是通用的,即无论元素如何命名,或者其结构如何。在我的草稿中,我创建了简单的类,在其中放置了几个成员,例如:defined_name、element_name、required_attributes、optional_attributes。目前我被卡住了,因为我不知道如何在 C++ 类中表示规则。如果我有一组不变的对象来工作,我会对每个对象进行硬编码,但我的对象集很可能会随着时间的推移而发生巨大变化。有人有什么主意吗?