diff options
Diffstat (limited to 'xml/rule-3.10.rng')
-rw-r--r-- | xml/rule-3.10.rng | 433 |
1 files changed, 433 insertions, 0 deletions
diff --git a/xml/rule-3.10.rng b/xml/rule-3.10.rng new file mode 100644 index 0000000..6ef362f --- /dev/null +++ b/xml/rule-3.10.rng @@ -0,0 +1,433 @@ +<?xml version="1.0" encoding="UTF-8"?> +<grammar xmlns="http://relaxng.org/ns/structure/1.0" + xmlns:ann="http://relaxng.org/ns/compatibility/annotations/1.0" + datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> + <start> + <ref name="element-rule"/> + </start> + + <!-- + Rule elements allow different syntax depending on their context, each of + which gets their own rule definition below: + + 1. rsc_location + 2. meta_attributes within rsc_defaults + 3. meta_attributes within op_defaults + 4. all other contexts that allow node attribute expressions + (instance_attributes elements within bundle, clone, group, op, primitive, + and template elements; and meta_attributes elements within op elements) + 5. all other contexts (cluster_property_set elements; instance_attributes + within alert, node, and recipient elements; meta_attributes within alert, + bundle, clone, group, primitive, recipient, and template elements; and + utilization elements within node, primitive, and template elements) + + The COMPAT comments below mark items that are invalid in their given context + and should be removed at a compatibility break. + --> + + <!-- 1. rule element within rsc_location --> + <define name="element-rule-location"> + <element name="rule"> + <choice> + <attribute name="id-ref"><data type="IDREF"/></attribute> + <group> + <ref name="rule-common"/> + <oneOrMore> + <choice> + <ref name="expression-location"/> + <ref name="date_expression"/> + <ref name="element-rule-location"/> + + <!-- @COMPAT: The below expression types are invalid here --> + <ref name="rsc_expression"/> + <ref name="op_expression"/> + </choice> + </oneOrMore> + <optional> + <choice> + <externalRef href="score.rng"/> + <attribute name="score-attribute"><text/></attribute> + </choice> + </optional> + </group> + </choice> + </element> + </define> + + <!-- 2. rule element within rsc_defaults --> + <define name="element-rule-rsc_defaults"> + <element name="rule"> + <choice> + <attribute name="id-ref"><data type="IDREF"/></attribute> + <group> + <ref name="rule-common"/> + <oneOrMore> + <choice> + <ref name="date_expression"/> + <ref name="rsc_expression"/> + <ref name="element-rule-rsc_defaults"/> + + <!-- @COMPAT: The below expression type is deprecated here --> + <ref name="expression"/> + + <!-- @COMPAT: The below expression type is invalid here --> + <ref name="op_expression"/> + </choice> + </oneOrMore> + + <!-- @COMPAT: The below score attributes are invalid here --> + <optional> + <choice> + <externalRef href="score.rng"/> + <attribute name="score-attribute"><text/></attribute> + </choice> + </optional> + </group> + </choice> + </element> + </define> + + <!-- 3. rule element within op_defaults --> + <define name="element-rule-op_defaults"> + <element name="rule"> + <choice> + <attribute name="id-ref"><data type="IDREF"/></attribute> + <group> + <ref name="rule-common"/> + <oneOrMore> + <choice> + <ref name="date_expression"/> + <ref name="rsc_expression"/> + <ref name="op_expression"/> + <ref name="element-rule-op_defaults"/> + + <!-- @COMPAT: The below expression type is deprecated here --> + <ref name="expression"/> + </choice> + </oneOrMore> + + <!-- @COMPAT: The below score attributes are invalid here --> + <optional> + <choice> + <externalRef href="score.rng"/> + <attribute name="score-attribute"><text/></attribute> + </choice> + </optional> + </group> + </choice> + </element> + </define> + + + <!-- 4. rule element in other contexts allowing node attribute expressions --> + <define name="element-rule-node-allowed"> + <element name="rule"> + <choice> + <attribute name="id-ref"><data type="IDREF"/></attribute> + <group> + <ref name="rule-common"/> + <oneOrMore> + <choice> + <ref name="expression"/> + <ref name="date_expression"/> + <ref name="element-rule-node-allowed"/> + + <!-- @COMPAT: The below expression types are invalid here --> + <ref name="rsc_expression"/> + <ref name="op_expression"/> + </choice> + </oneOrMore> + + <!-- @COMPAT: The below score attributes are invalid here --> + <optional> + <choice> + <externalRef href="score.rng"/> + <attribute name="score-attribute"><text/></attribute> + </choice> + </optional> + </group> + </choice> + </element> + </define> + + <!-- 5. rule element within all other contexts --> + <define name="element-rule"> + <element name="rule"> + <choice> + <attribute name="id-ref"><data type="IDREF"/></attribute> + <group> + <ref name="rule-common"/> + <oneOrMore> + <choice> + <ref name="date_expression"/> + <ref name="element-rule"/> + + <!-- @COMPAT: The below expression types are invalid here --> + <ref name="expression"/> + <ref name="rsc_expression"/> + <ref name="op_expression"/> + </choice> + </oneOrMore> + + <!-- @COMPAT: The below score attributes are invalid here --> + <optional> + <choice> + <externalRef href="score.rng"/> + <attribute name="score-attribute"><text/></attribute> + </choice> + </optional> + </group> + </choice> + </element> + </define> + + <!-- Attributes that are common to all rule elements --> + <define name="rule-common"> + <attribute name="id"><data type="ID"/></attribute> + <optional> + <attribute name="boolean-op"> + <choice> + <value>or</value> + <value>and</value> + </choice> + </attribute> + </optional> + + <!-- + @COMPAT Role applies only to rules within location constraints. When we can + break behavioral backward compatibility, move this to + rule-element-location. + --> + <optional> + <attribute name="role"><text/></attribute> + </optional> + </define> + + <!-- A node attribute expression --> + <define name="expression"> + <element name="expression"> + <ref name="expression-common"/> + + <optional> + <attribute name="value-source" ann:defaultValue="literal"> + <choice> + <value>literal</value> + <!-- @COMPAT: These value-source choices are invalid here --> + <value>param</value> + <value>meta</value> + </choice> + </attribute> + </optional> + </element> + </define> + + <!-- A node attribute expression in a location constraint --> + <define name="expression-location"> + <element name="expression"> + <ref name="expression-common"/> + <optional> + <attribute name="value-source" ann:defaultValue="literal"> + <choice> + <value>literal</value> + <value>param</value> + <value>meta</value> + </choice> + </attribute> + </optional> + </element> + </define> + + <!-- Attributes that are common to all <expression> elements --> + <define name="expression-common"> + <attribute name="id"><data type="ID"/></attribute> + <attribute name="attribute"><text/></attribute> + <choice> + <group> + <attribute name="operation"> + <choice> + <value>defined</value> + <value>not_defined</value> + </choice> + </attribute> + <!-- @COMPAT value attribute should be prohibited here --> + <optional> + <attribute name="value"><text/></attribute> + </optional> + </group> + <group> + <attribute name="operation"> + <choice> + <value>lt</value> + <value>gt</value> + <value>lte</value> + <value>gte</value> + <value>eq</value> + <value>ne</value> + </choice> + </attribute> + <!-- @COMPAT value attribute should be required here --> + <optional> + <attribute name="value"><text/></attribute> + </optional> + </group> + </choice> + <optional> + <attribute name="type" ann:defaultValue="string"> + <choice> + <value>string</value> + <value>integer</value> + <value>number</value> + <value>version</value> + </choice> + </attribute> + </optional> + </define> + + <define name="date_expression"> + <element name="date_expression"> + <attribute name="id"><data type="ID"/></attribute> + <choice> + <group> + <attribute name="operation"><value>in_range</value></attribute> + <choice> + <attribute name="start"><text/></attribute> + <attribute name="end"><text/></attribute> + <group> + <attribute name="start"><text/></attribute> + <attribute name="end"><text/></attribute> + </group> + </choice> + <optional> + <ref name="duration"/> + </optional> + </group> + <group> + <attribute name="operation"><value>gt</value></attribute> + <attribute name="start"><text/></attribute> + </group> + <group> + <attribute name="operation"><value>lt</value></attribute> + <attribute name="end"><text/></attribute> + </group> + <group> + <attribute name="operation"><value>date_spec</value></attribute> + <ref name="date_spec"/> + </group> + </choice> + </element> + </define> + + <define name="rsc_expression"> + <element name="rsc_expression"> + <attribute name="id"><data type="ID"/></attribute> + <optional> + <attribute name="class"><text/></attribute> + </optional> + <optional> + <attribute name="provider"><text/></attribute> + </optional> + <optional> + <attribute name="type"><text/></attribute> + </optional> + </element> + </define> + + <define name="op_expression"> + <element name="op_expression"> + <attribute name="id"><data type="ID"/></attribute> + <attribute name="name"><text/></attribute> + <optional> + <attribute name="interval"><text/></attribute> + </optional> + </element> + </define> + + <define name="duration"> + <element name="duration"> + <attribute name="id"><data type="ID"/></attribute> + <optional> + <attribute name="years"><text/></attribute> + </optional> + <optional> + <attribute name="months"><text/></attribute> + </optional> + <optional> + <attribute name="weeks"><text/></attribute> + </optional> + <optional> + <attribute name="days"><text/></attribute> + </optional> + <optional> + <attribute name="hours"><text/></attribute> + </optional> + <optional> + <attribute name="minutes"><text/></attribute> + </optional> + <optional> + <attribute name="seconds"><text/></attribute> + </optional> + + <!-- @COMPAT: The below attributes are invalid here --> + <optional> + <attribute name="monthdays"><text/></attribute> + </optional> + <optional> + <attribute name="weekdays"><text/></attribute> + </optional> + <optional> + <attribute name="yearsdays"><text/></attribute> + </optional> + <optional> + <attribute name="weekyears"><text/></attribute> + </optional> + <optional> + <attribute name="moon"><text/></attribute> + </optional> + </element> + </define> + + <define name="date_spec"> + <element name="date_spec"> + <attribute name="id"><data type="ID"/></attribute> + <optional> + <attribute name="years"><text/></attribute> + </optional> + <optional> + <attribute name="months"><text/></attribute> + </optional> + <optional> + <attribute name="monthdays"><text/></attribute> + </optional> + <optional> + <attribute name="hours"><text/></attribute> + </optional> + <optional> + <attribute name="minutes"><text/></attribute> + </optional> + <optional> + <attribute name="seconds"><text/></attribute> + </optional> + <optional> + <attribute name="yeardays"><text/></attribute> + </optional> + <optional> + <attribute name="weekyears"><text/></attribute> + </optional> + <optional> + <attribute name="weeks"><text/></attribute> + </optional> + <optional> + <attribute name="weekdays"><text/></attribute> + </optional> + <optional> + <attribute name="moon"><text/></attribute> + </optional> + + <!-- @COMPAT: The below attributes are invalid here --> + <optional> + <attribute name="yearsdays"><text/></attribute> + </optional> + </element> + </define> + +</grammar> |