在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 ++类中表示规则。如果我有一组常量的对象,我会对每个对象进行硬编码,但是我的对象设置很可能会随着时间的推移而发生巨大的变化。有没有人有任何想法?
答案 0 :(得分:0)
使用TRANG将RNG文件转换为XSD,然后使用CodeSynthesis(XSD或XSDe)将XSD转换为c ++。 XSDe有很多样本,因此可能会有一个演示如何使用模式规则验证xml输入。
http://www.thaiopensource.com/relaxng/trang.html http://www.codesynthesis.com/products/xsde/