在momemet我正在處理我的應用程序的一部分,我需要解析放鬆NG模式並在C++對象中重現文件內的規則。我從示例代碼開始,所以我可以更好地解釋。如何在C++對象中重現Relax NG規則?
<!-- 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++類中表示規則。如果我的工作對象是固定的,我會對每個對象進行硬編碼,但是隨着時間的推移,我的對象集很可能會發生劇烈變化。有人有什麼主意嗎?
一個_rule_基類和N-派生類(_zeroOrMore_等,一個用於每個已知規則)。另外一個通用的_rule_類(帶有映射到節點名稱的_rule_name_成員)。 –