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
_______________________________________________
oXygen-user mailing list
oXygen-user@oxygenxml.com
https://www.oxygenxml.com/mailman/listinfo/oxygen-user


--
...Wendell Piez... ...wendell -at- nist -dot- gov...
...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org...
...github.com/wendellpiez... ...gitlab.coko.foundation/wendell...