diff options
Diffstat (limited to 'data/schemata/interface_definition.rnc')
-rw-r--r-- | data/schemata/interface_definition.rnc | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/data/schemata/interface_definition.rnc b/data/schemata/interface_definition.rnc new file mode 100644 index 0000000..5bd3437 --- /dev/null +++ b/data/schemata/interface_definition.rnc @@ -0,0 +1,174 @@ +# interface_definition.rnc: VyConf reference tree XML grammar +# +# Copyright (C) 2014 VyOS Development Group <maintainers@vyos.net> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 +# USA + +# The language of this file is compact form RELAX-NG +# http://relaxng.org/compact-tutorial-20030326.htm +# (unless converted to XML, then just RELAX-NG :) + +# Interface definition starts with interfaceDefinition tag that may contain node tags +# It also may contain "extends" tags, if nodes must be appended to certain path +start = element interfaceDefinition +{ + extends*, nodeList +} + +nodeList = element nodeList +{ + node* +} + +# Extends tag defines path prepended to the nodes +extends = element extends +{ + path +} + +path = attribute path +{ + text +} + +# node tag may contain node, leafNode, or tagNode tags +# Those are intermediate configuration nodes that may only contain +# other nodes and must not have values +node = element node +{ + ownerAttr?, + nodeNameAttr, + helpString?, + (node | tagNode | leafNode)* +} + +# All nodes must have "name" attribute +nodeNameAttr = attribute name +{ + text +} + +# Ordinary nodes and tag nodes can have "owner" attribute. +# Owner is the component that is notified when node changes. +ownerAttr = attribute owner +{ + text +} + +# Tag nodes are containers for nodes without predefined names, like network interfaces +# or user names (e.g. "interfaces ethernet eth0" or "user jrandomhacker") +# Tag nodes may contain node and leafNode elements, and also nameConstraint tags +# They must not contain other tag nodes +tagNode = element tagNode +{ + ownerAttr?, + nodeNameAttr, + nameConstraint?, + helpString?, + (node | leafNode)+ +} + +# Tag nodes may also contain nameConstraint tag with type and constraint +# attributes. It provides information required to validate child name. +nameConstraint = element nameConstraint +{ + typeAttr, + constraintAttr?, + errorMessageAttr?, + empty +} + +# Leaf nodes are terminal configuration nodes that can't have children, +# but can have values. +# Leaf node may contain one or more valueConstraint tags +# If multiple valueConstraint tags are used, they work a logical OR +# Leaf nodes can have "multi" attribute that indicated that it can have +# more than one value +leafNode = element leafNode +{ + nodeNameAttr, + multiAttr?, + helpString?, + (valueHelpString | valueConstraint)* +} + +# valueConstraint tag contains information required to validate node values +# It must have two attributes, "type" and "constraint". +valueConstraint = element valueConstraint +{ + typeAttr, + constraintAttr?, + errorMessageAttr?, + empty +} + +# helpString tag contains brief description of the purpose of the node +# Must have description= attribute +helpString = element helpString +{ + descriptionAttr, empty +} + +# valueHelpString tag contain information about acceptable value format +# It may be exact value in value= attribute, or a placeholder taken from +# type specified in type= attribute +valueHelpString = element valueHelpString +{ + ((typeAttr, constraintAttr?) | valueAttr), + descriptionAttr, + empty +} + +# description= attribute contains help strings for nodes +descriptionAttr = attribute description +{ + text +} + +# value= attributes contains one of allowed values for leaf nodes +valueAttr = attribute value +{ + text +} + +# type= attribute is used in leaf nodes and contains name of a type +# to take value placeholder from +typeAttr = attribute type +{ + text +} + +# constraint= attribute contains additional information for type validation, +# used in valueContrating tags +constraintAttr = attribute constraint +{ + text +} + +# error-message= attribute is used to override default error message +# in nameConstraint and valueConstraint attributes +errorMessageAttr = attribute error-message +{ + text +} + +# multi=<true|false> attribute indicates that a leaf node can have +# multiple values +# If not present, treated as "false" +multiAttr = attribute multi +{ + xsd:boolean +} |