36923b
From e8f96dec79bb33c11d39c9037ac623f18a67b539 Mon Sep 17 00:00:00 2001
36923b
From: Petr Pavlu <petr.pavlu@suse.com>
36923b
Date: Tue, 24 May 2022 18:08:57 +0200
36923b
Subject: [PATCH] Low: schemas: copy API schemas in preparation for changes
36923b
36923b
Copy crm_mon, crm_simulate and nodes API schemas in preparation for
36923b
changes and bump the external reference version in crm_mon and
36923b
crm_simulate to point to the new nodes schema.
36923b
---
36923b
 include/crm/common/output_internal.h |   2 +-
36923b
 xml/api/crm_mon-2.21.rng             | 183 +++++++++++++++
36923b
 xml/api/crm_simulate-2.21.rng        | 338 +++++++++++++++++++++++++++
36923b
 xml/api/nodes-2.21.rng               |  51 ++++
36923b
 4 files changed, 573 insertions(+), 1 deletion(-)
36923b
 create mode 100644 xml/api/crm_mon-2.21.rng
36923b
 create mode 100644 xml/api/crm_simulate-2.21.rng
36923b
 create mode 100644 xml/api/nodes-2.21.rng
36923b
36923b
diff --git a/include/crm/common/output_internal.h b/include/crm/common/output_internal.h
36923b
index 577fd5247..74ee833c1 100644
36923b
--- a/include/crm/common/output_internal.h
36923b
+++ b/include/crm/common/output_internal.h
36923b
@@ -28,7 +28,7 @@ extern "C" {
36923b
  */
36923b
 
36923b
 
36923b
-#  define PCMK__API_VERSION "2.20"
36923b
+#  define PCMK__API_VERSION "2.21"
36923b
 
36923b
 #if defined(PCMK__WITH_ATTRIBUTE_OUTPUT_ARGS)
36923b
 #  define PCMK__OUTPUT_ARGS(ARGS...) __attribute__((output_args(ARGS)))
36923b
diff --git a/xml/api/crm_mon-2.21.rng b/xml/api/crm_mon-2.21.rng
36923b
new file mode 100644
36923b
index 000000000..37036d665
36923b
--- /dev/null
36923b
+++ b/xml/api/crm_mon-2.21.rng
36923b
@@ -0,0 +1,183 @@
36923b
+
36923b
+
36923b
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
36923b
+
36923b
+    <start>
36923b
+        <ref name="element-crm-mon"/>
36923b
+    </start>
36923b
+
36923b
+    <define name="element-crm-mon">
36923b
+        <optional>
36923b
+            <ref name="element-summary" />
36923b
+        </optional>
36923b
+        <optional>
36923b
+            <ref name="nodes-list" />
36923b
+        </optional>
36923b
+        <optional>
36923b
+            <ref name="resources-list" />
36923b
+        </optional>
36923b
+        <optional>
36923b
+            <ref name="node-attributes-list" />
36923b
+        </optional>
36923b
+        <optional>
36923b
+            <externalRef href="node-history-2.12.rng"/>
36923b
+        </optional>
36923b
+        <optional>
36923b
+            <ref name="failures-list" />
36923b
+        </optional>
36923b
+        <optional>
36923b
+            <ref name="fence-event-list" />
36923b
+        </optional>
36923b
+        <optional>
36923b
+            <ref name="tickets-list" />
36923b
+        </optional>
36923b
+        <optional>
36923b
+            <ref name="bans-list" />
36923b
+        </optional>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-summary">
36923b
+        <element name="summary">
36923b
+            <optional>
36923b
+                <element name="stack">
36923b
+                    <attribute name="type"> <text /> </attribute>
36923b
+                </element>
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <element name="current_dc">
36923b
+                    <attribute name="present"> <data type="boolean" /> </attribute>
36923b
+                    <optional>
36923b
+                        <group>
36923b
+                            <attribute name="version"> <text /> </attribute>
36923b
+                            <attribute name="name"> <text /> </attribute>
36923b
+                            <attribute name="id"> <text /> </attribute>
36923b
+                            <attribute name="with_quorum"> <data type="boolean" /> </attribute>
36923b
+                        </group>
36923b
+                    </optional>
36923b
+                </element>
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <element name="last_update">
36923b
+                    <attribute name="time"> <text /> </attribute>
36923b
+                </element>
36923b
+                <element name="last_change">
36923b
+                    <attribute name="time"> <text /> </attribute>
36923b
+                    <attribute name="user"> <text /> </attribute>
36923b
+                    <attribute name="client"> <text /> </attribute>
36923b
+                    <attribute name="origin"> <text /> </attribute>
36923b
+                </element>
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <element name="nodes_configured">
36923b
+                    <attribute name="number"> <data type="nonNegativeInteger" /> </attribute>
36923b
+                </element>
36923b
+                <element name="resources_configured">
36923b
+                    <attribute name="number"> <data type="nonNegativeInteger" /> </attribute>
36923b
+                    <attribute name="disabled"> <data type="nonNegativeInteger" /> </attribute>
36923b
+                    <attribute name="blocked"> <data type="nonNegativeInteger" /> </attribute>
36923b
+                </element>
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <element name="cluster_options">
36923b
+                    <attribute name="stonith-enabled"> <data type="boolean" /> </attribute>
36923b
+                    <attribute name="symmetric-cluster"> <data type="boolean" /> </attribute>
36923b
+                    <attribute name="no-quorum-policy"> <text /> </attribute>
36923b
+                    <attribute name="maintenance-mode"> <data type="boolean" /> </attribute>
36923b
+                    <attribute name="stop-all-resources"> <data type="boolean" /> </attribute>
36923b
+                    <attribute name="stonith-timeout-ms"> <data type="integer" /> </attribute>
36923b
+                    <attribute name="priority-fencing-delay-ms"> <data type="integer" /> </attribute>
36923b
+                </element>
36923b
+            </optional>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="resources-list">
36923b
+        <element name="resources">
36923b
+            <zeroOrMore>
36923b
+                <externalRef href="resources-2.4.rng" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="nodes-list">
36923b
+        <element name="nodes">
36923b
+            <zeroOrMore>
36923b
+                <externalRef href="nodes-2.21.rng" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="node-attributes-list">
36923b
+        <element name="node_attributes">
36923b
+            <zeroOrMore>
36923b
+                <externalRef href="node-attrs-2.8.rng" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="failures-list">
36923b
+        <element name="failures">
36923b
+            <zeroOrMore>
36923b
+                <externalRef href="failure-2.8.rng" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="fence-event-list">
36923b
+        <element name="fence_history">
36923b
+            <optional>
36923b
+                <attribute name="status"> <data type="integer" /> </attribute>
36923b
+            </optional>
36923b
+            <zeroOrMore>
36923b
+                <externalRef href="fence-event-2.15.rng" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="tickets-list">
36923b
+        <element name="tickets">
36923b
+            <zeroOrMore>
36923b
+                <ref name="element-ticket" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="bans-list">
36923b
+        <element name="bans">
36923b
+            <zeroOrMore>
36923b
+                <ref name="element-ban" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-ticket">
36923b
+        <element name="ticket">
36923b
+            <attribute name="id"> <text /> </attribute>
36923b
+            <attribute name="status">
36923b
+                <choice>
36923b
+                    <value>granted</value>
36923b
+                    <value>revoked</value>
36923b
+                </choice>
36923b
+            </attribute>
36923b
+            <attribute name="standby"> <data type="boolean" /> </attribute>
36923b
+            <optional>
36923b
+                <attribute name="last-granted"> <text /> </attribute>
36923b
+            </optional>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-ban">
36923b
+        <element name="ban">
36923b
+            <attribute name="id"> <text /> </attribute>
36923b
+            <attribute name="resource"> <text /> </attribute>
36923b
+            <attribute name="node"> <text /> </attribute>
36923b
+            <attribute name="weight"> <data type="integer" /> </attribute>
36923b
+            <attribute name="promoted-only"> <data type="boolean" /> </attribute>
36923b
+            
36923b
+                 provided solely for API backward compatibility. It will be
36923b
+                 removed in a future release. Check promoted-only instead.
36923b
+              -->
36923b
+            <attribute name="master_only"> <data type="boolean" /> </attribute>
36923b
+        </element>
36923b
+    </define>
36923b
+</grammar>
36923b
diff --git a/xml/api/crm_simulate-2.21.rng b/xml/api/crm_simulate-2.21.rng
36923b
new file mode 100644
36923b
index 000000000..75a9b399b
36923b
--- /dev/null
36923b
+++ b/xml/api/crm_simulate-2.21.rng
36923b
@@ -0,0 +1,338 @@
36923b
+
36923b
+
36923b
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
36923b
+
36923b
+    <start>
36923b
+        <ref name="element-crm-simulate"/>
36923b
+    </start>
36923b
+
36923b
+    <define name="element-crm-simulate">
36923b
+        <choice>
36923b
+            <ref name="timings-list" />
36923b
+            <group>
36923b
+                <ref name="cluster-status" />
36923b
+                <optional>
36923b
+                    <ref name="modifications-list" />
36923b
+                </optional>
36923b
+                <optional>
36923b
+                    <ref name="allocations-utilizations-list" />
36923b
+                </optional>
36923b
+                <optional>
36923b
+                    <ref name="action-list" />
36923b
+                </optional>
36923b
+                <optional>
36923b
+                    <ref name="cluster-injected-actions-list" />
36923b
+                    <ref name="revised-cluster-status" />
36923b
+                </optional>
36923b
+            </group>
36923b
+        </choice>
36923b
+    </define>
36923b
+
36923b
+    <define name="allocations-utilizations-list">
36923b
+        <choice>
36923b
+            <element name="allocations">
36923b
+                <zeroOrMore>
36923b
+                    <choice>
36923b
+                        <ref name="element-allocation" />
36923b
+                        <ref name="element-promotion" />
36923b
+                    </choice>
36923b
+                </zeroOrMore>
36923b
+            </element>
36923b
+            <element name="utilizations">
36923b
+                <zeroOrMore>
36923b
+                    <choice>
36923b
+                        <ref name="element-capacity" />
36923b
+                        <ref name="element-utilization" />
36923b
+                    </choice>
36923b
+                </zeroOrMore>
36923b
+            </element>
36923b
+            <element name="allocations_utilizations">
36923b
+                <zeroOrMore>
36923b
+                    <choice>
36923b
+                        <ref name="element-allocation" />
36923b
+                        <ref name="element-promotion" />
36923b
+                        <ref name="element-capacity" />
36923b
+                        <ref name="element-utilization" />
36923b
+                    </choice>
36923b
+                </zeroOrMore>
36923b
+            </element>
36923b
+        </choice>
36923b
+    </define>
36923b
+
36923b
+    <define name="cluster-status">
36923b
+        <element name="cluster_status">
36923b
+            <ref name="nodes-list" />
36923b
+            <ref name="resources-list" />
36923b
+            <optional>
36923b
+                <ref name="node-attributes-list" />
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <externalRef href="node-history-2.12.rng" />
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <ref name="failures-list" />
36923b
+            </optional>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="modifications-list">
36923b
+        <element name="modifications">
36923b
+            <optional>
36923b
+                <attribute name="quorum"> <text /> </attribute>
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <attribute name="watchdog"> <text /> </attribute>
36923b
+            </optional>
36923b
+            <zeroOrMore>
36923b
+                <ref name="element-inject-modify-node" />
36923b
+            </zeroOrMore>
36923b
+            <zeroOrMore>
36923b
+                <ref name="element-inject-modify-ticket" />
36923b
+            </zeroOrMore>
36923b
+            <zeroOrMore>
36923b
+                <ref name="element-inject-spec" />
36923b
+            </zeroOrMore>
36923b
+            <zeroOrMore>
36923b
+                <ref name="element-inject-attr" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="revised-cluster-status">
36923b
+        <element name="revised_cluster_status">
36923b
+            <ref name="nodes-list" />
36923b
+            <ref name="resources-list" />
36923b
+            <optional>
36923b
+                <ref name="node-attributes-list" />
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <ref name="failures-list" />
36923b
+            </optional>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-inject-attr">
36923b
+        <element name="inject_attr">
36923b
+            <attribute name="cib_node"> <text /> </attribute>
36923b
+            <attribute name="name"> <text /> </attribute>
36923b
+            <attribute name="node_path"> <text /> </attribute>
36923b
+            <attribute name="value"> <text /> </attribute>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-inject-modify-node">
36923b
+        <element name="modify_node">
36923b
+            <attribute name="action"> <text /> </attribute>
36923b
+            <attribute name="node"> <text /> </attribute>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-inject-spec">
36923b
+        <element name="inject_spec">
36923b
+            <attribute name="spec"> <text /> </attribute>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-inject-modify-ticket">
36923b
+        <element name="modify_ticket">
36923b
+            <attribute name="action"> <text /> </attribute>
36923b
+            <attribute name="ticket"> <text /> </attribute>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="cluster-injected-actions-list">
36923b
+        <element name="transition">
36923b
+            <zeroOrMore>
36923b
+                <ref name="element-injected-actions" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="node-attributes-list">
36923b
+        <element name="node_attributes">
36923b
+            <zeroOrMore>
36923b
+                <externalRef href="node-attrs-2.8.rng" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="failures-list">
36923b
+        <element name="failures">
36923b
+            <zeroOrMore>
36923b
+                <externalRef href="failure-2.8.rng" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="nodes-list">
36923b
+        <element name="nodes">
36923b
+            <zeroOrMore>
36923b
+                <externalRef href="nodes-2.21.rng" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="resources-list">
36923b
+        <element name="resources">
36923b
+            <zeroOrMore>
36923b
+                <externalRef href="resources-2.4.rng" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="timings-list">
36923b
+        <element name="timings">
36923b
+            <zeroOrMore>
36923b
+                <ref name="element-timing" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="action-list">
36923b
+        <element name="actions">
36923b
+            <zeroOrMore>
36923b
+                <ref name="element-node-action" />
36923b
+            </zeroOrMore>
36923b
+            <zeroOrMore>
36923b
+                <ref name="element-rsc-action" />
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-allocation">
36923b
+        <element name="node_weight">
36923b
+            <attribute name="function"> <text /> </attribute>
36923b
+            <attribute name="node"> <text /> </attribute>
36923b
+            <externalRef href="../score.rng" />
36923b
+            <optional>
36923b
+                <attribute name="id"> <text /> </attribute>
36923b
+            </optional>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-capacity">
36923b
+        <element name="capacity">
36923b
+            <attribute name="comment"> <text /> </attribute>
36923b
+            <attribute name="node"> <text /> </attribute>
36923b
+            <zeroOrMore>
36923b
+                <element>
36923b
+                    <anyName />
36923b
+                    <text />
36923b
+                </element>
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-inject-cluster-action">
36923b
+        <element name="cluster_action">
36923b
+            <attribute name="node"> <text /> </attribute>
36923b
+            <attribute name="task"> <text /> </attribute>
36923b
+            <optional>
36923b
+                <attribute name="id"> <text /> </attribute>
36923b
+            </optional>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-injected-actions">
36923b
+        <choice>
36923b
+            <ref name="element-inject-cluster-action" />
36923b
+            <ref name="element-inject-fencing-action" />
36923b
+            <ref name="element-inject-pseudo-action" />
36923b
+            <ref name="element-inject-rsc-action" />
36923b
+        </choice>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-inject-fencing-action">
36923b
+        <element name="fencing_action">
36923b
+            <attribute name="op"> <text /> </attribute>
36923b
+            <attribute name="target"> <text /> </attribute>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-node-action">
36923b
+        <element name="node_action">
36923b
+            <attribute name="node"> <text /> </attribute>
36923b
+            <attribute name="reason"> <text /> </attribute>
36923b
+            <attribute name="task"> <text /> </attribute>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-promotion">
36923b
+        <element name="promotion_score">
36923b
+            <attribute name="id"> <text /> </attribute>
36923b
+            <externalRef href="../score.rng" />
36923b
+            <optional>
36923b
+                <attribute name="node"> <text /> </attribute>
36923b
+            </optional>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-inject-pseudo-action">
36923b
+        <element name="pseudo_action">
36923b
+            <attribute name="task"> <text /> </attribute>
36923b
+            <optional>
36923b
+                <attribute name="node"> <text /> </attribute>
36923b
+            </optional>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-inject-rsc-action">
36923b
+        <element name="rsc_action">
36923b
+            <attribute name="node"> <text /> </attribute>
36923b
+            <attribute name="op"> <text /> </attribute>
36923b
+            <attribute name="resource"> <text /> </attribute>
36923b
+            <optional>
36923b
+                <attribute name="interval"> <data type="integer" /> </attribute>
36923b
+            </optional>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-timing">
36923b
+        <element name="timing">
36923b
+            <attribute name="file"> <text /> </attribute>
36923b
+            <attribute name="duration"> <data type="double" /> </attribute>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-rsc-action">
36923b
+        <element name="rsc_action">
36923b
+            <attribute name="action"> <text /> </attribute>
36923b
+            <attribute name="resource"> <text /> </attribute>
36923b
+            <optional>
36923b
+                <attribute name="blocked"> <data type="boolean" /> </attribute>
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <attribute name="dest"> <text /> </attribute>
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <attribute name="next-role"> <text /> </attribute>
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <attribute name="node"> <text /> </attribute>
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <attribute name="reason"> <text /> </attribute>
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <attribute name="role"> <text /> </attribute>
36923b
+            </optional>
36923b
+            <optional>
36923b
+                <attribute name="source"> <text /> </attribute>
36923b
+            </optional>
36923b
+        </element>
36923b
+    </define>
36923b
+
36923b
+    <define name="element-utilization">
36923b
+        <element name="utilization">
36923b
+            <attribute name="function"> <text /> </attribute>
36923b
+            <attribute name="node"> <text /> </attribute>
36923b
+            <attribute name="resource"> <text /> </attribute>
36923b
+            <zeroOrMore>
36923b
+                <element>
36923b
+                    <anyName />
36923b
+                    <text />
36923b
+                </element>
36923b
+            </zeroOrMore>
36923b
+        </element>
36923b
+    </define>
36923b
+</grammar>
36923b
diff --git a/xml/api/nodes-2.21.rng b/xml/api/nodes-2.21.rng
36923b
new file mode 100644
36923b
index 000000000..df4c77f37
36923b
--- /dev/null
36923b
+++ b/xml/api/nodes-2.21.rng
36923b
@@ -0,0 +1,51 @@
36923b
+
36923b
+
36923b
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
36923b
+
36923b
+    <start>
36923b
+        <ref name="element-full-node"/>
36923b
+    </start>
36923b
+
36923b
+    <define name="element-full-node">
36923b
+        <element name="node">
36923b
+            <attribute name="name"> <text/> </attribute>
36923b
+            <attribute name="id"> <text/> </attribute>
36923b
+            <attribute name="online"> <data type="boolean" /> </attribute>
36923b
+            <attribute name="standby"> <data type="boolean" /> </attribute>
36923b
+            <attribute name="standby_onfail"> <data type="boolean" /> </attribute>
36923b
+            <attribute name="maintenance"> <data type="boolean" /> </attribute>
36923b
+            <attribute name="pending"> <data type="boolean" /> </attribute>
36923b
+            <attribute name="unclean"> <data type="boolean" /> </attribute>
36923b
+            <optional>
36923b
+                <attribute name="health">
36923b
+                    <choice>
36923b
+                        <value>red</value>
36923b
+                        <value>yellow</value>
36923b
+                        <value>green</value>
36923b
+                    </choice>
36923b
+                </attribute>
36923b
+            </optional>
36923b
+            <attribute name="shutdown"> <data type="boolean" /> </attribute>
36923b
+            <attribute name="expected_up"> <data type="boolean" /> </attribute>
36923b
+            <attribute name="is_dc"> <data type="boolean" /> </attribute>
36923b
+            <attribute name="resources_running"> <data type="nonNegativeInteger" /> </attribute>
36923b
+            <attribute name="type">
36923b
+                <choice>
36923b
+                    <value>unknown</value>
36923b
+                    <value>member</value>
36923b
+                    <value>remote</value>
36923b
+                    <value>ping</value>
36923b
+                </choice>
36923b
+            </attribute>
36923b
+            <optional>
36923b
+                
36923b
+                     "container_id" while later versions use "id_as_resource" -->
36923b
+                <choice>
36923b
+                    <attribute name="container_id"> <text/> </attribute>
36923b
+                    <attribute name="id_as_resource"> <text/> </attribute>
36923b
+                </choice>
36923b
+            </optional>
36923b
+            <externalRef href="resources-2.4.rng" />
36923b
+        </element>
36923b
+    </define>
36923b
+</grammar>
36923b
-- 
36923b
2.31.1
36923b