Configuration Automations Part 2.
This
article is a continuation of the previous article on Configuration
Automations and describes
the syntax of the configuration templates.
The
templates can declare variables and logic that expand to actual configurations
when substituted. As common to declarative syntax across declarative frameworks
such as for user interface resources, infrastructure resources, and container
orchestration frameworks, most begin and end with a specific delimiter.
The W3
organization specifies a template language for xml and xquery that involves a QName. Template arguments can be described in a
key-value pairs where the key is a proper key name. These must be uniquely
identified for their usage.
Templates
can also import modules and open data files. The import modules take a namespace to avoid conflict
from other modules. The data files can be opened as a string or an xml node
using a built-in intrinsic. This can be used to assign the content to a variable. With the help
of this variable, it is possible to browse an element by walking the hierarchy
checking for each level if it exists and then finding the value corresponding
to the name. A text file can be opened as a sequence of strings as well.
XPath is
the language for navigating the xml hierarchy to identify a node. It uses curly
braces as delimiters and those delimiters so those cannot be used inside the
XPath embedded in a template. XQuery is the language for querying the nodes
with the criteria specified. XQuery embedded in an attribute value of the
template will call the builtin implicitly and this will return the node itself
if it were an attribute that was queried or the concatenated text of the node
and its descendants or if the input contains multi-nodes, their return value
will be joined and delimited by white space. If the XQuery is embedded in an
element text, it will keep its original result and in the case of attribute
node will return the surrounding elements’ attribute while in the case of
element node will become the surrounding elements’ child. As an example, a
<root>
<item
name=”A” value=“1”>X</item>
<item
name=”B” value=”2” >Y</item>
<item
name=”C” value=”3”>Z</item>
</root>
where xml
content can be used with a template specifying an attribute as:
<xml><test
result=”{root/item/@*}”</test>
and this
will result in
“A 1 B 2 C
3”
And an
element as:
<test
result=”{root/item}” ></test>
And this
will result in
<test
result=”X Y Z”></test>
Templates
can also include references to other entities in element texts and attribute
values and there’s some difference between this format and X-Query.
One of the
challenges with template syntax that is often encountered is the use of quotes
for enclosing literals. Single quotes and double quotes cannot be used together
in a string literal but concat operator can be used to build a string from
parts that are enclosed in both.
There are extensions
available that can take a template in one form and translate it into another.
For example, a JSONiq extension is designed to write JSON templates naturally.
No comments:
Post a Comment