diff options
Diffstat (limited to 'schema/op-mode-definition.rng')
-rw-r--r-- | schema/op-mode-definition.rng | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/schema/op-mode-definition.rng b/schema/op-mode-definition.rng index bfd5cb50a..d7a56c6b2 100644 --- a/schema/op-mode-definition.rng +++ b/schema/op-mode-definition.rng @@ -102,6 +102,27 @@ </element> </define> <!-- + Virtual tag nodes provide a way to add a variable argument + to a command that also needs fixed arguments, + like "show ip route" that can take "show ip route bgp" + or a network and arguments after it, like "show ip route 10.0.0.0/8 longer-prefixes" + --> + <define name="virtualTagNode"> + <element name="virtualTagNode"> + <interleave> + <optional> + <ref name="properties"/> + </optional> + <optional> + <ref name="children"/> + </optional> + <optional> + <ref name="command"/> + </optional> + </interleave> + </element> + </define> + <!-- Leaf nodes are terminal configuration nodes that can't have children, but can have values. --> @@ -114,16 +135,33 @@ </interleave> </element> </define> - <!-- Normal and tag nodes may have children --> + <!-- + Normal and tag nodes may have children: nodes, leaf nodes, or tag nodes. + There can only be one virtual tag node child, though. + --> <define name="children"> <element name="children"> - <oneOrMore> - <choice> - <ref name="node"/> - <ref name="tagNode"/> - <ref name="leafNode"/> - </choice> - </oneOrMore> + <choice> + <interleave> + <optional> + <ref name="virtualTagNode"/> + </optional> + <zeroOrMore> + <choice> + <ref name="node"/> + <ref name="tagNode"/> + <ref name="leafNode"/> + </choice> + </zeroOrMore> + </interleave> + <oneOrMore> + <choice> + <ref name="node"/> + <ref name="tagNode"/> + <ref name="leafNode"/> + </choice> + </oneOrMore> + </choice> </element> </define> <!-- |