RELAX NG模型验证报错求助:PRTG高级传感器输出Schema问题
问题:PRTG高级传感器输出RELAX NG Schema验证失败
我正在为PRTG高级传感器输出编写RELAX NG Schema,但该XML的规范逻辑混乱。需求明确分为两种场景:
- 成功场景:允许包含
Text元素,且必须存在至少一个Result元素; - 错误场景:必须包含
Error元素,可附带可选的Text元素。
编写完Schema后,用xmllint验证时出现以下错误:
element Prtg: Relax-NG validity error : Expecting an element Error, got nothing element Result: Relax-NG validity error : Invalid sequence in interleave Relax-NG validity error : Extra element Text in interleave element Prtg: Relax-NG validity error : Element Prtg failed to validate content
触发错误的示例XML如下:
<?xml version="1.0" encoding="UTF-8"?> <!--MonitoringOutput v0.2 id=id-16371 (PRTG.xsl v0.0.3)--> <Prtg> <!--status_string=OK--> <!--Exit Code: 0--> <Text>OK</Text> <Result> <Channel>wr_wait</Channel> <Value>0.938023</Value> <!--range: min="0"--> </Result> <!-- ... --> <Result> <Channel>rd_wait</Channel> <Value>0</Value> <!--range: min="0"--> </Result> </Prtg>
我推测问题出在xmllint遇到Text元素时,无法确定匹配哪个场景分支,即便调整Text元素的位置也无法通过验证。
以下是Schema中缺失的定义部分:
<define name="C.Boolean"> <choice datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <value type="integer">0</value> <value type="integer">1</value> </choice> </define> <define name="DT.Message"> <data datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" type="string"> <param name="pattern">".{0,2000}"</param> </data> </define> <define name="PRTG-TagSoup"> <a:documentation> Unordered set of optional elements. The actual logic is hard to get from the specification. </a:documentation> <zeroOrMore> <choice> <!--- many more... --> <element name="CustomUnit"><text /></element> <element name="Float"><ref name="C.Boolean" /></element> <element name="Warning"><ref name="C.Boolean" /></element> <element name="ShowChart"><ref name="C.Boolean" /></element> <element name="ShowTable"><ref name="C.Boolean" /></element> <element name="LimitErrorMsg"><text /></element> <element name="LimitWarningMsg"><text /></element> <element name="LimitMode"><ref name="C.Boolean" /></element> <element name="ValueLookup"><text /></element> <element name="NotifyChanged"><empty /></element> </choice> </zeroOrMore> </define>
内容的提问来源于stack exchange,提问作者U. Windl
相关产品推荐
相关产品推荐

