Understanding the SLAX Processor (slaxproc)
The SLAX processor is a command-line tool that can format SLAX scripts; validate SLAX script syntax; run or debug SLAX scripts; and convert between SLAX and XSLT formats.
slaxproc Overview
The libslax library incorporates a SLAX writer and SLAX parser, a debugger, a profiler, and the SLAX processor (slaxproc). The SLAX processor is a command-line tool that enables you to perform the following functions:
-
Format SLAX scripts
-
Validate SLAX script syntax
-
Run and debug SLAX scripts
-
Convert between SLAX and XSLT formats
You use the slaxproc command to invoke the SLAX processor on the
command line. The slaxproc command accepts command-line arguments
that specify the processor's mode, any behavioral options, and required input and
output files.
The syntax for the slaxproc command is:
slaxproc [mode] [options] [script] [files]
The slaxproc mode defines what function the processor performs. The slaxproc options include file options and common options. File options are used to specify the script file, input file, output file, and trace file. Common options include additional functionality provided by the SLAX processor such as verbose debugging output.
You can access the slaxproc help by issuing the slaxproc command
with the --help or -h option.
$ slaxproc -h
The following sections discuss the available modes and options in more detail. For additional information about the SLAX processor, see slaxproc: The SLAX Processor.
slaxproc Modes
The slaxproc mode defines the function that the processor performs. The default mode
is --run or -r. If you do not explicitly specify a
mode, the SLAX processor executes a script. Table 1 outlines the slaxproc modes and their functions.
|
Mode |
Description |
|---|---|
|
|
Perform a syntax and content check on a SLAX script, reporting any errors. This mode is useful for off-box syntax checks before installing or uploading scripts to a Junos device. |
|
|
Format a SLAX script, correcting indentation and spacing to the preferred style. |
|
|
Transform JSON input into XML using the conventions defined in http://juniper.github.io/libslax/slax-manual.html#json-elements. |
|
|
(Default) Run a SLAX script. You can provide the script name, input filename, and output filename using command-line options, positional arguments, or a mix of both. Input defaults to standard input (stdin), and output defaults to standard output (stdout). |
|
|
Show an XPath selection from the input document. This mode extracts selections from a script for external consumption. Thus, the consumer has visibility into the contents of the script without using a SLAX parser. |
|
|
Show the contents of a global variable. This mode extracts static
variable contents for external consumption. Thus, the consumer
of the data has access to the static contents of global
variables, such as the |
|
|
Convert a SLAX script into XSLT format. You can provide the script filename and output filename using command-line options, positional arguments, or a mix of both. |
|
|
Convert XML into JSON using the conventions defined in http://juniper.github.io/libslax/slax-manual.html#json-elements. |
|
|
Convert XML into YAML. This mode is introduced in SLAX version 1.3. |
|
|
Select data from the input document that matches the given XPath expression. |
|
|
Convert an XSLT script into SLAX format. You can provide the script filename and output filename using command-line options, positional arguments, or a mix of both. |
slaxproc Options
The slaxproc options include file options and common options. File options are used specify the script file, input file, output file, and trace file. Common options include additional functionality and options provided by the SLAX processor such as verbose debugging output. Table 2 lists the slaxproc common options and file options.
|
Option |
Description |
|---|---|
|
|
Enable the SLAX/XSLT debugger. |
|
|
Provide an empty document as the input data set. Use this option for scripts that do not expect or need meaningful input. |
|
|
Convert a SLAX expression to an XPATH expression, or vice versa, depending on the presence of --slax-to-xslt or --xslt-to-slax. |
|
|
Enable the EXSLT library, which provides a set of standard extension functions. See https://exslt.github.io/ for more information. |
|
|
Display the help message and exit. |
|
|
Parse input data using the HTML parser, which differs from XML. |
|
|
Do not process any further arguments. You can combine this option
with |
|
|
Add a directory to the list of directories searched when using include and import files. Alternatively, you can define the SLAXPATH environment variable to specify a colon-delimited list of directories to search. |
|
|
Indent output. This option is identical to the behavior triggered
by |
|
|
Specify the number of spaces to use for code indentation when you
format a SLAX script using the This option is introduced in SLAX version 1.3. |
|
|
Read input from the specified file. |
|
|
Emit the script output in JSON. This option is introduced in SLAX version 1.3. |
|
|
Tag JSON elements with the 'json' attribute as the input is
converted to XML. By tagging the elements, you can use the
|
|
|
When building a script from mini templates, do not add a template to discard normal text. By default, XSLT displays unmatched text data. This option preserves the default behavior instead of replacing it with the discard action. |
|
|
Adds a directory to the list of directories searched when using extension libraries. Alternatively, you can define the SLAXEXTPATH environment variable to specify a colon-delimited list of extension library locations to search. |
|
|
Write log data to the given file. |
|
|
Pass a simple script in through the command line. The argument is typically a template, such as a named or match template. |
|
|
Read the SLAX script from the specified file. |
|
|
Omit |
|
|
Do not initialize the random number generator. Use this option if you want the script to return identical data for a series of invocations. You typically only use this option during testing. |
|
|
Do not use tty for the SLAX debugger and other tty-related input needs. |
|
|
Write output to the specified file. |
|
|
Pass a parameter to the script using the name and value pair provided. All parameters are string parameters, so normal quoting rules apply. Starting in SLAX version 1.3, you can also use the
|
|
|
Allow the input data to contain a partial SLAX script. Use this
option with the |
|
|
Run the profiler and save the output to the given file. This option is introduced in SLAX version 1.3. |
|
|
Run the profiler using the given mode, for example,
This option is introduced in SLAX version 1.3. |
|
|
Write the results using SLAX-style XML. |
|
|
Write trace data to the specified file. |
|
|
Add verbose internal debugging output to the trace data output,
including calls to the |
|
|
Print version information and exit. The output includes version information for SLAX, libslax, libxml, libxslt, and libexslt. The output includes the SLAX version starting in SLAX version 1.3. |
|
|
Print the SLAX version only. This option is introduced in SLAX version 1.3. |
|
|
Specify the maximum number of characters for the line length
before wrapping when you format a SLAX script using the
This option is introduced in SLAX version 1.3. |
|
|
Write the specified version number to the output file when
converting a script using the Use this option to limit the conversion to only use features in certain versions of SLAX. If you do not specify this option, the SLAX script version defaults to the latest version supported on the device. |
slaxproc Argument Handling
Starting with libslax 3.1.6 (SLAX version 1.3), slaxproc uses the
getopts_long function for processing arguments. This change
enables you to better handle multiple arguments and provides additional syntax for
single arguments. Table 3 outlines the
changes.
| SLAX Version 1.2 | SLAX Version 1.3 and later |
|---|---|
|
Provide multiple options as separate arguments ( |
Provide multiple options as separate arguments (-E -g -d) |
--option value |
|
|
|
--param name
value |
|
For example, the following commands are identical. The second command combines the
options into a single argument and uses the
--option=value
syntax.
$ slaxproc -E -g -d --name test-script.slax $ slaxproc -Egd --name=test-script.slax
The following commands, which format a partial SLAX script, are also identical. In
the second command, the -i option omits the space between the flag
and its value.
$ slaxproc -F -p -i test-script.slax --width 70 $ slaxproc -Fpitest-script.slax --width=70
The following commands provide the max parameter and its value to
the script.
$ slaxproc -E perf.slax --param max 10000 $ slaxproc -E perf.slax --param max=10000
slaxproc File Argument Handling
For all modes except check, you can reference file arguments
positionally or use the file options to specify input and output files. If you use
the file options, you can reference the files in any order, and you can intersperse
the file options among other command-line options.
If the script does not require an input file, use the -E option to
indicate an empty input document. Additionally, if the input or output argument has
the value "‑", the processor uses stdin or stdout. When using stdin, press Ctrl+d to
signal the end-of-file.
To reference files positionally, specify the script file first if it is required for that mode. Then specify the input file, and lastly specify the output file. Referencing the files positionally allows slaxproc to be plug compatible with xsltproc.
$ slaxproc script.slax input.xml output.xml
To reference files using the file options, include --name or
-n, --input or -i, and
--output or -o, to specify the SLAX script
file, and the input and output files, respectively.
$ slaxproc -i input.xml -n script.slax -o output.xml
If you do not provide a file option, slaxproc parses the filename positionally. The following command uses file options to specify the input and output filenames and references the script filename positionally:
$ slaxproc -i input.xml -o output.xml -g -v script.slax
To execute a script that requires no input file, include the -E
option to indicate an empty input document.
$ slaxproc -E script.slax output.xml
slaxproc UNIX Scripting Support
SLAX supports the shebang construct (#!) to specify the executable path. The first line of the script begins with the characters "#!" followed by a path to the executable that runs the script and a set of command-line arguments. For example:
#!/usr/local/bin/slaxproc -n or #!/opt/local/bin/slaxproc -n
The OS adds the name of the script and any command-line arguments to the command that
follows the "#!". Use the ‑n option to pass in
additional arguments on the command line. Flexible argument parsing allows aliases.
For example, if the first line of the script is:
#!/usr/local/bin/slaxproc -E -n
You can provide additional arguments as follows:
$ that-script -g output.xml
The resulting command becomes:
/usr/local/bin/slaxproc -E -n /path/to/that-script -g output.xml
If the input or output argument has the value "‑", slaxproc uses stdin or stdout. Using stdin and stdout enables you to use slaxproc as a traditional UNIX filter.