Understanding the SLAX Processor (slaxproc)
slaxproc Overview
The libslax distribution contains the libslax library, which 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 can validate SLAX script syntax, convert between SLAX and XSLT formats, and format, debug, or run SLAX scripts.
The SLAX processor is invoked on the command line using the slaxproc
command. The slaxproc
command accepts command-line
arguments that specify the mode of the processor, 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. 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
For more information about the SLAX processor, see slaxproc: The SLAX Processor.
slaxproc Modes
The slaxproc mode defines what function 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 device running Junos OS. |
|
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. |
|
Run a SLAX script. This is the default mode. The script name, input filename, and output filename can be provided using command-line options, positional arguments, or a mix of both. Input defaults to standard input, and output defaults to standard output. |
|
Show an XPath selection from the input document. This mode is used to extract out selections from a script for external consumption. This enables the consumer to avoid a SLAX parser but still have visibility into the contents of the script. |
|
Show the contents of a global variable. This mode is used to
extract static variable contents for external consumption. This enables
the consumer of the data to avoid a SLAX parser but still have access
to the static contents of global variables, such as the |
|
Convert a SLAX script into XSLT format. The script filename and output filename are provided 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. |
|
Select data from the input document that matches the given XPath expression. |
|
Convert an XSLT script into SLAX format. The script filename and output filename are provided 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. This is useful 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 http://www.exslt.org 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. This can be combined 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 |
|
Read input from the specified file. |
|
Tag JSON elements with the 'json' attribute as the input is
converted to XML. This enables you to 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. This is useful if you want the script to return identical data for a series of invocations. This option is typically only used 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. |
|
Allow the input data to contain a partial SLAX script, which
can be used with the |
|
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 |
|
Show version information and exit. |
|
Write the specified version number to the output file when converting a script using the
This option can be used to limit the conversion to only use features in certain versions of SLAX. Acceptable values are 1.0, 1.1, 1.2. If this option is not specified, the SLAX script version defaults to the latest version. |
slaxproc File Argument Handling
For all modes except check
, you have the option to
reference file arguments positionally or use the file options to specify
input and output files. If you use the file options, the files can
be referenced in any order on the command line, and the file options
can be interspersed among other command-line options.
If no input file is required, use the -E
option to
indicate an empty input document. Additionally, if the input or output
option argument has the value "‑", the standard input or standard
output file is used. When using standard input, press Ctrl+d to signal
the end-of-file.
To reference files positionally on the command line, 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 explicit file option values, 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 a file option is not provided, the filename is parsed positionally. In the following command, the input and output filenames are specified using the file options, but the script filename is referenced 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 (#!), allowing the first line of a script to begin with the characters "#" and "!" followed by a path to the executable that runs the script and a set of command-line arguments. For example:
#!/usr/bin/slaxproc -n or #!/opt/local/bin/slaxproc -n
The operating system adds the name of the scripts and any command-line
arguments to the command line that follows the "#!". Adding the ‑n
option allows additional arguments to be passed in on the
command line. Flexible argument parsing allows aliases. For example,
if the first line of the script is:
#!/usr/bin/slaxproc -E -n
additional arguments can be provided:
$ that-script -g output.xml
and the resulting command becomes:
/usr/bin/slaxproc -E -n /path/to/that-script -g output.xml
If the input or output argument has the value "‑", the standard input or standard output file is used. This enables slaxproc to be used as a traditional UNIX filter.