You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:20:22