dhodovsk / source-git / pacemaker

Forked from source-git/pacemaker 3 years ago
Clone
Blob Blame History Raw
<!--
 Copyright 2018 Red Hat, Inc.
 Author: Jan Pokorny <jpokorny@redhat.com>
 Part of pacemaker project
 SPDX-License-Identifier: GPL-2.0-or-later
 -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
         xmlns:cibtr="http://clusterlabs.org/ns/pacemaker/cibtr-2"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <start>
    <ref name="cibtr-2"/>
  </start>

  <define name="cibtr-2">
    <element name="cibtr:map">
      <zeroOrMore>
        <ref name="cibtr-2.table"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="cibtr-2.table">
    <element name="cibtr:table">
      <attribute name="for">
        <data type="ID"/>
      </attribute>
      <attribute name="msg-prefix">
        <data type="string"/>
      </attribute>
      <choice>
        <zeroOrMore>
          <ref name="cibtr-2.replace.nonwhereaware"/>
        </zeroOrMore>
        <group>
          <attribute name="where-cases">
            <!-- pipe-delimited enumeration-->
            <data type="string">
              <param name="minLength">1</param>
            </data>
          </attribute>
          <!-- cannot arrange this as an interleave of
               cibtr-2.replace.whereaware+ and
               cibtr-2.replace.nonwhereaware* because of
               http://relaxng.org/spec-20011203.html#attribute-restrictions -->
          <zeroOrMore>
            <ref name="cibtr-2.replace.whereaware"/>
          </zeroOrMore>
        </group>
      </choice>
    </element>
  </define>

  <!-- leaf attributes -->

  <define name="cibtr-2.replace.attr-in-case-of">
    <attribute name="in-case-of">
      <!-- pipe-delimited enumeration-->
      <data type="string"/>
    </attribute>
  </define>

  <define name="cibtr-2.replace.attr-in-case-of-droppable-prefix">
    <attribute name="in-case-of-droppable-prefix">
      <!-- just a single argument taken verbatim -->
      <data type="string">
        <param name="minLength">1</param>
      </data>
    </attribute>
  </define>

  <define name="cibtr-2.replace.attr-msg-extra">
    <attribute name="msg-extra">
      <data type="string">
        <param name="minLength">1</param>
      </data>
    </attribute>
  </define>

  <define name="cibtr-2.replace.attr-msg-severity">
    <attribute name="msg-severity">
      <choice>
        <value>WARNING</value>
        <value>INFO</value>
        <value>DEBUG</value>
      </choice>
    </attribute>
  </define>

  <define name="cibtr-2.replace.attr-redefined-as">
    <attribute name="redefined-as">
      <data type="string">
        <param name="minLength">1</param>
      </data>
    </attribute>
  </define>

  <define name="cibtr-2.replace.attr-what">
    <attribute name="what">
      <data type="NCName"/>
    </attribute>
  </define>

  <define name="cibtr-2.replace.attr-where">
    <attribute name="where">
      <data type="NCName"/>
    </attribute>
  </define>

  <define name="cibtr-2.replace.attr-with-possibly">
    <attribute name="with">
      <choice>
        <data type="NCName"/>
        <empty/>
      </choice>
    </attribute>
  </define>

  <define name="cibtr-2.replace.attr-with-surely">
    <attribute name="with">
      <choice>
        <data type="NCName"/>
      </choice>
    </attribute>
  </define>

  <define name="cibtr-2.replace.attrs-common">
    <ref name="cibtr-2.replace.attr-what"/>
    <optional>
      <ref name="cibtr-2.replace.attr-msg-extra"/>
    </optional>
    <optional>
      <ref name="cibtr-2.replace.attr-msg-severity"/>
    </optional>
  </define>

  <define name="cibtr-2.replace.attrs-redefined-as-in-case-of">
   <ref name="cibtr-2.replace.attr-redefined-as"/>
    <!-- can be combined with in-case-of, but cannot be combined
         with in-case-of-droppable-prefix -->
    <optional>
      <ref name="cibtr-2.replace.attr-in-case-of"/>
    </optional>
  </define>

  <!-- leaf production using the above attribute definitions -->

  <define name="cibtr-2.replace.nonwhereaware">
    <element name="cibtr:replace">
      <ref name="cibtr-2.replace.attrs-common"/>
      <choice>
        <group>
          <ref name="cibtr-2.replace.attr-with-possibly"/>
          <optional>
            <choice>
              <ref name="cibtr-2.replace.attrs-redefined-as-in-case-of"/>
              <ref name="cibtr-2.replace.attr-in-case-of"/>
            </choice>
          </optional>
        </group>
        <group>
          <ref name="cibtr-2.replace.attr-with-surely"/>
          <optional>
            <choice>
              <ref name="cibtr-2.replace.attrs-redefined-as-in-case-of"/>
              <ref name="cibtr-2.replace.attr-in-case-of"/>
              <ref name="cibtr-2.replace.attr-in-case-of-droppable-prefix"/>
            </choice>
          </optional>
        </group>
      </choice>
    </element>
  </define>

  <define name="cibtr-2.replace.whereaware">
    <element name="cibtr:replace">
      <ref name="cibtr-2.replace.attrs-common"/>
      <!-- cf. comment at cibtr-2.table -->
      <choice>
        <group>
          <ref name="cibtr-2.replace.attr-with-surely"/>
          <ref name="cibtr-2.replace.attr-where"/>
          <optional>
            <choice>
              <ref name="cibtr-2.replace.attrs-redefined-as-in-case-of"/>
              <ref name="cibtr-2.replace.attr-in-case-of"/>
              <ref name="cibtr-2.replace.attr-in-case-of-droppable-prefix"/>
            </choice>
          </optional>
        </group>
        <group>
          <ref name="cibtr-2.replace.attr-with-surely"/>
          <optional>
            <ref name="cibtr-2.replace.attr-where"/>
          </optional>
          <choice>
            <ref name="cibtr-2.replace.attrs-redefined-as-in-case-of"/>
            <ref name="cibtr-2.replace.attr-in-case-of"/>
            <ref name="cibtr-2.replace.attr-in-case-of-droppable-prefix"/>
          </choice>
        </group>
        <group>
          <ref name="cibtr-2.replace.attr-with-possibly"/>
          <optional>
            <ref name="cibtr-2.replace.attr-in-case-of"/>
          </optional>
        </group>
      </choice>
    </element>
  </define>

</grammar>