【问题标题】:Unexpected behaviour in Schematron checksSchematron 检查中的意外行为
【发布时间】:2012-08-10 13:35:59
【问题描述】:

我有以下检查

<iso:pattern id="myChecks">
  <iso:rule context="/root/outerElement/innerElement">
    <iso:assert test="typeElement[@someAttribute='type1']">
      No typeElement with someAttribute=type1 found
    </iso:assert>  
    <iso:assert test=".[child::typeElement[@someAttribute='value1']]/data">
      No dataElement found in an innerElement with typeElement with someAttribute=type1
    </iso:assert>
    <iso:assert test="count(typeElement[@someAttribute='type1'] > 1)">
      There is more than 1 innerElement with typeElement 1 with someAttribute=type1
    </iso:assert>
  </iso:rule>
</iso:pattern>

文档看起来像这样:

<outerElement>
  <!-- 1 of the dataElements is mandatory -->
  <!-- and i need exact one innerElement which has a typeElement with someAttribute=type1 -->
  <innerElement>
    <dataElement>data</dataElement>
    <dataElement>data</dataElement>
    <typeElement someAttribute="type1"></typeElement>    
  </innerElement>

  <!-- This is not allowed and check 3 should find this -->
  <innerElement>
    <dataElement>data</dataElement>
    <dataElement>data</dataElement>
    <typeElement someAttribute="type1"></typeElement>    
  </innerElement>

  <!-- This one is valid because type2 has other restrictions -->
  <innerElement>
    <typeElement someAttribute="type2"></typeElement>    
  </innerElement>
</outerElement>

现在的问题是检查 1 和 2 对每个 innerElement 进行检查并产生错误,这意味着如果我有 3 次类型 2,我会从前 3 次检查中得到 3 个错误。我想要的是确保恰好一个 innerElement 具有 type1 并确保它具有至少 1 个 dataElement 而具有 type2 的 innerElements 不会被强制具有 dataElement。

第三次检查根本不起作用,似乎每次有多个内部元素时它都会抛出一个错误。

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: xml xsd schematron


    【解决方案1】:

    好的,这里的问题是每个 innerElement 都是他自己的上下文,因此是单独处理的。 解决方案是从上下文中删除 innerElement 并将其放入断言字段中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多