2

我需要在 XML 发票中创建一组 Schematron 规则测试计算。问题是一些测试元素是可选的,当测试元素mjissing时我的规则失败。如何指定类似:“如果元素存在则测试值”?

XML 实例摘录:

<invoice>
<invoiceLineItem number="1">
    <invoicedQuantity>50</invoicedQuantity>
    <amountExclusiveAllowancesCharges>500</amountExclusiveAllowancesCharges>
    <amountInclusiveAllowancesCharges>455</amountInclusiveAllowancesCharges>
    <itemPrice>10</itemPrice>
    <invoiceAllowanceChargeAmount>45</invoiceAllowanceChargeAmount>
</invoiceLineItem>
<invoiceLineItem number="2">
    <invoicedQuantity>10</invoicedQuantity>
    <amountExclusiveAllowancesCharges>150</amountExclusiveAllowancesCharges>
    <itemPrice>15</itemPrice>
</invoiceLineItem>
</invoice>

我的 Schematron 检查计算:

<sch:schema xmlns:sch="http://www.ascc.net/xml/schematron">
    <sch:pattern name="Check calculation in invoicelineItem">
        <sch:rule context="invoiceLineItem">
            <sch:assert test="amountExclusiveAllowancesCharges = invoicedQuantity * itemPrice">The amountExclusiveAllowancesCharges calculation is incorrect.</sch:assert>
            <sch:assert test="amountInclusiveAllowancesCharges = (invoicedQuantity * itemPrice) - invoiceAllowanceChargeAmount">The amountInclusiveAllowancesCharges calculation is incorrect.</sch:assert>
        </sch:rule>
    </sch:pattern>
</sch:schema>

当 amountInclusiveAllowancesCharges 和 invoiceAllowanceChargeAmount 缺失时,它会失败(它们是可选的。

我将不胜感激任何有用的提示,

伊娃

4

1 回答 1

0

也许为时已晚,但如果不是,或者其他人有类似的问题:

<sch:schema xmlns:sch="http://www.ascc.net/xml/schematron">
    <sch:pattern name="Check calculation in invoicelineItem">
        <sch:rule context="invoiceLineItem">
            <sch:assert test="amountExclusiveAllowancesCharges = invoicedQuantity * itemPrice">The amountExclusiveAllowancesCharges calculation is incorrect.</sch:assert>
        </sch:rule>
    </sch:pattern>
    <sch:pattern name="Check calculation in invoicelineItem (inclusive)">
        <sch:rule context="invoiceLineItem[amountInclusiveAllowancesCharges][invoiceAllowanceChargeAmount]">
            <sch:assert test="amountInclusiveAllowancesCharges = (invoicedQuantity * itemPrice) - invoiceAllowanceChargeAmount">The amountInclusiveAllowancesCharges calculation is incorrect.</sch:assert>
        </sch:rule>
    </sch:pattern>
</sch:schema>
于 2014-11-21T22:37:37.983 回答