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 <[email protected]> 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 *[email protected] | *Web* www.cgs-oris.com
    <http://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
    <https://www.cgs-oris.com/signatur>
_______________________________________________
oXygen-user mailing list
[email protected]
https://www.oxygenxml.com/mailman/listinfo/oxygen-user

Reply via email to