HI Wendell,


Thank you very much. Works like a charm.


Regards,


Frank


Am 22.02.2023 um 14:22 schrieb Wendell Piez:
Frank,

There is an interesting feature of Schematron's design useful in a case like yours, namely that within a pattern, only one rule may apply to any element, and the first rule wins.

This means we can pre-empt the application of rules by writing other rules.

For example:

<sch:pattern id="Check_LI">

  <sch:rule context="*[exists(@conref)]//li | li[exists(@conref)]"/>
  <sch:rule context="li">
    <sch:assert test="exists(*)">li must have children</sch:assert>
  </sch:rule>

</sch:pattern>

The second rule says "an li must have children". The first rule intervenes for li elements that have @conref or an ancestor with @conref - it does no checking so it is silent.

Try it and see how it goes --

Cheers, Wendell



On Wed, Feb 22, 2023 at 7:35 AM Frank Dissinger <frank.dissinger@cgs-oris.com> wrote:

Hi all,


I need a Schemtron rule which indicates an error when <li> elements do not have any child elements. No error schould be indicated for <li> elements with an "conkeyref" attribute and also for <li> elements which are children of any element with a "conkeyref" attribute.


I have defined two separate rules...


  <sch:pattern id="Check_LI2">
    <sch:rule context="li[not(@conkeyref)]">
      <sch:assert test="*">List does not contain any child elements</sch:assert>
    </sch:rule>
  </sch:pattern>

  <sch:pattern id="Check_LI3">
    <sch:rule context="li[not(parent::*[@conkeyref])]">
      <sch:assert test="*">List does not contain any child elements</sch:assert>
    </sch:rule>

  </sch:pattern>


... but I think I need to combine them into a single rule with an OR or AND operator.


  <sch:pattern id="Check_LI3">
    <sch:rule context="li[not(@conkeyref)] OR li[not(parent::*[@conkeyref])] ">
      <sch:assert test="*">List does not contain any child elements</sch:assert>
    </sch:rule>

  </sch:pattern>


However, this syntax is invalid. Can somebody help me?


Regards,

Frank

--

Frank Dissinger

Documentation Manager

....................................................................

CGS Publishing Technologies International GmbH

Email frank.dissinger@cgs-oris.com | Web www.cgs-oris.com

Address Kettelerstr. 24 | D-63512 Hainburg | Germany

Phone +49 6182 9626-27 | Fax +49 6182 9626-99

Commercial register Offenbach, HRB no. 21495

Managing directors Bernd Rückert, Christoph Thommessen


https://www.cgs-oris.com/Signatur.png