754 lines
22 KiB
Plaintext
754 lines
22 KiB
Plaintext
=encoding utf8
|
||
|
||
=head1 NAME
|
||
|
||
gizmo - Saxon command-line interactive or batch-mode utility
|
||
|
||
=head1 SYNOPSIS
|
||
|
||
gizmo [I<options>]
|
||
|
||
=head1 DESCRIPTION
|
||
|
||
Saxon (from 10.0) provides the Gizmo command line utility, which can be used
|
||
interactively or in batch mode, to perform simple operations such as examining
|
||
the content of a document, renaming or deletion of selected elements in the
|
||
document, or performing simple XSLT transformation and XSD validation.
|
||
|
||
The utility can be started from the command line using the Java entry-point
|
||
class C<net.sf.saxon.Gizmo>, and its actions are controlled by sub-commands
|
||
entered one per line, either on the standard input, or in a file named in the
|
||
B<-q> option.
|
||
|
||
=head1 OPTIONS
|
||
|
||
=over
|
||
|
||
=item B<-s>:I<source.xml>
|
||
|
||
Defines the source document supplied as the input to the pipeline of
|
||
sub-commands. If omitted, input is taken from standard input.
|
||
|
||
=item B<-q>:I<script.txt>
|
||
|
||
Identifies a filename containing sub-commands to be executed, one per line. By
|
||
default, sub-commands are taken from standard input.
|
||
|
||
=back
|
||
|
||
=head1 COMMANDS
|
||
|
||
Each line of input is a sub-command. The various sub-commands are listed in the
|
||
following sections.
|
||
|
||
At any point in the processing, there is (or is not) a current document. On
|
||
entry, the current document is the source document identified in the -s option,
|
||
if specified. Many of the sub-commands change the current document. The current
|
||
document may be inspected using the show sub-command, and may be saved to
|
||
filestore using the save sub-command.
|
||
|
||
Most of the sub-commands select nodes within the current document using an
|
||
XPath expression. If unprefixed element names appear within the expression,
|
||
they match nodes in the source document by local-name alone. (That is, I<X>
|
||
means C<*:>I<X>). If you only want to select no-namespace names, use the form
|
||
C<Q{}>I<X>.
|
||
|
||
Within XPath expressions, content completion is available for (a) recognized
|
||
XPath keywords such as “C<following-sibling>”, and (b) the names of elements
|
||
and attributes appearing in the current source document when it was first
|
||
loaded.
|
||
|
||
Some of the sub-commands also have a second argument which is a query.
|
||
Generally this will be an XQuery element constructor such as
|
||
C<E<lt>aE<gt>Title: {string(.)}E<lt>a/E<gt>>. It is evaluated with the context
|
||
item set to each item selected by the first expression, in turn.
|
||
|
||
=over
|
||
|
||
=item B<copy> I<expression>
|
||
|
||
Deletes everything other than the nodes selected by the expression; returns a
|
||
new document containing only the selected nodes. Note that if the expression
|
||
selects multiple elements, the new document will not be a well-formed XML
|
||
document (it will be a "fragment").
|
||
|
||
The result of the operation can be inspected using the command B<show>.
|
||
|
||
Example
|
||
|
||
The command:
|
||
|
||
copy //img
|
||
|
||
returns a document containing as its children copies of all the img elements in
|
||
the source.
|
||
|
||
=item B<call> {I<filename>}
|
||
|
||
Executes the script contained in the specified file.
|
||
|
||
The script shares the context with the calling script. It has access to the
|
||
variables and namespaces declared in the calling script, and any variables and
|
||
namespaces that it declared are available to the caller on return.
|
||
|
||
=item B<delete> I<expression>
|
||
|
||
The selected nodes (elements, attributes, or namespaces) are deleted, along
|
||
with their children and descendants.
|
||
|
||
The result of the operation can be inspected using the command B<show>.
|
||
|
||
Example
|
||
|
||
Given a source document:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE"/>
|
||
<city name="Paris" country="FR"/>
|
||
<city name="Rome" country="IT"/>
|
||
</cities>
|
||
|
||
The command:
|
||
|
||
delete //city[@name='Rome']
|
||
|
||
produces the document:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE"/>
|
||
<city name="Paris" country="FR"/>
|
||
</cities>
|
||
|
||
=item B<follow> I<expression> B<with> I<query>
|
||
|
||
After each node I<N> selected by the expression, the query is evaluated (with
|
||
I<N> as the context item), and its result is inserted as an immediate following
|
||
sibling of I<N>. Both the expression and the query must return nodes that are
|
||
capable of having siblings: that is, element, text, comment, or processing
|
||
instruction nodes. But if the query returns an atomic value, it is treated as a
|
||
text node with the same string value.
|
||
|
||
The result of the operation can be inspected using the command B<show>.
|
||
|
||
Examples
|
||
|
||
The command:
|
||
|
||
follow //img with <caption/>
|
||
|
||
inserts an empty CE<lt>caption/E<gt>> element after every img element in the
|
||
document.
|
||
|
||
Given a source document:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE"/>
|
||
<city name="Paris" country="FR"/>
|
||
<city name="Rome" country="IT"/>
|
||
</cities>
|
||
|
||
The command:
|
||
|
||
follow //city[@name='Paris'] with <city name="Lyon" country="{@country}"/>
|
||
|
||
produces the document:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE"/>
|
||
<city name="Paris" country="FR"/>
|
||
<city name="Lyon" country="FR"/>
|
||
<city name="Rome" country="IT"/>
|
||
</cities>
|
||
|
||
=item B<help> I<keyword>
|
||
|
||
If the I<keyword> is the name of a command, a brief summary of the syntax and
|
||
purpose of the command is displayed.
|
||
|
||
If the I<keyword> is omitted, a list of available commands is displayed.
|
||
|
||
=item B<list> I<expression>
|
||
|
||
Outputs a representation of the result of the expression.
|
||
|
||
If a node is selected, it is shown as a path (for example
|
||
C<DOC/SECTION[3]/PARA[2]>), preceded by a line number if one is available.
|
||
|
||
If an atomic value is selected, its string value is displayed.
|
||
|
||
Line numbers are available in documents loaded directly from filestore, but not
|
||
in documents constructed using commands such as B<rename> or B<delete>.
|
||
|
||
Example
|
||
|
||
Given a source document:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE"/>
|
||
<city name="Paris" country="FR"/>
|
||
<city name="Rome" country="IT"/>
|
||
</cities>
|
||
|
||
The command:
|
||
|
||
list //city[@name='Paris']
|
||
|
||
displays:
|
||
|
||
Line 3: /cities/city[2]
|
||
|
||
=item B<load> I<filename>
|
||
|
||
The current document is discarded, and a new current document is loaded from
|
||
the specified file.
|
||
|
||
If the filename is relative, it is taken as being relative to the current
|
||
working directory.
|
||
|
||
The user’s home directory can be referred to as C<~>.
|
||
|
||
Content completion is available: use the tab key to suggest possible names at
|
||
each level.
|
||
|
||
=item B<namespace> {I<prefix>} {I<uri>}
|
||
|
||
Binds a namespace prefix to a URI. QNames using this prefix may be used in
|
||
subsequent XPath expressions within the script.
|
||
|
||
Note that the conventional prefixes C<xml>, C<xsl>, C<saxon>, C<xs>, C<xsi>,
|
||
C<fn>, C<math>, C<map>, and array are already bound to the conventional
|
||
namespace URIs.
|
||
|
||
In path expressions, unprefixed names match by local name only, so it is
|
||
usually possible to select elements without binding a namespace prefix.
|
||
|
||
|
||
=item B<paths>
|
||
|
||
Outputs a list of the distinct element paths that exist in the current source
|
||
document. They are output in order of first appearance, when scanning the tree
|
||
in document order.
|
||
|
||
This command is useful to get an overview of the structure of the source
|
||
document, especially if it is too large to display comfortably.
|
||
|
||
Example
|
||
|
||
For example, given the F<books.xml> data file included with the Saxon resources
|
||
download, the output would be:
|
||
|
||
Found 16 items
|
||
/BOOKLIST
|
||
/BOOKLIST/BOOKS
|
||
/BOOKLIST/BOOKS/ITEM
|
||
/BOOKLIST/BOOKS/ITEM/TITLE
|
||
/BOOKLIST/BOOKS/ITEM/AUTHOR
|
||
/BOOKLIST/BOOKS/ITEM/PUBLISHER
|
||
/BOOKLIST/BOOKS/ITEM/PUB-DATE
|
||
/BOOKLIST/BOOKS/ITEM/LANGUAGE
|
||
/BOOKLIST/BOOKS/ITEM/PRICE
|
||
/BOOKLIST/BOOKS/ITEM/QUANTITY
|
||
/BOOKLIST/BOOKS/ITEM/ISBN
|
||
/BOOKLIST/BOOKS/ITEM/PAGES
|
||
/BOOKLIST/BOOKS/ITEM/DIMENSIONS
|
||
/BOOKLIST/BOOKS/ITEM/WEIGHT
|
||
/BOOKLIST/CATEGORIES
|
||
/BOOKLIST/CATEGORIES/CATEGORY
|
||
|
||
=item B<precede> I<expression> B<with> I<query>
|
||
|
||
Before each node C<N> selected by the expression, the query is evaluated (with
|
||
I<N> as the context item), and its result is inserted as an immediate preceding
|
||
sibling of I<N>. Both the expression and the query must return nodes that are
|
||
capable of having siblings: that is, element, text, comment, or processing
|
||
instruction nodes. But if the query returns an atomic value, it is treated as a
|
||
text node with the same string value.
|
||
|
||
The result of the operation can be inspected using the command B<show>.
|
||
|
||
Examples
|
||
|
||
The command:
|
||
|
||
precede //img with <caption/>
|
||
|
||
inserts an empty C<E<lt>caption/E<gt>> element before every C<img> element in
|
||
the document.
|
||
|
||
Given a source document:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE"/>
|
||
<city name="Munich" country="DE"/>
|
||
<city name="Paris" country="FR"/>
|
||
<city name="Lyon" country="FR"/>
|
||
<city name="Rome" country="IT"/>
|
||
</cities>
|
||
|
||
The command:
|
||
|
||
precede //city[not(@country=preceding-sibling::*[1]/@country)] with <country name="{@country}"/>
|
||
|
||
produces the document:
|
||
|
||
<cities>
|
||
<country name="DE"/>
|
||
<city name="Berlin" country="DE"/>
|
||
<city name="Munich" country="DE"/>
|
||
<country name="FR"/>
|
||
<city name="Paris" country="FR"/>
|
||
<city name="Lyon" country="FR"/>
|
||
<country name="IT"/>
|
||
<city name="Rome" country="IT"/>
|
||
</cities>
|
||
|
||
=item B<prefix> I<expression> B<with> I<query>
|
||
|
||
For every node I<N> selected by the expression, the query is evaluated (with
|
||
I<N> as the context item), and its result is inserted as the first child of
|
||
I<N>. The expression must return nodes that are capable of having children
|
||
(that is document or element nodes). The query must return nodes that are
|
||
capable of having siblings (that is, element, text, comment, or processing
|
||
instruction nodes). But if the query returns an atomic value, it is treated as
|
||
a text node with the same string value.
|
||
|
||
As a special case, if the query returns an attribute node, it is added as an
|
||
attribute of the selected element, replacing any existing attribute with the
|
||
same name.
|
||
|
||
The result of the operation can be inspected using the command B<show>.
|
||
|
||
Examples
|
||
|
||
The command:
|
||
|
||
prefix //section with <head>{data(@title)}</head>
|
||
|
||
copies the value of the title attribute of every C<section> element into a new
|
||
C<head> element appearing as the first child of the C<section>.
|
||
|
||
Given a source document:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE"/>
|
||
<city name="Munich" country="DE"/>
|
||
<city name="Paris" country="FR"/>
|
||
<city name="Lyon" country="FR"/>
|
||
<city name="Rome" country="IT"/>
|
||
</cities>
|
||
|
||
The command:
|
||
|
||
prefix //city with <country name="{@country}"/>
|
||
|
||
produces the document:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE">
|
||
<country name="DE"/>
|
||
</city>
|
||
<city name="Munich" country="DE">
|
||
<country name="DE"/>
|
||
</city>
|
||
<city name="Paris" country="FR">
|
||
<country name="FR"/>
|
||
</city>
|
||
<city name="Lyon" country="FR">
|
||
<country name="FR"/>
|
||
</city>
|
||
<city name="Rome" country="IT">
|
||
<country name="FR"/>
|
||
</city>
|
||
</cities>
|
||
|
||
With the same document, the command:
|
||
|
||
prefix //city with attribute{'id'}{count(preceding-sibling::*)+1}
|
||
|
||
produces:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE" id="1"/>
|
||
<city name="Munich" country="DE" id="2"/>
|
||
<city name="Paris" country="FR" id="3"/>
|
||
<city name="Lyon" country="FR" id="4"/>
|
||
<city name="Rome" country="IT" id="5"/>
|
||
</cities>
|
||
|
||
=item B<quit> [B<now>]
|
||
|
||
Quits the application.
|
||
|
||
If “B<now>” is specified, the command exits immediately. Otherwise, if the
|
||
current document has been modified since it was read from filestore, the
|
||
command prompts the user asking whether the document should first be saved.
|
||
(See the B<save> command).
|
||
|
||
=item B<rename> I<expression> B<as> I<expression>
|
||
|
||
Nodes (elements or attributes) selected by the first I<expression> are renamed;
|
||
the new name is given by computing the expression in the second argument.
|
||
|
||
The second I<expression> is evaluated with the existing node as the context
|
||
item. If the result of the expression is a string, then this string is used as
|
||
the new name of the node (if it contains a prefix, this must first be declared
|
||
using the B<namespace> command). If the result of the expression is a QName,
|
||
then it defines the expanded name of the new element or attribute in its
|
||
entirety. New namespace declarations will be added to the output document if
|
||
required; existing namespace declarations are not removed, unless new bindings
|
||
are defined for existing prefixes.
|
||
|
||
Examples
|
||
|
||
rename //NOTE as "COMMENT"
|
||
|
||
renames all NOTE elements as COMMENT elements.
|
||
|
||
rename //@* as lower-case(name())
|
||
|
||
renames all attributes by converting the existing name to lower-case.
|
||
|
||
=item B<replace> I<expression> B<with> I<query>
|
||
|
||
The nodes (elements or attributes) selected by the given I<expression> are
|
||
replaced by the result of evaluating the I<query>.
|
||
|
||
Note that it is the entire node that is replaced, not just its content. To
|
||
replace the content of an element or attribute node, rather than replacing the
|
||
entire node, use the command B<update>.
|
||
|
||
The result of the operation can be inspected using the command B<show>.
|
||
|
||
Examples
|
||
|
||
Given a source document:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE"/>
|
||
<city name="Munich" country="DE"/>
|
||
<city name="Paris" country="FR"/>
|
||
<city name="Lyon" country="FR"/>
|
||
<city name="Rome" country="IT"/>
|
||
</cities>
|
||
|
||
The command:
|
||
|
||
replace //city[@country="DE"] with <stadt @Name="{@name}"/>
|
||
|
||
produces the document:
|
||
|
||
<cities>
|
||
<stadt Name="Berlin"/>
|
||
<stadt Name="Munich"/>
|
||
<city name="Paris" country="FR"/>
|
||
<city name="Lyon" country="FR"/>
|
||
<city name="Rome" country="IT"/>
|
||
</cities>
|
||
|
||
Given a source document:
|
||
|
||
<cities>
|
||
<city><name>Berlin</name><country>DE</country></city>
|
||
<city><name>Munich</name><country>DE</country></city>
|
||
<city><name>Paris</name><country>FR</country></city>
|
||
<city><name>Lyon</name><country>FR</country></city>
|
||
<city><name>Rome</name><country>IT</country></city>
|
||
</cities>
|
||
|
||
The command:
|
||
|
||
replace //city/name[.="Munich"]/text() with "München"
|
||
|
||
produces the document:
|
||
|
||
<cities>
|
||
<city><name>Berlin</name><country>DE</country></city>
|
||
<city><name>München</name><country>DE</country></city>
|
||
<city><name>Paris</name><country>FR</country></city>
|
||
<city><name>Lyon</name><country>FR</country></city>
|
||
<city><name>Rome</name><country>IT</country></city>
|
||
</cities>
|
||
|
||
With the same source document, the command:
|
||
|
||
replace //name with {.}
|
||
|
||
produces the document:
|
||
|
||
<cities>
|
||
<city><cityName><name>Berlin</name></cityName><country>DE</country></city>
|
||
<city><cityName><name>Munich</name></cityName><country>DE</country></city>
|
||
<city><cityName><name>Paris</name></cityName><country>FR</country></city>
|
||
<city><cityName><name>Lyon</name></cityName><country>FR</country></city>
|
||
<city><cityName><name>Rome</name></cityName><country>IT</country></city>
|
||
</cities>
|
||
|
||
Note that in this expression, C<{.}> follows the XQuery rules rather than the
|
||
XSLT rules: it copies the whole element, rather than extract its string value.
|
||
|
||
=item B<save> I<filename> [I<output-param>=I<value>]…
|
||
|
||
Saves the current document to filestore, with the serialization parameters
|
||
specified.
|
||
|
||
If the file already exists, Gizmo asks “C<Overwrite existing file? (Y|N)>” and
|
||
proceeds only if the answer is “C<Y>” or “C<y>”.
|
||
|
||
If the I<filename> is relative, it is taken as being relative to the current
|
||
working directory.
|
||
|
||
The user’s home directory can be referred to as C<~>.
|
||
|
||
Content completion is available: use the tab key to suggest possible names at
|
||
each level.
|
||
|
||
Examples
|
||
|
||
The command:
|
||
|
||
save updated-data.xml method=xml indent=yes
|
||
|
||
saves the document to filestore using the XML output method with indentation.
|
||
|
||
=item B<schema> I<filename>
|
||
|
||
Requires Saxon-EE
|
||
|
||
Loads an XSD schema from the specified location.
|
||
|
||
The I<filename> is handled in the same way as the B<load> command.
|
||
|
||
The schema definitions are available for use in validate commands issued
|
||
subsequently in the session. The command is additive; the schema components are
|
||
added to the collection of schema components that are already loaded, which
|
||
means an error will be reported if the definitions conflict. It is not possible
|
||
to unload schema definitions once loaded, except by closing the session and
|
||
starting a new one.
|
||
|
||
=item B<set> I<name> = I<expression> | B<set . => I<expression>
|
||
|
||
The first form binds a variable to the value of the expression. The variable
|
||
name may be written as a simple NCName, or as a lexical QName, or as an EQName
|
||
in C<Q{>I<uri>B<}>I<local> format; it may also be preceded by a “C<$>” sign
|
||
(which is ignored).
|
||
|
||
The variable may be used in XPath expressions and queries appearing later in
|
||
the script.
|
||
|
||
The second form: B<set . => I<expression> may be used to set the current
|
||
document. In this case the expression must evaluate to a single document node.
|
||
For example:
|
||
|
||
set . = doc('books.xml')
|
||
|
||
achieves the same effect as:
|
||
|
||
load books.xml
|
||
|
||
Note that all updating commands (such as delete, rename etc.) create a new copy
|
||
of the current document. Variables that were set before the updating command
|
||
continue to reference the document in the state it was in before the update.
|
||
|
||
To display the value of a variable, use the B<show> or B<list> commands.
|
||
|
||
=item B<show> [I<expression>]
|
||
|
||
Outputs a representation of the result of the I<expression>.
|
||
|
||
If a node is selected, it is shown as an XML serialization of the content of
|
||
the node.
|
||
|
||
If an atomic value is selected, its string value is displayed.
|
||
|
||
The expression may be omitted, and defaults to C</>, which displays the current
|
||
document.
|
||
|
||
The document is always shown with indentation enabled, so it is not necessarily
|
||
the same as the document that will be written to filestore by the B<save> command.
|
||
|
||
Examples
|
||
|
||
show
|
||
|
||
Displays the current document, with indentation.
|
||
|
||
show //TITLE
|
||
|
||
Displays selected elements, for example:
|
||
|
||
<title>Pride and Prejudice</title>
|
||
<title>Sense and Sensibility</title>
|
||
<title>Emma</title>
|
||
<title>Northanger Abbey</title>
|
||
|
||
show count(//TITLE), sort(//TITLE)
|
||
|
||
Displays the result of an arbitrary XPath expression.
|
||
|
||
=item B<strip>
|
||
|
||
The effect is the same as:
|
||
|
||
delete //text()[not(normalize-space())]
|
||
|
||
That is, all text nodes consisting entirely of whitespace are removed from the
|
||
document.
|
||
|
||
=item B<suffix> I<expression> B<with> I<query>
|
||
|
||
For every node I<N> selected by the expression, the query is evaluated (with
|
||
I<N> as the context item), and its result is inserted as the last child of
|
||
I<N>. The expression must return nodes that are capable of having children
|
||
(that is document or element nodes). The query must return nodes that are
|
||
capable of having siblings (that is, element, text, comment, or processing
|
||
instruction nodes). But if the query returns an atomic value, it is treated as
|
||
a text node with the same string value.
|
||
|
||
Example
|
||
|
||
The command:
|
||
|
||
suffix //page with <copyright>Copyright (c) Saxonica 2020</page>
|
||
|
||
injects a copyright element at the end of every page.
|
||
|
||
=item B<transform> I<filename>
|
||
|
||
Transforms the current document using the XSLT stylesheet contained in the
|
||
specified file.
|
||
|
||
The I<filename> is handled in the same way as the B<load> command.
|
||
|
||
On completion, the result of the transformation becomes the new current
|
||
document.
|
||
|
||
Note: it is not currently possible to specify parameters to the transformation.
|
||
|
||
=item B<undo>
|
||
|
||
Reverts the most recent changes.
|
||
|
||
The current document is returned to the state it was in before the most recent
|
||
B<copy>, B<delete>, B<follow>, B<load>, B<precede>, B<prefix>, B<rename>,
|
||
B<replace>, B<strip>, B<suffix>, B<transform>, B<update>, or B<validate>
|
||
command.
|
||
|
||
It will also undo the effect of:
|
||
|
||
set . = expression
|
||
|
||
that is, it reverts to the previous current document.
|
||
|
||
It is not possible to undo the effect of B<save> or B<schema> commands.
|
||
|
||
=item B<update> I<expression> B<with> I<query>
|
||
|
||
The content of the nodes selected by the given expression is replaced by the
|
||
result of evaluating the query:
|
||
|
||
=over
|
||
|
||
=item ·
|
||
|
||
When an element or document node is selected, the existing children are
|
||
deleted, and replaced with the result of the expression.
|
||
|
||
=item ·
|
||
|
||
When the selected element is a node kind that cannot have children, for example
|
||
a comment, text node, or attribute, then its content is replaced with the
|
||
string value of the query result.
|
||
|
||
=back
|
||
|
||
Examples
|
||
|
||
Given the source document:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE"/>
|
||
<city name="Munich" country="DE"/>
|
||
<city name="Paris" country="FR"/>
|
||
<city name="Lyon" country="FR"/>
|
||
<city name="Rome" country="IT"/>
|
||
</cities>
|
||
|
||
The command:
|
||
|
||
update //@country[.='IT'] with "ITALIA"
|
||
|
||
produces:
|
||
|
||
<cities>
|
||
<city name="Berlin" country="DE"/>
|
||
<city name="Munich" country="DE"/>
|
||
<city name="Paris" country="FR"/>
|
||
<city name="Lyon" country="FR"/>
|
||
<city name="Rome" country="ITALIA"/>
|
||
</cities>
|
||
|
||
Given a source document:
|
||
|
||
<cities>
|
||
<city><name>Berlin</name><country>DE</country></city>
|
||
<city><name>Munich</name><country>DE</country></city>
|
||
<city><name>Paris</name><country>FR</country></city>
|
||
<city><name>Lyon</name><country>FR</country></city>
|
||
<city><name>Rome</name><country>IT</country></city>
|
||
</cities>
|
||
|
||
The command:
|
||
|
||
update //city/name[.="Munich"] with "München"
|
||
|
||
produces the document:
|
||
|
||
<cities>
|
||
<city><name>Berlin</name><country>DE</country></city>
|
||
<city><name>München</name><country>DE</country></city>
|
||
<city><name>Paris</name><country>FR</country></city>
|
||
<city><name>Lyon</name><country>FR</country></city>
|
||
<city><name>Rome</name><country>IT</country></city>
|
||
</cities>
|
||
|
||
With the same source document, the command:
|
||
|
||
update //@country with lower-case(.)
|
||
|
||
produces:
|
||
|
||
<cities>
|
||
<city><name>Berlin</name><country>de</country></city>
|
||
<city><name>Munich</name><country>de</country></city>
|
||
<city><name>Paris</name><country>fr</country></city>
|
||
<city><name>Lyon</name><country>fr</country></city>
|
||
<city><name>Rome</name><country>it</country></city>
|
||
</cities>
|
||
|
||
=item B<validate>
|
||
|
||
Requires Saxon-EE
|
||
|
||
Validates the current document using the XSD schema(s) previously loaded using
|
||
the B<schema> command, supplemented with any schema found via an
|
||
C<xsi:schemaLocation> or C<xsi:noNamespaceSchemaLocation> attribute in the
|
||
source document.
|
||
|
||
On completion, the validated result (complete with type annotations) becomes
|
||
the new current document. Any expressions and queries executed against a typed
|
||
document are treated as schema-aware.
|
||
|
||
If validation fails, the validation error messages are output, and the current
|
||
document remains unchanged.
|
||
|
||
=back
|
||
|
||
=head1 SEE ALSO
|
||
|
||
L<https://www.saxonica.com/documentation10/index.html>, L<saxon10(1)>,
|
||
L<saxon10q(1)>, L<xsltproc(1)>.
|
||
|
||
=head1 AUTHOR
|
||
|
||
Michael H. Kay E<lt>L<mike@saxonica.com>E<gt>
|