XML-Know How

Numerische Beziehungen

In vielen Dokumenten gibt es numerische Informationen. Stehen diese in einem logischen Zusammenhang, kann Schematron ihre Korrektheit überprüfen. Das kann eine echte Erleichterung für Lektorat und XML-Dienstleister darstellen, da oft nicht auf den ersten Blick erkennbar ist, ob eine numerische Information richtig ist. Häufig hilft dann nur ein Griff zum Taschenrechner; die Abfrage über eine Businessrule ist hier jedoch sehr viel eleganter, zuverlässiger und zeitsparender.

Die Anforderung sei:

„Der Satzspiegel eines Buches ist 100 × 150 mm groß. Tabellen dürfen nicht größer als der Satzspiegel sein.“

Richtig gemäß dieser Anforderung wäre:

<table>
    <colgroup>
           <col width="30"/><colwidth="40"/><colwidth="30”/>
    </colgroup>
    <tbody>
          …
    </tbody>
</table>

Falsch hingegen wäre:

<table>
    <colgroup>
       <col width="40"/><colwidth="40"/><colwidth="40"/>
    </colgroup>
    <tbody>
       …
    </tbody>
</table>

Folgende Businessrule kann die Überprüfung der Anforderung leisten:

<sch:rule context="table">
    <sch:assert test="sum(//col/@width) = 100 or
    sum(//col/@width) = 150"
>
        Achtung:Die Tabelle ist größer als der Satzspiegel!
    </sch:assert>
</sch:rule>

Der Kontextknoten dieser Regel adressiert alle Tabellen, die in einem Dokument vorkommen. Mit dem booleschen Ausdruck wird dann die Zusicherung formuliert, dass die aufsummierten Spaltenbreiten entweder genau 100 mm oder (bei gestürzten Tabellen) genau 150 mm betragen müssen. Dazu wird die XPath-Funktion sum() verwendet, mit der alle ihr übergebenen Argumente addiert werden.

Es stehen noch eine Reihe anderer Funktionen zum Arbeiten mit numerischen Informationen zur Verfügung, sodass sich mit Schematron Regeln für viele weitere Situationen beschreiben lassen.