c++ - 如何在 C++ 对象中重现 Relax NG 规则?

标签 c++ schema relaxng

在 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++ 类中表示规则。如果我有一组不变的对象来处理我会硬编码每个对象,但我的对象集很可能会随着时间的推移发生巨大变化。有人知道吗?

最佳答案

使用 TRANG 将 RNG 文件转换为 XSD,然后使用 CodeSynthesis XSD 或 XSDe 将 XSD 转换为 c++。有很多 XSDe 示例,因此可能有一个示例演示了如何使用架构规则验证 xml 输入。

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

关于c++ - 如何在 C++ 对象中重现 Relax NG 规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807338/

相关文章:

c++ - opencv 阈值或不等于运算符

mysql - 如何安全修改大量MySQL列注释?

mysql - 搜索多种颜色的数据库设计

php - 如何使用 RELAXNG 验证 XML?

c++ - 为什么while循环的执行时间显得如此奇怪?

c++ - 无法从 Web 服务器读取 utf-8 缓冲区

c++ 列表,从 'value_type' 没有可行的转换

database - 不同的用户类型/对象在同一个表中拥有内容 - 如何?

使用 XSD/trang HTML 5 Relax NG 到 XSD 转换进行 Java HTML 5 验证

xml - 在 RelaxNG 中将元素定义为非空