line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
# This file was automatically generated from src/xsh_grammar.xml on |
2
|
|
|
|
|
|
|
# Sat Jan 30 02:50:03 2021 |
3
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
package XML::XSH2::Help; |
5
|
8
|
|
|
8
|
|
52
|
use strict; |
|
8
|
|
|
|
|
14
|
|
|
8
|
|
|
|
|
251
|
|
6
|
8
|
|
|
8
|
|
39
|
use vars qw($HELP %HELP $Apropos); |
|
8
|
|
|
|
|
10
|
|
|
8
|
|
|
|
|
52109
|
|
7
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
$HELP=<<'END'; |
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
Welcome to XSH help |
12
|
|
|
|
|
|
|
------------------- |
13
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
In this help: |
15
|
|
|
|
|
|
|
[topic] is a cross reference that can be followed using 'help topic' |
16
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
XSH2 acts as a command interpreter. Individual commands must be separated |
18
|
|
|
|
|
|
|
with a semicolon. In the interactive shell, backslash may be used at the |
19
|
|
|
|
|
|
|
end of a line to indicate that a command continues on the next line. |
20
|
|
|
|
|
|
|
Output redirection can be used to pipe output of some XSH [command] to |
21
|
|
|
|
|
|
|
some external program, or to capture the output to a variable. See |
22
|
|
|
|
|
|
|
[Redirection] for more info. |
23
|
|
|
|
|
|
|
|
24
|
|
|
|
|
|
|
XSH2 command [help] provides a complete reference, instantly from the |
25
|
|
|
|
|
|
|
command-line: |
26
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
'help command' gives a list of all XSH2 [commands]. |
28
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
'help type' gives a list of all argument types. |
30
|
|
|
|
|
|
|
|
31
|
|
|
|
|
|
|
'help topic' followed by documentation chapter gives more information on |
32
|
|
|
|
|
|
|
a given topic. |
33
|
|
|
|
|
|
|
|
34
|
|
|
|
|
|
|
'help toc' displays the table of contents. |
35
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
Within the interactive shell, press for auto-completion. |
39
|
|
|
|
|
|
|
END |
40
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
$HELP{'toc'}=[<<'END']; |
42
|
|
|
|
|
|
|
|
43
|
|
|
|
|
|
|
Help items: |
44
|
|
|
|
|
|
|
----------- |
45
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
toc - this page |
47
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
XSH Language Topics: |
49
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
Argtypes - Argument Types |
51
|
|
|
|
|
|
|
Configuration - Global settings |
52
|
|
|
|
|
|
|
Documents - Files/Documents |
53
|
|
|
|
|
|
|
Flow - Flow control |
54
|
|
|
|
|
|
|
Information - Retrieving more information |
55
|
|
|
|
|
|
|
Manipulation - Tree modification |
56
|
|
|
|
|
|
|
Namespaces - Namespaces in XML and XPath |
57
|
|
|
|
|
|
|
Navigation - Tree navigation |
58
|
|
|
|
|
|
|
Perl_shell - Interacting with Perl and Shell |
59
|
|
|
|
|
|
|
Prompt - Prompt in the interactive shell |
60
|
|
|
|
|
|
|
Redirection - Command output redirection |
61
|
|
|
|
|
|
|
Variables - Variables |
62
|
|
|
|
|
|
|
xsh2delta - Changes since XSH 1.x |
63
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
XSH Commands: |
65
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
|
apropos, assign, backups, call, canonical, catalog, cd, |
67
|
|
|
|
|
|
|
change-ns-prefix, change-ns-uri, clone, close, copy, count, create, |
68
|
|
|
|
|
|
|
debug, declare-ns, def, defs, do, doc-info, documents, dtd, edit, |
69
|
|
|
|
|
|
|
edit-string, empty-tags, enc, encoding, eval, exec, exit, fold, |
70
|
|
|
|
|
|
|
foreach, get, hash, help, if, ifinclude, include, indent, index, |
71
|
|
|
|
|
|
|
insert, iterate, keep-blanks, last, lcd, lineno, load-ext-dtd, local, |
72
|
|
|
|
|
|
|
locate, ls, map, move, my, namespaces, next, nobackups, nodebug, |
73
|
|
|
|
|
|
|
normalize, open, parser-completes-attributes, parser-expands-entities, |
74
|
|
|
|
|
|
|
parser-expands-xinclude, pedantic-parser, perl, prev, print, |
75
|
|
|
|
|
|
|
process-xinclude, pwd, query-encoding, quiet, recovering, redo, |
76
|
|
|
|
|
|
|
register-function, register-namespace, register-xhtml-namespace, |
77
|
|
|
|
|
|
|
register-xsh-namespace, remove, rename, return, run-mode, save, set, |
78
|
|
|
|
|
|
|
set-dtd, set-enc, set-ns, set-standalone, set_filename, settings, |
79
|
|
|
|
|
|
|
skip-dtd, sort, stream, strip-whitespace, switch-to-new-documents, |
80
|
|
|
|
|
|
|
test-mode, throw, try, undef, unfold, unless, unregister-function, |
81
|
|
|
|
|
|
|
unregister-namespace, validate, validation, variables, verbose, |
82
|
|
|
|
|
|
|
version, while, wrap, wrap-span, xcopy, xinsert, xmove, |
83
|
|
|
|
|
|
|
xpath-axis-completion, xpath-completion, xpath-extensions, xslt, |
84
|
|
|
|
|
|
|
xupdate |
85
|
|
|
|
|
|
|
|
86
|
|
|
|
|
|
|
XSH Argument Types: |
87
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
$variable, block, command, document, encoding, expression, filename, |
89
|
|
|
|
|
|
|
location, node-type, nodename, perl-code, subroutine, xpath |
90
|
|
|
|
|
|
|
|
91
|
|
|
|
|
|
|
XPath Extension Functions: |
92
|
|
|
|
|
|
|
|
93
|
|
|
|
|
|
|
xsh:base-uri, xsh:context, xsh:current, xsh:doc, xsh:document, |
94
|
|
|
|
|
|
|
xsh:document-uri, xsh:documents, xsh:evaluate, xsh:filename, xsh:grep, |
95
|
|
|
|
|
|
|
xsh:id2, xsh:if, xsh:join, xsh:lc, xsh:lcfirst, xsh:lineno, xsh:lookup, |
96
|
|
|
|
|
|
|
xsh:map, xsh:match, xsh:matches, xsh:max, xsh:min, xsh:new-attribute, |
97
|
|
|
|
|
|
|
xsh:new-cdata, xsh:new-chunk, xsh:new-comment, xsh:new-element, |
98
|
|
|
|
|
|
|
xsh:new-element-ns, xsh:new-pi, xsh:new-text, xsh:parse, xsh:path, |
99
|
|
|
|
|
|
|
xsh:resolve-uri, xsh:reverse, xsh:same, xsh:serialize, xsh:span, |
100
|
|
|
|
|
|
|
xsh:split, xsh:sprintf, xsh:strmax, xsh:strmin, xsh:subst, xsh:substr, |
101
|
|
|
|
|
|
|
xsh:sum, xsh:times, xsh:uc, xsh:ucfirst, xsh:var |
102
|
|
|
|
|
|
|
|
103
|
|
|
|
|
|
|
END |
104
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
$HELP{'command'}=[<<'END']; |
106
|
|
|
|
|
|
|
command |
107
|
|
|
|
|
|
|
|
108
|
|
|
|
|
|
|
description: |
109
|
|
|
|
|
|
|
XSH2 command consists of a command name and possibly command |
110
|
|
|
|
|
|
|
parameters separated by whitespace. Individual [XSH2 commands] |
111
|
|
|
|
|
|
|
are separated with a semicolon. A command may optionally be |
112
|
|
|
|
|
|
|
followed by an output redirection directive (see |
113
|
|
|
|
|
|
|
[binding_shell] for output redirection to a command and |
114
|
|
|
|
|
|
|
[Variables] for output redirection to variable). Most commands |
115
|
|
|
|
|
|
|
have aliases, so for example [remove] command may also be |
116
|
|
|
|
|
|
|
invoked as 'del' or 'rm'. |
117
|
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
XSH2 recognizes the following commands (not including |
119
|
|
|
|
|
|
|
aliases): apropos, assign, backups, call, canonical, catalog, |
120
|
|
|
|
|
|
|
cd, change-ns-prefix, change-ns-uri, clone, close, copy, |
121
|
|
|
|
|
|
|
count, create, debug, declare-ns, def, defs, do, doc-info, |
122
|
|
|
|
|
|
|
documents, dtd, edit, edit-string, empty-tags, enc, encoding, |
123
|
|
|
|
|
|
|
eval, exec, exit, fold, foreach, get, hash, help, if, |
124
|
|
|
|
|
|
|
ifinclude, include, indent, index, insert, iterate, |
125
|
|
|
|
|
|
|
keep-blanks, last, lcd, lineno, load-ext-dtd, local, locate, |
126
|
|
|
|
|
|
|
ls, map, move, my, namespaces, next, nobackups, nodebug, |
127
|
|
|
|
|
|
|
normalize, open, parser-completes-attributes, |
128
|
|
|
|
|
|
|
parser-expands-entities, parser-expands-xinclude, |
129
|
|
|
|
|
|
|
pedantic-parser, perl, prev, print, process-xinclude, pwd, |
130
|
|
|
|
|
|
|
query-encoding, quiet, recovering, redo, register-function, |
131
|
|
|
|
|
|
|
register-namespace, register-xhtml-namespace, |
132
|
|
|
|
|
|
|
register-xsh-namespace, remove, rename, return, run-mode, |
133
|
|
|
|
|
|
|
save, set, set-dtd, set-enc, set-ns, set-standalone, |
134
|
|
|
|
|
|
|
set_filename, settings, skip-dtd, sort, stream, |
135
|
|
|
|
|
|
|
strip-whitespace, switch-to-new-documents, test-mode, throw, |
136
|
|
|
|
|
|
|
try, undef, unfold, unless, unregister-function, |
137
|
|
|
|
|
|
|
unregister-namespace, validate, validation, variables, |
138
|
|
|
|
|
|
|
verbose, version, while, wrap, wrap-span, xcopy, xinsert, |
139
|
|
|
|
|
|
|
xmove, xpath-axis-completion, xpath-completion, |
140
|
|
|
|
|
|
|
xpath-extensions, xslt, xupdate |
141
|
|
|
|
|
|
|
|
142
|
|
|
|
|
|
|
see also: block |
143
|
|
|
|
|
|
|
|
144
|
|
|
|
|
|
|
END |
145
|
|
|
|
|
|
|
|
146
|
|
|
|
|
|
|
|
147
|
|
|
|
|
|
|
$HELP{'block'}=[<<'END']; |
148
|
|
|
|
|
|
|
block argument type |
149
|
|
|
|
|
|
|
|
150
|
|
|
|
|
|
|
description: |
151
|
|
|
|
|
|
|
a block of semicolon-separated XSH2 commands enclosed within |
152
|
|
|
|
|
|
|
braces. |
153
|
|
|
|
|
|
|
|
154
|
|
|
|
|
|
|
Example: Count paragraphs in each chapter |
155
|
|
|
|
|
|
|
|
156
|
|
|
|
|
|
|
$i=0; |
157
|
|
|
|
|
|
|
foreach //chapter { |
158
|
|
|
|
|
|
|
$c=count(./para); |
159
|
|
|
|
|
|
|
$i=$i+1; |
160
|
|
|
|
|
|
|
print "$c paragraphs in chapter no.$i"; |
161
|
|
|
|
|
|
|
} |
162
|
|
|
|
|
|
|
|
163
|
|
|
|
|
|
|
END |
164
|
|
|
|
|
|
|
|
165
|
|
|
|
|
|
|
|
166
|
|
|
|
|
|
|
$HELP{'type'}=[<<'END']; |
167
|
|
|
|
|
|
|
List of command argument types |
168
|
|
|
|
|
|
|
|
169
|
|
|
|
|
|
|
description: |
170
|
|
|
|
|
|
|
$variable, block, command, document, encoding, expression, |
171
|
|
|
|
|
|
|
filename, location, node-type, nodename, perl-code, |
172
|
|
|
|
|
|
|
subroutine, xpath |
173
|
|
|
|
|
|
|
|
174
|
|
|
|
|
|
|
END |
175
|
|
|
|
|
|
|
|
176
|
|
|
|
|
|
|
|
177
|
|
|
|
|
|
|
$HELP{'encoding'}=[<<'END']; |
178
|
|
|
|
|
|
|
enc_string argument type |
179
|
|
|
|
|
|
|
|
180
|
|
|
|
|
|
|
description: |
181
|
|
|
|
|
|
|
An [expression] which evaluates to a valid encoding name, e.g. |
182
|
|
|
|
|
|
|
to utf-8, utf-16, iso-8859-1, iso-8859-2, windows-1250 etc. As |
183
|
|
|
|
|
|
|
with [filename], as long as the expression doesn't contain |
184
|
|
|
|
|
|
|
special characters like braces, brackets, quotes, '$', nor |
185
|
|
|
|
|
|
|
'@', it is taken as a literal and evaluates to itself. |
186
|
|
|
|
|
|
|
|
187
|
|
|
|
|
|
|
END |
188
|
|
|
|
|
|
|
|
189
|
|
|
|
|
|
|
|
190
|
|
|
|
|
|
|
$HELP{'$variable'}=[<<'END']; |
191
|
|
|
|
|
|
|
variable name |
192
|
|
|
|
|
|
|
|
193
|
|
|
|
|
|
|
description: |
194
|
|
|
|
|
|
|
Variable names start with a dollar-sign ('$') followed by an |
195
|
|
|
|
|
|
|
identifier. The identifier must match the following regular |
196
|
|
|
|
|
|
|
expression '[a-zA-Z_][a-zA-Z0-9_]*', i.e., it must be at least |
197
|
|
|
|
|
|
|
one character long, must beginning with a letter or |
198
|
|
|
|
|
|
|
underscore, and may only containing letters, underscores, and |
199
|
|
|
|
|
|
|
digits. |
200
|
|
|
|
|
|
|
|
201
|
|
|
|
|
|
|
see also: Variables assign my local |
202
|
|
|
|
|
|
|
|
203
|
|
|
|
|
|
|
END |
204
|
|
|
|
|
|
|
|
205
|
|
|
|
|
|
|
|
206
|
|
|
|
|
|
|
$HELP{'subroutine'}=[<<'END']; |
207
|
|
|
|
|
|
|
sub-routine name |
208
|
|
|
|
|
|
|
|
209
|
|
|
|
|
|
|
description: |
210
|
|
|
|
|
|
|
A sub-routine name is an identifier matching the following |
211
|
|
|
|
|
|
|
regular expression '[a-zA-Z_][a-zA-Z0-9_]*', i.e., it must be |
212
|
|
|
|
|
|
|
at least one character long, must beginning with a letter or |
213
|
|
|
|
|
|
|
underscore, and may only containing letters, underscores, and |
214
|
|
|
|
|
|
|
digits. |
215
|
|
|
|
|
|
|
|
216
|
|
|
|
|
|
|
END |
217
|
|
|
|
|
|
|
|
218
|
|
|
|
|
|
|
|
219
|
|
|
|
|
|
|
$HELP{'document'}=[<<'END']; |
220
|
|
|
|
|
|
|
document |
221
|
|
|
|
|
|
|
|
222
|
|
|
|
|
|
|
description: |
223
|
|
|
|
|
|
|
A document is specified by arbitrary [expression] which |
224
|
|
|
|
|
|
|
evaluates to a non-empty node-list. From this node-list, the |
225
|
|
|
|
|
|
|
first node is taken and its owner document is used. |
226
|
|
|
|
|
|
|
|
227
|
|
|
|
|
|
|
see also: Variables assign my local |
228
|
|
|
|
|
|
|
|
229
|
|
|
|
|
|
|
END |
230
|
|
|
|
|
|
|
|
231
|
|
|
|
|
|
|
|
232
|
|
|
|
|
|
|
$HELP{'filename'}=[<<'END']; |
233
|
|
|
|
|
|
|
Filename argument type |
234
|
|
|
|
|
|
|
|
235
|
|
|
|
|
|
|
description: |
236
|
|
|
|
|
|
|
An [expression] which evaluates to a valid filename or URL. As |
237
|
|
|
|
|
|
|
long as the expression contains no whitespace, no brackets of |
238
|
|
|
|
|
|
|
any type, quotes, double-quotes, '$' character nor '@' |
239
|
|
|
|
|
|
|
character, it is treated as a literal token which evaluates to |
240
|
|
|
|
|
|
|
itself. |
241
|
|
|
|
|
|
|
|
242
|
|
|
|
|
|
|
END |
243
|
|
|
|
|
|
|
|
244
|
|
|
|
|
|
|
|
245
|
|
|
|
|
|
|
$HELP{'nodename'}=[<<'END']; |
246
|
|
|
|
|
|
|
Node-name argument type |
247
|
|
|
|
|
|
|
|
248
|
|
|
|
|
|
|
description: |
249
|
|
|
|
|
|
|
An [expression] which evaluates to a valid name of an element, |
250
|
|
|
|
|
|
|
attribute or processing-instruction node. As long as the |
251
|
|
|
|
|
|
|
expression contains no whitespace, no brackets of any type, |
252
|
|
|
|
|
|
|
quotes, double-quotes, '$' character, nor '@' character, it is |
253
|
|
|
|
|
|
|
treated as a literal token which evaluates to itself. |
254
|
|
|
|
|
|
|
|
255
|
|
|
|
|
|
|
END |
256
|
|
|
|
|
|
|
|
257
|
|
|
|
|
|
|
|
258
|
|
|
|
|
|
|
$HELP{'xpath'}=[<<'END']; |
259
|
|
|
|
|
|
|
XPath argument type |
260
|
|
|
|
|
|
|
|
261
|
|
|
|
|
|
|
description: |
262
|
|
|
|
|
|
|
XSH2 can evaluate XPath expressions as defined in W3C |
263
|
|
|
|
|
|
|
recommendation at http://www.w3.org/TR/xpath with only a |
264
|
|
|
|
|
|
|
little limitation on use of syntactically ignorable |
265
|
|
|
|
|
|
|
whitespace. (Nice interactive XPath tutorials and references |
266
|
|
|
|
|
|
|
can be found at http://www.zvon.org.) |
267
|
|
|
|
|
|
|
|
268
|
|
|
|
|
|
|
In order to allow XSH2 to use white-space as a command |
269
|
|
|
|
|
|
|
argument delimiter (which is far more convenient to type than, |
270
|
|
|
|
|
|
|
say, commas), the use of white-space in XPath is slightly |
271
|
|
|
|
|
|
|
restricted. Thus, in XSH2, white-space can only occur in those |
272
|
|
|
|
|
|
|
parts of an XPath expression, that are surrounded by either |
273
|
|
|
|
|
|
|
brackets, square brackets, single or double quotes. So, for |
274
|
|
|
|
|
|
|
example, otherwise valid XPath expression like |
275
|
|
|
|
|
|
|
|
276
|
|
|
|
|
|
|
/ foo / bar [ @baz = "bar" ] |
277
|
|
|
|
|
|
|
should in XSH2 be written as either of |
278
|
|
|
|
|
|
|
|
279
|
|
|
|
|
|
|
/foo/bar[ @baz = "bar" ] |
280
|
|
|
|
|
|
|
avoiding any white-space outside the square brackets, or |
281
|
|
|
|
|
|
|
completely enclosed in brackets as in |
282
|
|
|
|
|
|
|
|
283
|
|
|
|
|
|
|
( / foo / bar [ @baz = "bar" ] ). |
284
|
|
|
|
|
|
|
XSH2 provides a number of powerful XPath extension functions, |
285
|
|
|
|
|
|
|
listed below and described in separate sections. XPath |
286
|
|
|
|
|
|
|
extension functions by default belong to XSH2 namespace |
287
|
|
|
|
|
|
|
'http://xsh.sourceforge.net/xsh/' with a namespace prefix set |
288
|
|
|
|
|
|
|
to 'xsh'. A program may however call the [xpath-extensions] |
289
|
|
|
|
|
|
|
command to map XSH2 XPath extension functions into the default |
290
|
|
|
|
|
|
|
namespace, so that they may be used directly without any |
291
|
|
|
|
|
|
|
prefix. |
292
|
|
|
|
|
|
|
|
293
|
|
|
|
|
|
|
XPath extension functions defined in XSH2: xsh:base-uri, |
294
|
|
|
|
|
|
|
xsh:context, xsh:current, xsh:doc, xsh:document, |
295
|
|
|
|
|
|
|
xsh:document-uri, xsh:documents, xsh:evaluate, xsh:filename, |
296
|
|
|
|
|
|
|
xsh:grep, xsh:id2, xsh:if, xsh:join, xsh:lc, xsh:lcfirst, |
297
|
|
|
|
|
|
|
xsh:lineno, xsh:lookup, xsh:map, xsh:match, xsh:matches, |
298
|
|
|
|
|
|
|
xsh:max, xsh:min, xsh:new-attribute, xsh:new-cdata, |
299
|
|
|
|
|
|
|
xsh:new-chunk, xsh:new-comment, xsh:new-element, |
300
|
|
|
|
|
|
|
xsh:new-element-ns, xsh:new-pi, xsh:new-text, xsh:parse, |
301
|
|
|
|
|
|
|
xsh:path, xsh:resolve-uri, xsh:reverse, xsh:same, |
302
|
|
|
|
|
|
|
xsh:serialize, xsh:span, xsh:split, xsh:sprintf, xsh:strmax, |
303
|
|
|
|
|
|
|
xsh:strmin, xsh:subst, xsh:substr, xsh:sum, xsh:times, xsh:uc, |
304
|
|
|
|
|
|
|
xsh:ucfirst, xsh:var |
305
|
|
|
|
|
|
|
|
306
|
|
|
|
|
|
|
Example: Open a document and count all sections containing a subsection |
307
|
|
|
|
|
|
|
|
308
|
|
|
|
|
|
|
xsh $scratch/> $v := open mydocument1.xml; |
309
|
|
|
|
|
|
|
xsh $v/> $k := open mydocument2.xml; |
310
|
|
|
|
|
|
|
xsh $k/> count //section[subsection]; # searches k |
311
|
|
|
|
|
|
|
xsh $k/> count $v//section[subsection]; # searches v |
312
|
|
|
|
|
|
|
|
313
|
|
|
|
|
|
|
END |
314
|
|
|
|
|
|
|
|
315
|
|
|
|
|
|
|
|
316
|
|
|
|
|
|
|
$HELP{'expression'}=[<<'END']; |
317
|
|
|
|
|
|
|
expression |
318
|
|
|
|
|
|
|
|
319
|
|
|
|
|
|
|
description: |
320
|
|
|
|
|
|
|
An XSH2 expression can be one of the following constructs: |
321
|
|
|
|
|
|
|
|
322
|
|
|
|
|
|
|
1. XPath 1.0 expression with the following restriction: |
323
|
|
|
|
|
|
|
whitespace is only allowed within parts the expression |
324
|
|
|
|
|
|
|
enclosed in quotes (literal strings) or brackets (XPath has |
325
|
|
|
|
|
|
|
two types of brackets - plain and square). Thus, while '/ |
326
|
|
|
|
|
|
|
foo / bar' is a valid XPath expression matching element |
327
|
|
|
|
|
|
|
named bar under root element foo, in XSH2 this expression |
328
|
|
|
|
|
|
|
must be written as '/foo/bar' or '(/ foo / bar)' or |
329
|
|
|
|
|
|
|
'(/foo/bar)' etc. The reason for this restriction is simple: |
330
|
|
|
|
|
|
|
XSH2, like most shell languages, uses whitespace as argument |
331
|
|
|
|
|
|
|
delimiter so it must be able to determine expression |
332
|
|
|
|
|
|
|
boundaries (otherwise, '/ bar / foo' could be anything |
333
|
|
|
|
|
|
|
between one and four expressions). |
334
|
|
|
|
|
|
|
|
335
|
|
|
|
|
|
|
2. In certain contexts, usually when a filename or a node |
336
|
|
|
|
|
|
|
name is expected as an argument, bareword (otherwise XPath) |
337
|
|
|
|
|
|
|
expressions are evaluated in a non-standard way: as long as |
338
|
|
|
|
|
|
|
the expression contains no whitespace, no brackets of any |
339
|
|
|
|
|
|
|
kind, quotes, double-quotes, '$' character, nor '@' |
340
|
|
|
|
|
|
|
character, it is treated as a literal token which evaluates |
341
|
|
|
|
|
|
|
to itself. This usually happens if a file name or element |
342
|
|
|
|
|
|
|
name is expected, but some other commands, like [print], |
343
|
|
|
|
|
|
|
evaluate its arguments in this way. In order to force an |
344
|
|
|
|
|
|
|
XPath evaluation in such situations, the entire expression |
345
|
|
|
|
|
|
|
should be enclosed with brackets '(...)'. For example, with |
346
|
|
|
|
|
|
|
[open] command, 'open file' or 'open "file"' both open a |
347
|
|
|
|
|
|
|
file whose name is 'file' (literally) whereas 'open (file)' |
348
|
|
|
|
|
|
|
or 'open @file' compute the file name by evaluating '(file)' |
349
|
|
|
|
|
|
|
or '@file' respectively, as XPath expressions. |
350
|
|
|
|
|
|
|
|
351
|
|
|
|
|
|
|
3. Perl blocks. These are enclosed in braces like: '{ |
352
|
|
|
|
|
|
|
perl-code }'. Perl expressions can be used to evaluate more |
353
|
|
|
|
|
|
|
complicated things, like complex string expressions, regexp |
354
|
|
|
|
|
|
|
matches, perl commands, etc. In short, arbitrary perl. Of |
355
|
|
|
|
|
|
|
course, things like '{`ls`}' work too, and that's why we |
356
|
|
|
|
|
|
|
don't need to define shell-like backticks in XSH2 itself. |
357
|
|
|
|
|
|
|
|
358
|
|
|
|
|
|
|
4. Result of one XSH2 command can be directly passed as an |
359
|
|
|
|
|
|
|
argument to another. This is done using &{ xsh-code } |
360
|
|
|
|
|
|
|
expressions. Most XSH2 commands always return 'undef' or 1, |
361
|
|
|
|
|
|
|
but some do return a value, usually a node-list. Examples of |
362
|
|
|
|
|
|
|
such commands are [open], [copy], [move], [wrap], [edit], or |
363
|
|
|
|
|
|
|
[xslt]. |
364
|
|
|
|
|
|
|
|
365
|
|
|
|
|
|
|
5. Large blocks of literal data can be passed to commands |
366
|
|
|
|
|
|
|
via "here document" expressions '<
|
367
|
|
|
|
|
|
|
<<"EOF"'', where 'EOF' is an arbitrary 'ID' string. '<
|
368
|
|
|
|
|
|
|
and '<<"EOF"' are equivalent, and are subject to |
369
|
|
|
|
|
|
|
interpolation of '${...}' constructs, where as '<<'EOF'' |
370
|
|
|
|
|
|
|
does not. The result of evaluation of these three is the |
371
|
|
|
|
|
|
|
literal content (with '${...}' possibly interpolated) of the |
372
|
|
|
|
|
|
|
script starting at the following line and ending at a line |
373
|
|
|
|
|
|
|
containing just 'EOF'. '<<{EOF}' and '<<(EOF)' are |
374
|
|
|
|
|
|
|
implemented too, but I'm not sure they are of any use since |
375
|
|
|
|
|
|
|
putting the expression in ( ) or { } has the same effect. |
376
|
|
|
|
|
|
|
|
377
|
|
|
|
|
|
|
XPath expressions (and their filename variant) are subject to |
378
|
|
|
|
|
|
|
interpolation of substrings of the form '${...}' (called |
379
|
|
|
|
|
|
|
interpolators), where '...' can be of several different forms, |
380
|
|
|
|
|
|
|
described below. The interpolation can be suppressed by |
381
|
|
|
|
|
|
|
preceding the '$' sign with a backslash. |
382
|
|
|
|
|
|
|
|
383
|
|
|
|
|
|
|
Substrings of the form '${id}' or '${$id}' are interpolated |
384
|
|
|
|
|
|
|
with the value of the variable named '$id'. |
385
|
|
|
|
|
|
|
|
386
|
|
|
|
|
|
|
Interpolators of the form '${{' and '}}' evaluate their |
387
|
|
|
|
|
|
|
contents as a Perl expression (in very much the same way as |
388
|
|
|
|
|
|
|
the [perl] command) and interpolate to the resulting value. |
389
|
|
|
|
|
|
|
|
390
|
|
|
|
|
|
|
Interpolators of the form '${(' and ')}' evaluate their |
391
|
|
|
|
|
|
|
contents as an XPath expression and interpolates to a string |
392
|
|
|
|
|
|
|
value of the result. |
393
|
|
|
|
|
|
|
|
394
|
|
|
|
|
|
|
Substrings of the form '\${' interpolate to '${' (as a means |
395
|
|
|
|
|
|
|
for escaping '${...}' in an expression). |
396
|
|
|
|
|
|
|
|
397
|
|
|
|
|
|
|
Expressions are evaluated by XSH2 commands themselves, so the |
398
|
|
|
|
|
|
|
exact value an expression evaluates to, is also |
399
|
|
|
|
|
|
|
command-dependent. There are commands that can handle all data |
400
|
|
|
|
|
|
|
types, but some commands expect their arguments to evaluate |
401
|
|
|
|
|
|
|
only to specific kinds of values. As already mentioned above, |
402
|
|
|
|
|
|
|
commands expecting a filename or a node name usually evaluate |
403
|
|
|
|
|
|
|
simple expressions not containing any special characters as |
404
|
|
|
|
|
|
|
literal strings, whereas commands expecting strings evaluate |
405
|
|
|
|
|
|
|
all expressions so that they get a string value (e.g. by |
406
|
|
|
|
|
|
|
converting a node-set to its text content). Similarly, |
407
|
|
|
|
|
|
|
commands expecting a node-set usually convert strings to a |
408
|
|
|
|
|
|
|
small XML fragments, while commands expecting a single |
409
|
|
|
|
|
|
|
document node usually convert node-sets to a document node by |
410
|
|
|
|
|
|
|
taking the owner document of the first element in the |
411
|
|
|
|
|
|
|
node-set. |
412
|
|
|
|
|
|
|
|
413
|
|
|
|
|
|
|
Example: |
414
|
|
|
|
|
|
|
$a = "bar"; # $a contains: bar |
415
|
|
|
|
|
|
|
$b = $a; # $b contains: bar |
416
|
|
|
|
|
|
|
$b = "$a"; # $b contains: $a |
417
|
|
|
|
|
|
|
$b = "${a}"; # $b contains: bar |
418
|
|
|
|
|
|
|
$b = {$a}; # $b contains: bar |
419
|
|
|
|
|
|
|
$b = //creature; # $b contains a node-set |
420
|
|
|
|
|
|
|
ls $b; # prints the node-set as XML in document order |
421
|
|
|
|
|
|
|
count $b; # prints number of nodes in the node-set |
422
|
|
|
|
|
|
|
echo count($b); # the same |
423
|
|
|
|
|
|
|
$c = string($b[1]/@name) # $c contains string value of //creature[1]/@name (e.g. Bilbo) |
424
|
|
|
|
|
|
|
echo //creature # prints: //creature |
425
|
|
|
|
|
|
|
echo (//creature) # evaluates (//creature) as XPath and prints the |
426
|
|
|
|
|
|
|
# text content of the resulting node-set |
427
|
|
|
|
|
|
|
|
428
|
|
|
|
|
|
|
echo { join(",",split(//,$a)) } # prints: b,a,r |
429
|
|
|
|
|
|
|
echo ${{ join(",",split(//,$a)) }} # the same |
430
|
|
|
|
|
|
|
echo "${{ join(",",split(//,$a)) }}" # the same |
431
|
|
|
|
|
|
|
echo "${(//creature[1]/@name)}" # prints e.g.: Bilbo |
432
|
|
|
|
|
|
|
echo ${(//creature[1]/@name)} # the same |
433
|
|
|
|
|
|
|
echo //creature[1]/@name # the same |
434
|
|
|
|
|
|
|
echo string(//creature[1]/@name) # the same |
435
|
|
|
|
|
|
|
echo (//creature[1]/@name) # the same |
436
|
|
|
|
|
|
|
|
437
|
|
|
|
|
|
|
Example: In-line documents |
438
|
|
|
|
|
|
|
|
439
|
|
|
|
|
|
|
$a="bar" |
440
|
|
|
|
|
|
|
echo foo <
|
441
|
|
|
|
|
|
|
xx ${a} yy |
442
|
|
|
|
|
|
|
END |
443
|
|
|
|
|
|
|
# prints foo xx bar yy baz |
444
|
|
|
|
|
|
|
echo foo <<"END" baz; |
445
|
|
|
|
|
|
|
xx ${a} yy |
446
|
|
|
|
|
|
|
END |
447
|
|
|
|
|
|
|
# same as above |
448
|
|
|
|
|
|
|
echo foo <<'END' baz; |
449
|
|
|
|
|
|
|
xx ${a} yy |
450
|
|
|
|
|
|
|
END |
451
|
|
|
|
|
|
|
# prints foo xx $a yy baz |
452
|
|
|
|
|
|
|
|
453
|
|
|
|
|
|
|
Example: Expressions returning result of a XSH2 command |
454
|
|
|
|
|
|
|
|
455
|
|
|
|
|
|
|
copy &{ sort --key @best_score --numeric //player } into .; |
456
|
|
|
|
|
|
|
|
457
|
|
|
|
|
|
|
END |
458
|
|
|
|
|
|
|
|
459
|
|
|
|
|
|
|
|
460
|
|
|
|
|
|
|
$HELP{'try'}=[<<'END']; |
461
|
|
|
|
|
|
|
usage: try [block] catch [[local|my] [$variable]] [block] |
462
|
|
|
|
|
|
|
|
463
|
|
|
|
|
|
|
description: |
464
|
|
|
|
|
|
|
Execute the [block] following the 'try' keyword. If an error |
465
|
|
|
|
|
|
|
or exception occurs during the evaluation, execute the 'catch' |
466
|
|
|
|
|
|
|
[block]. If the 'catch' keyword is followed by a variable |
467
|
|
|
|
|
|
|
(possibly localized for the following block using [my] or |
468
|
|
|
|
|
|
|
[local]) and the 'try' block fails with an exception, the |
469
|
|
|
|
|
|
|
error message of the exception is stored to the variable |
470
|
|
|
|
|
|
|
before the 'catch' block is executed. |
471
|
|
|
|
|
|
|
|
472
|
|
|
|
|
|
|
The [throw] command as well as an equivalent Perl construction |
473
|
|
|
|
|
|
|
'perl { die "error message" }' allow user to throw custom |
474
|
|
|
|
|
|
|
exceptions. |
475
|
|
|
|
|
|
|
|
476
|
|
|
|
|
|
|
Unless exception is raised or error occurs, this command |
477
|
|
|
|
|
|
|
returns the return value of the 'try' block; otherwise it |
478
|
|
|
|
|
|
|
returns the return value of the 'catch' block. |
479
|
|
|
|
|
|
|
|
480
|
|
|
|
|
|
|
Example: Handle parse errors |
481
|
|
|
|
|
|
|
|
482
|
|
|
|
|
|
|
try { |
483
|
|
|
|
|
|
|
$doc:=open --format xml $input; |
484
|
|
|
|
|
|
|
} catch { |
485
|
|
|
|
|
|
|
try { |
486
|
|
|
|
|
|
|
echo "XML parser failed, trying HTML"; |
487
|
|
|
|
|
|
|
$doc := open --format html $input; |
488
|
|
|
|
|
|
|
} catch my $error { |
489
|
|
|
|
|
|
|
echo "Stopping due to errors: $error"; |
490
|
|
|
|
|
|
|
exit 1; |
491
|
|
|
|
|
|
|
} |
492
|
|
|
|
|
|
|
} |
493
|
|
|
|
|
|
|
|
494
|
|
|
|
|
|
|
see also: throw |
495
|
|
|
|
|
|
|
|
496
|
|
|
|
|
|
|
END |
497
|
|
|
|
|
|
|
|
498
|
|
|
|
|
|
|
|
499
|
|
|
|
|
|
|
$HELP{'if'}=[<<'END']; |
500
|
|
|
|
|
|
|
usage: if [expression] [command] |
501
|
|
|
|
|
|
|
if [expression] |
502
|
|
|
|
|
|
|
[block] [ elsif [block] ]* [ else [block] ] |
503
|
|
|
|
|
|
|
|
504
|
|
|
|
|
|
|
description: |
505
|
|
|
|
|
|
|
Executes [command] or [block] if a given [expression] |
506
|
|
|
|
|
|
|
expression evaluates to a non-emtpty node-list, true |
507
|
|
|
|
|
|
|
boolean-value, non-zero number or non-empty literal. If the |
508
|
|
|
|
|
|
|
first expression fails, then 'elsif' conditions are tested (if |
509
|
|
|
|
|
|
|
any) and the [block] corresponding to the first one of them |
510
|
|
|
|
|
|
|
which is true is executed. If none of the conditions is |
511
|
|
|
|
|
|
|
satisfied, an optional 'else' [block] is executed. |
512
|
|
|
|
|
|
|
|
513
|
|
|
|
|
|
|
Example: Display node type |
514
|
|
|
|
|
|
|
|
515
|
|
|
|
|
|
|
def node_type %n { |
516
|
|
|
|
|
|
|
foreach (%n) { |
517
|
|
|
|
|
|
|
if ( . = self::* ) { # XPath trick to check if . is an element |
518
|
|
|
|
|
|
|
echo 'element'; |
519
|
|
|
|
|
|
|
} elsif ( . = ../@* ) { # XPath trick to check if . is an attribute |
520
|
|
|
|
|
|
|
echo 'attribute'; |
521
|
|
|
|
|
|
|
} elsif ( . = ../processing-instruction() ) { |
522
|
|
|
|
|
|
|
echo 'pi'; |
523
|
|
|
|
|
|
|
} elsif ( . = ../text() ) { |
524
|
|
|
|
|
|
|
echo 'text'; |
525
|
|
|
|
|
|
|
} elsif ( . = ../comment() ) { |
526
|
|
|
|
|
|
|
echo 'comment' |
527
|
|
|
|
|
|
|
} else { # well, this should not happen, but anyway, ... |
528
|
|
|
|
|
|
|
echo 'unknown-type'; |
529
|
|
|
|
|
|
|
} |
530
|
|
|
|
|
|
|
} |
531
|
|
|
|
|
|
|
} |
532
|
|
|
|
|
|
|
|
533
|
|
|
|
|
|
|
Example: Check a environment variable |
534
|
|
|
|
|
|
|
|
535
|
|
|
|
|
|
|
if { defined($ENV{HOME}) } lcd { $ENV{HOME} } |
536
|
|
|
|
|
|
|
|
537
|
|
|
|
|
|
|
END |
538
|
|
|
|
|
|
|
|
539
|
|
|
|
|
|
|
|
540
|
|
|
|
|
|
|
$HELP{'unless'}=[<<'END']; |
541
|
|
|
|
|
|
|
usage: unless [expression] |
542
|
|
|
|
|
|
|
[command] |
543
|
|
|
|
|
|
|
unless [expression] |
544
|
|
|
|
|
|
|
[block] [ else [block] ] |
545
|
|
|
|
|
|
|
|
546
|
|
|
|
|
|
|
description: |
547
|
|
|
|
|
|
|
Like if but negating the result of the expression. Also, |
548
|
|
|
|
|
|
|
unlike if, 'unless' has no 'elsif' block. |
549
|
|
|
|
|
|
|
|
550
|
|
|
|
|
|
|
see also: if |
551
|
|
|
|
|
|
|
|
552
|
|
|
|
|
|
|
END |
553
|
|
|
|
|
|
|
|
554
|
|
|
|
|
|
|
|
555
|
|
|
|
|
|
|
$HELP{'while'}=[<<'END']; |
556
|
|
|
|
|
|
|
usage: while [expression] [block] |
557
|
|
|
|
|
|
|
|
558
|
|
|
|
|
|
|
description: |
559
|
|
|
|
|
|
|
Execute the [command] or [block] as long as the given |
560
|
|
|
|
|
|
|
[expression] evaluates to a non-emtpty node-list, true |
561
|
|
|
|
|
|
|
boolean-value, non-zero number or non-empty literal. |
562
|
|
|
|
|
|
|
|
563
|
|
|
|
|
|
|
Example: The commands in this example do the same thing |
564
|
|
|
|
|
|
|
|
565
|
|
|
|
|
|
|
xsh> while /table/row remove /table/row[1]; |
566
|
|
|
|
|
|
|
xsh> remove /table/row; |
567
|
|
|
|
|
|
|
|
568
|
|
|
|
|
|
|
END |
569
|
|
|
|
|
|
|
|
570
|
|
|
|
|
|
|
|
571
|
|
|
|
|
|
|
$HELP{'do'}=[<<'END']; |
572
|
|
|
|
|
|
|
usage: do [block] |
573
|
|
|
|
|
|
|
|
574
|
|
|
|
|
|
|
description: |
575
|
|
|
|
|
|
|
Execute [block]. This command is probably only useful when one |
576
|
|
|
|
|
|
|
wants to redirect output of more than one command. |
577
|
|
|
|
|
|
|
|
578
|
|
|
|
|
|
|
see also: block |
579
|
|
|
|
|
|
|
|
580
|
|
|
|
|
|
|
END |
581
|
|
|
|
|
|
|
|
582
|
|
|
|
|
|
|
|
583
|
|
|
|
|
|
|
$HELP{'eval'}=[<<'END']; |
584
|
|
|
|
|
|
|
usage: eval [expression] |
585
|
|
|
|
|
|
|
|
586
|
|
|
|
|
|
|
description: |
587
|
|
|
|
|
|
|
NOTE: This command has very different behavior from XSH1, |
588
|
|
|
|
|
|
|
where it used to be an alias for [perl]. |
589
|
|
|
|
|
|
|
|
590
|
|
|
|
|
|
|
This command first evaluates a given [expression] to obtain a |
591
|
|
|
|
|
|
|
string, then evaluates this string as XSH2 code in the current |
592
|
|
|
|
|
|
|
context, returning the return value of the last evaluated |
593
|
|
|
|
|
|
|
command. This command raises an exception if either |
594
|
|
|
|
|
|
|
[expression] evaluates to invalid XSH2 code or if evaluating |
595
|
|
|
|
|
|
|
the code raises an exception. |
596
|
|
|
|
|
|
|
|
597
|
|
|
|
|
|
|
Example: Evaluate "in-line" XSH snippets within a XML document |
598
|
|
|
|
|
|
|
|
599
|
|
|
|
|
|
|
foreach //inline-xsh eval .; |
600
|
|
|
|
|
|
|
|
601
|
|
|
|
|
|
|
END |
602
|
|
|
|
|
|
|
|
603
|
|
|
|
|
|
|
|
604
|
|
|
|
|
|
|
$HELP{'foreach'}=[<<'END']; |
605
|
|
|
|
|
|
|
usage: foreach [expression] |
606
|
|
|
|
|
|
|
[command]|[block] |
607
|
|
|
|
|
|
|
foreach [my|local] [$variable] in [expression] |
608
|
|
|
|
|
|
|
[command]|[block] |
609
|
|
|
|
|
|
|
|
610
|
|
|
|
|
|
|
aliases: for |
611
|
|
|
|
|
|
|
|
612
|
|
|
|
|
|
|
description: |
613
|
|
|
|
|
|
|
Evaluate given [expression] to a node-list and for each |
614
|
|
|
|
|
|
|
resulting node execute given [command] or [block]. If used |
615
|
|
|
|
|
|
|
without a loop [$variable], the loop temporarily sets current |
616
|
|
|
|
|
|
|
node to the node being processed. Otherwise, the processed |
617
|
|
|
|
|
|
|
node is assigned to the loop variable. |
618
|
|
|
|
|
|
|
|
619
|
|
|
|
|
|
|
The [expression] may be [xpath] as well as a [perl-code]. In |
620
|
|
|
|
|
|
|
the latter case, if used without a loop variable, the loop |
621
|
|
|
|
|
|
|
automatically converts Perl objects to nodes. No conversion is |
622
|
|
|
|
|
|
|
performed when a loop variable is used. |
623
|
|
|
|
|
|
|
|
624
|
|
|
|
|
|
|
Example: Move all employee sub-elements in a company element into the |
625
|
|
|
|
|
|
|
first staff subelement of the same company |
626
|
|
|
|
|
|
|
|
627
|
|
|
|
|
|
|
xsh> foreach //company xmove employee into staff[1]; |
628
|
|
|
|
|
|
|
|
629
|
|
|
|
|
|
|
Example: List content of all XML files in current directory |
630
|
|
|
|
|
|
|
|
631
|
|
|
|
|
|
|
xsh> foreach my $filename in { glob('*.xml') } { |
632
|
|
|
|
|
|
|
$f := open $filename; |
633
|
|
|
|
|
|
|
do_something $f; |
634
|
|
|
|
|
|
|
} |
635
|
|
|
|
|
|
|
|
636
|
|
|
|
|
|
|
END |
637
|
|
|
|
|
|
|
|
638
|
|
|
|
|
|
|
$HELP{'for'}=$HELP{'foreach'}; |
639
|
|
|
|
|
|
|
|
640
|
|
|
|
|
|
|
$HELP{'undef'}=[<<'END']; |
641
|
|
|
|
|
|
|
usage: undef [[subroutine] | [$variable]] |
642
|
|
|
|
|
|
|
|
643
|
|
|
|
|
|
|
aliases: undefine |
644
|
|
|
|
|
|
|
|
645
|
|
|
|
|
|
|
description: |
646
|
|
|
|
|
|
|
This command can be used to undefine previously defined XSH2 |
647
|
|
|
|
|
|
|
subroutines and variables. |
648
|
|
|
|
|
|
|
|
649
|
|
|
|
|
|
|
see also: close def |
650
|
|
|
|
|
|
|
|
651
|
|
|
|
|
|
|
END |
652
|
|
|
|
|
|
|
|
653
|
|
|
|
|
|
|
$HELP{'undefine'}=$HELP{'undef'}; |
654
|
|
|
|
|
|
|
|
655
|
|
|
|
|
|
|
$HELP{'def'}=[<<'END']; |
656
|
|
|
|
|
|
|
usage: def [subroutine] [[$variable] ...] [block] |
657
|
|
|
|
|
|
|
|
658
|
|
|
|
|
|
|
aliases: define |
659
|
|
|
|
|
|
|
|
660
|
|
|
|
|
|
|
description: |
661
|
|
|
|
|
|
|
Define a new XSH2 sub-routine named [subroutine]. The |
662
|
|
|
|
|
|
|
subroutine may require zero or more parameters. These are |
663
|
|
|
|
|
|
|
declared as a whitespace-separated list of parametric |
664
|
|
|
|
|
|
|
variables. The body of the subroutine is specified as a |
665
|
|
|
|
|
|
|
[block]. |
666
|
|
|
|
|
|
|
|
667
|
|
|
|
|
|
|
A sub-routine can be invoked directly by its name followed by |
668
|
|
|
|
|
|
|
its arguments just as any XSH2 command, or indirectly using |
669
|
|
|
|
|
|
|
the [call] command followed by an expression evaluating to the |
670
|
|
|
|
|
|
|
routine name and sub-routine arguments. Sub-routine arguments |
671
|
|
|
|
|
|
|
can be arbitrary expressions. These expressions are evaluated |
672
|
|
|
|
|
|
|
prior the sub-routine's code execution and are assigned to the |
673
|
|
|
|
|
|
|
sub-routine's parametric variables in the respective order. |
674
|
|
|
|
|
|
|
The number of parameter variables in a sub-routine definition |
675
|
|
|
|
|
|
|
and the number of arguments in a call to it must match. |
676
|
|
|
|
|
|
|
Calling a sub-routine with less or more arguments than |
677
|
|
|
|
|
|
|
declared is a run-time error. |
678
|
|
|
|
|
|
|
|
679
|
|
|
|
|
|
|
Parametric variables are lexical variables within the |
680
|
|
|
|
|
|
|
sub-routine body as if they were declared with [my]. |
681
|
|
|
|
|
|
|
|
682
|
|
|
|
|
|
|
Note that a subroutine has to be defined before it is first |
683
|
|
|
|
|
|
|
called (in terms of execution -- depending on the structure of |
684
|
|
|
|
|
|
|
the program, the actual definition of the sub-routine must not |
685
|
|
|
|
|
|
|
necessarily precede all references to it). |
686
|
|
|
|
|
|
|
|
687
|
|
|
|
|
|
|
Example: |
688
|
|
|
|
|
|
|
def l3 $nodes { |
689
|
|
|
|
|
|
|
ls --depth 3 $nodes; # list given nodes upto depth 3 |
690
|
|
|
|
|
|
|
} |
691
|
|
|
|
|
|
|
l3 //chapter; # direct call |
692
|
|
|
|
|
|
|
$subref = 'l3'; |
693
|
|
|
|
|
|
|
call $subref //chapter; # in-direct call |
694
|
|
|
|
|
|
|
|
695
|
|
|
|
|
|
|
Example: Commenting and un-commenting pieces of document |
696
|
|
|
|
|
|
|
|
697
|
|
|
|
|
|
|
def comment |
698
|
|
|
|
|
|
|
$n # nodes to move to comments |
699
|
|
|
|
|
|
|
$mark # maybe some handy mark to recognize such comments |
700
|
|
|
|
|
|
|
{ |
701
|
|
|
|
|
|
|
foreach $n { |
702
|
|
|
|
|
|
|
if ( . = ../@* ) { |
703
|
|
|
|
|
|
|
echo "Warning: attribute nodes are not supported!"; |
704
|
|
|
|
|
|
|
} else { |
705
|
|
|
|
|
|
|
echo "Commenting out:"; |
706
|
|
|
|
|
|
|
ls --depth 0 .; |
707
|
|
|
|
|
|
|
add comment concat($mark,xsh:serialize(.)) replace .; |
708
|
|
|
|
|
|
|
} |
709
|
|
|
|
|
|
|
} |
710
|
|
|
|
|
|
|
} |
711
|
|
|
|
|
|
|
|
712
|
|
|
|
|
|
|
def uncomment $n $mark { |
713
|
|
|
|
|
|
|
foreach $n { |
714
|
|
|
|
|
|
|
if (. = ../comment()) { # is this node a comment node |
715
|
|
|
|
|
|
|
local $string = substring-after(.,"$mark"); |
716
|
|
|
|
|
|
|
add chunk $string replace .; |
717
|
|
|
|
|
|
|
} else { |
718
|
|
|
|
|
|
|
echo "Warning: Ignoring non-comment node:"; |
719
|
|
|
|
|
|
|
ls --depth 0 .; |
720
|
|
|
|
|
|
|
} |
721
|
|
|
|
|
|
|
} |
722
|
|
|
|
|
|
|
} |
723
|
|
|
|
|
|
|
|
724
|
|
|
|
|
|
|
# comment out all chapters with no paragraphs |
725
|
|
|
|
|
|
|
comment //chapter[not(para)] "COMMENT-NOPARA"; |
726
|
|
|
|
|
|
|
|
727
|
|
|
|
|
|
|
# uncomment all comments stamped with COMMENT-NOPARA |
728
|
|
|
|
|
|
|
$mark="COMMENT-NOPARA"; |
729
|
|
|
|
|
|
|
uncomment //comment()[starts-with(.,"$mark")] $mark; |
730
|
|
|
|
|
|
|
|
731
|
|
|
|
|
|
|
see also: call return my local |
732
|
|
|
|
|
|
|
|
733
|
|
|
|
|
|
|
END |
734
|
|
|
|
|
|
|
|
735
|
|
|
|
|
|
|
$HELP{'define'}=$HELP{'def'}; |
736
|
|
|
|
|
|
|
|
737
|
|
|
|
|
|
|
$HELP{'assign'}=[<<'END']; |
738
|
|
|
|
|
|
|
usage: [assign] [$variable] = [expression] |
739
|
|
|
|
|
|
|
[assign] [$variable] := [command] |
740
|
|
|
|
|
|
|
[assign] [$variable] [-= | += | *= | /= | %= | x= | .= | ||= | &&= ] [expression] |
741
|
|
|
|
|
|
|
[assign] [$variable] [-:= | +:= | *:= | /:= | %:= | x:= | .:= | ||:= | &&:= ] [command] |
742
|
|
|
|
|
|
|
|
743
|
|
|
|
|
|
|
description: |
744
|
|
|
|
|
|
|
Evaluate the expression (= assignment) or command (:= |
745
|
|
|
|
|
|
|
assignment) on the right side of the assignment and store the |
746
|
|
|
|
|
|
|
result in a given variable. Optionally a Perl operator (- |
747
|
|
|
|
|
|
|
subtraction, + addition, * multiplication, / division, % |
748
|
|
|
|
|
|
|
modulo, x repeat string n-times, . concatenation, || logical |
749
|
|
|
|
|
|
|
OR, && logical AND) can precede the assignment, in which case |
750
|
|
|
|
|
|
|
the variable is assigned the result of applying given operator |
751
|
|
|
|
|
|
|
on its previous value and the value of the right side of the |
752
|
|
|
|
|
|
|
assignment. |
753
|
|
|
|
|
|
|
|
754
|
|
|
|
|
|
|
Example: Assign XPath (node-set, string), or Perl results |
755
|
|
|
|
|
|
|
|
756
|
|
|
|
|
|
|
xsh> $a=chapter/title; |
757
|
|
|
|
|
|
|
xsh> $b="hallo world"; |
758
|
|
|
|
|
|
|
xsh> $c={ `uname` }; |
759
|
|
|
|
|
|
|
xsh> ls $a; |
760
|
|
|
|
|
|
|
|
761
|
|
|
|
|
|
|
Example: Arithmetic expressions (XPath) |
762
|
|
|
|
|
|
|
|
763
|
|
|
|
|
|
|
xsh> $a=5*100 # assign 500 to $a |
764
|
|
|
|
|
|
|
xsh> $a += 20 # add 20 to $a |
765
|
|
|
|
|
|
|
xsh> $a = (($a+5) div 10) |
766
|
|
|
|
|
|
|
|
767
|
|
|
|
|
|
|
Example: Arithmetic expressions (Perl) |
768
|
|
|
|
|
|
|
|
769
|
|
|
|
|
|
|
xsh> $a={ 5*100 } |
770
|
|
|
|
|
|
|
xsh> $a = { join ';', split //,"hallo" } # assigns "h;a;l;l;o" to $a |
771
|
|
|
|
|
|
|
|
772
|
|
|
|
|
|
|
Example: Command result assignment |
773
|
|
|
|
|
|
|
|
774
|
|
|
|
|
|
|
xsh> $doc := open "file.xml" # open a document |
775
|
|
|
|
|
|
|
xsh> $copies := xcopy //foo into //bar # copy elements and store the copies |
776
|
|
|
|
|
|
|
xsh> $wrappers := wrap "wrapper" $copies # wrap each node from $copies to a new element "wrapper" and store the wrapping elements |
777
|
|
|
|
|
|
|
|
778
|
|
|
|
|
|
|
see also: variables |
779
|
|
|
|
|
|
|
|
780
|
|
|
|
|
|
|
END |
781
|
|
|
|
|
|
|
|
782
|
|
|
|
|
|
|
|
783
|
|
|
|
|
|
|
$HELP{'my'}=[<<'END']; |
784
|
|
|
|
|
|
|
usage: my [$variable] [$var2 ...]; |
785
|
|
|
|
|
|
|
my [$variable] = [expression]; |
786
|
|
|
|
|
|
|
|
787
|
|
|
|
|
|
|
description: |
788
|
|
|
|
|
|
|
Same as in Perl: a "my" declares the listed variables to be |
789
|
|
|
|
|
|
|
local (lexically) to the enclosing block, or sub-routine. |
790
|
|
|
|
|
|
|
|
791
|
|
|
|
|
|
|
see also: local |
792
|
|
|
|
|
|
|
|
793
|
|
|
|
|
|
|
END |
794
|
|
|
|
|
|
|
|
795
|
|
|
|
|
|
|
|
796
|
|
|
|
|
|
|
$HELP{'local'}=[<<'END']; |
797
|
|
|
|
|
|
|
usage: local [$variable] = [xpath] |
798
|
|
|
|
|
|
|
local [$variable] [ [$variable] ... ] |
799
|
|
|
|
|
|
|
|
800
|
|
|
|
|
|
|
description: |
801
|
|
|
|
|
|
|
This command acts in a very similar way as [assign] does, |
802
|
|
|
|
|
|
|
except that the variable assignment is done temporarily and |
803
|
|
|
|
|
|
|
lasts only for the rest of its enclosing [block] or |
804
|
|
|
|
|
|
|
subroutine. At the end of the enclosing block or subroutine, |
805
|
|
|
|
|
|
|
the original value is restored. This also reverts any later |
806
|
|
|
|
|
|
|
usual assignments to the variable done occurring before the |
807
|
|
|
|
|
|
|
end of the block. This command may also be used without the |
808
|
|
|
|
|
|
|
assignment part. |
809
|
|
|
|
|
|
|
|
810
|
|
|
|
|
|
|
Note, that the variable itself remains global in the sense |
811
|
|
|
|
|
|
|
that it is still visible to any subroutine called subsequently |
812
|
|
|
|
|
|
|
from the same block. Unlike [my] declaration, it does not |
813
|
|
|
|
|
|
|
create a new lexically scoped variable. |
814
|
|
|
|
|
|
|
|
815
|
|
|
|
|
|
|
Hint for Perl programmers: 'local' in XSH2 works exactly as |
816
|
|
|
|
|
|
|
'local' in Perl. |
817
|
|
|
|
|
|
|
|
818
|
|
|
|
|
|
|
see also: assign my def |
819
|
|
|
|
|
|
|
|
820
|
|
|
|
|
|
|
END |
821
|
|
|
|
|
|
|
|
822
|
|
|
|
|
|
|
|
823
|
|
|
|
|
|
|
$HELP{'settings'}=[<<'END']; |
824
|
|
|
|
|
|
|
usage: settings |
825
|
|
|
|
|
|
|
|
826
|
|
|
|
|
|
|
description: |
827
|
|
|
|
|
|
|
List current values of all XSH2 settings (such as validation |
828
|
|
|
|
|
|
|
flag or query-encoding). |
829
|
|
|
|
|
|
|
|
830
|
|
|
|
|
|
|
'--variables' or ':v' flag enforces syntax which makes use of |
831
|
|
|
|
|
|
|
variable assignments. Otherwise, settings are listed in the |
832
|
|
|
|
|
|
|
form of XSH commands. |
833
|
|
|
|
|
|
|
|
834
|
|
|
|
|
|
|
Example: Store current settings in your .xsh2rc |
835
|
|
|
|
|
|
|
|
836
|
|
|
|
|
|
|
xsh> settings | cat > ~/.xsh2rc |
837
|
|
|
|
|
|
|
|
838
|
|
|
|
|
|
|
END |
839
|
|
|
|
|
|
|
|
840
|
|
|
|
|
|
|
|
841
|
|
|
|
|
|
|
$HELP{'defs'}=[<<'END']; |
842
|
|
|
|
|
|
|
usage: defs |
843
|
|
|
|
|
|
|
|
844
|
|
|
|
|
|
|
description: |
845
|
|
|
|
|
|
|
List names and parametric variables for all user-defined XSH2 |
846
|
|
|
|
|
|
|
subroutines. |
847
|
|
|
|
|
|
|
|
848
|
|
|
|
|
|
|
see also: def variables |
849
|
|
|
|
|
|
|
|
850
|
|
|
|
|
|
|
END |
851
|
|
|
|
|
|
|
|
852
|
|
|
|
|
|
|
|
853
|
|
|
|
|
|
|
$HELP{'ifinclude'}=[<<'END']; |
854
|
|
|
|
|
|
|
usage: ifinclude [--encoding|:e [encoding]] [filename] |
855
|
|
|
|
|
|
|
|
856
|
|
|
|
|
|
|
description: |
857
|
|
|
|
|
|
|
Unless the file [filename] has already been included using |
858
|
|
|
|
|
|
|
either [include] of [ifinclude], load the file and execute it |
859
|
|
|
|
|
|
|
as a XSH2 script. |
860
|
|
|
|
|
|
|
|
861
|
|
|
|
|
|
|
Use '--encoding' or ':e' parameter to specify character |
862
|
|
|
|
|
|
|
encoding used in the included file. |
863
|
|
|
|
|
|
|
|
864
|
|
|
|
|
|
|
see also: include |
865
|
|
|
|
|
|
|
|
866
|
|
|
|
|
|
|
END |
867
|
|
|
|
|
|
|
|
868
|
|
|
|
|
|
|
|
869
|
|
|
|
|
|
|
$HELP{'include'}=[<<'END']; |
870
|
|
|
|
|
|
|
usage: include [--encoding|:e [encoding]] [filename] |
871
|
|
|
|
|
|
|
|
872
|
|
|
|
|
|
|
aliases: . |
873
|
|
|
|
|
|
|
|
874
|
|
|
|
|
|
|
description: |
875
|
|
|
|
|
|
|
Load a file named [filename] and execute it as a XSH2 script. |
876
|
|
|
|
|
|
|
|
877
|
|
|
|
|
|
|
Use '--encoding' or ':e' parameter to specify character |
878
|
|
|
|
|
|
|
encoding used in the included file. |
879
|
|
|
|
|
|
|
|
880
|
|
|
|
|
|
|
see also: ifinclude |
881
|
|
|
|
|
|
|
|
882
|
|
|
|
|
|
|
END |
883
|
|
|
|
|
|
|
|
884
|
|
|
|
|
|
|
$HELP{'.'}=$HELP{'include'}; |
885
|
|
|
|
|
|
|
|
886
|
|
|
|
|
|
|
$HELP{'apropos'}=[<<'END']; |
887
|
|
|
|
|
|
|
usage: apropos [--fulltext] [--regexp] [expression] |
888
|
|
|
|
|
|
|
|
889
|
|
|
|
|
|
|
description: |
890
|
|
|
|
|
|
|
Print all help topics containing given expression in their |
891
|
|
|
|
|
|
|
short description. The '--fulltext' flag forces the search to |
892
|
|
|
|
|
|
|
be performed over the full text of help. '--regexp' indicates, |
893
|
|
|
|
|
|
|
that the given [expression] is a regular expression instead of |
894
|
|
|
|
|
|
|
a literal string. |
895
|
|
|
|
|
|
|
|
896
|
|
|
|
|
|
|
END |
897
|
|
|
|
|
|
|
|
898
|
|
|
|
|
|
|
|
899
|
|
|
|
|
|
|
$HELP{'help'}=[<<'END']; |
900
|
|
|
|
|
|
|
usage: help [command]|argument-type|xsh:xpath-function |
901
|
|
|
|
|
|
|
|
902
|
|
|
|
|
|
|
description: |
903
|
|
|
|
|
|
|
Print help on a given command, argument type or XPath |
904
|
|
|
|
|
|
|
extension function (use 'xsh:' as a prefix to XPath extensions |
905
|
|
|
|
|
|
|
function names, e.g 'help xsh:id2'). |
906
|
|
|
|
|
|
|
|
907
|
|
|
|
|
|
|
END |
908
|
|
|
|
|
|
|
|
909
|
|
|
|
|
|
|
|
910
|
|
|
|
|
|
|
$HELP{'exec'}=[<<'END']; |
911
|
|
|
|
|
|
|
usage: exec [expression] [[expression] ...] |
912
|
|
|
|
|
|
|
|
913
|
|
|
|
|
|
|
aliases: system |
914
|
|
|
|
|
|
|
|
915
|
|
|
|
|
|
|
description: |
916
|
|
|
|
|
|
|
This command executes given [expression](s) as a system |
917
|
|
|
|
|
|
|
command and returns the exit code. |
918
|
|
|
|
|
|
|
|
919
|
|
|
|
|
|
|
Example: Count words in "hallo wold" string, then print name of your |
920
|
|
|
|
|
|
|
machine's operating system. |
921
|
|
|
|
|
|
|
|
922
|
|
|
|
|
|
|
exec echo hallo world; # prints hallo world |
923
|
|
|
|
|
|
|
exec "echo hallo word" | wc; # counts words in hallo world |
924
|
|
|
|
|
|
|
exec uname; # prints operating system name |
925
|
|
|
|
|
|
|
|
926
|
|
|
|
|
|
|
END |
927
|
|
|
|
|
|
|
|
928
|
|
|
|
|
|
|
$HELP{'system'}=$HELP{'exec'}; |
929
|
|
|
|
|
|
|
|
930
|
|
|
|
|
|
|
$HELP{'xslt'}=[<<'END']; |
931
|
|
|
|
|
|
|
usage: $result := xslt [--doc|:d | --precompiled|:p] [--string] [expression] [[document] name=[xpath] [name=[xpath] ...]] |
932
|
|
|
|
|
|
|
$pre_compiled := xslt [--compile|:c] [expression] |
933
|
|
|
|
|
|
|
|
934
|
|
|
|
|
|
|
aliases: transform xsl xsltproc process |
935
|
|
|
|
|
|
|
|
936
|
|
|
|
|
|
|
description: |
937
|
|
|
|
|
|
|
This function compiles a given XSLT stylesheet and/or |
938
|
|
|
|
|
|
|
transforms a given document with XSLT. |
939
|
|
|
|
|
|
|
|
940
|
|
|
|
|
|
|
A XSLT stylesheet is specified in the first argument either as |
941
|
|
|
|
|
|
|
a file name (default), or as a document ('--doc' or ':d'), or |
942
|
|
|
|
|
|
|
as a precompiled XSLT stylesheet object ('--precompiled' or |
943
|
|
|
|
|
|
|
':p' - see '--compile' above). |
944
|
|
|
|
|
|
|
|
945
|
|
|
|
|
|
|
If '--compile' or ':c' is used, compile a given XSLT |
946
|
|
|
|
|
|
|
stylesheet and return a compiled XSLT stylesheet object. This |
947
|
|
|
|
|
|
|
object can be later passed as a XSLT stylesheet to 'xslt |
948
|
|
|
|
|
|
|
--precompiled'. |
949
|
|
|
|
|
|
|
|
950
|
|
|
|
|
|
|
Without '--compile' or ':c', transform a given [document] (or |
951
|
|
|
|
|
|
|
- if used with only the stylesheet argument - the current |
952
|
|
|
|
|
|
|
document) using a given XSLT stylesheet and return the result. |
953
|
|
|
|
|
|
|
|
954
|
|
|
|
|
|
|
All arguments following the second (document) argument are |
955
|
|
|
|
|
|
|
considered to be stylesheet parameters and (after expanding |
956
|
|
|
|
|
|
|
'${...}' interpolators) are directly passed to the XSLT engine |
957
|
|
|
|
|
|
|
without being evaluated by XSH2. All stylesheet parameters |
958
|
|
|
|
|
|
|
should be of the form 'name=[xpath]' (possibly in brackets). |
959
|
|
|
|
|
|
|
|
960
|
|
|
|
|
|
|
Example: Process current document with XSLT |
961
|
|
|
|
|
|
|
|
962
|
|
|
|
|
|
|
$result := xslt stylesheet.xsl . font='14pt' color='red' |
963
|
|
|
|
|
|
|
|
964
|
|
|
|
|
|
|
Example: Same for several documents, reusing the XSLT stylesheet |
965
|
|
|
|
|
|
|
|
966
|
|
|
|
|
|
|
$xslt := xslt --compile stylesheet.xsl; |
967
|
|
|
|
|
|
|
foreach my $file in {qw(f1.xml f2.xml f3.xml)} { |
968
|
|
|
|
|
|
|
save --file {"out_$file"} &{xslt --precompiled $xslt &{ open $file } font='14pt' color='red'}; |
969
|
|
|
|
|
|
|
} |
970
|
|
|
|
|
|
|
|
971
|
|
|
|
|
|
|
END |
972
|
|
|
|
|
|
|
|
973
|
|
|
|
|
|
|
$HELP{'transform'}=$HELP{'xslt'}; |
974
|
|
|
|
|
|
|
$HELP{'xsl'}=$HELP{'xslt'}; |
975
|
|
|
|
|
|
|
$HELP{'xsltproc'}=$HELP{'xslt'}; |
976
|
|
|
|
|
|
|
$HELP{'process'}=$HELP{'xslt'}; |
977
|
|
|
|
|
|
|
|
978
|
|
|
|
|
|
|
$HELP{'documents'}=[<<'END']; |
979
|
|
|
|
|
|
|
usage: documents |
980
|
|
|
|
|
|
|
|
981
|
|
|
|
|
|
|
aliases: files docs |
982
|
|
|
|
|
|
|
|
983
|
|
|
|
|
|
|
description: |
984
|
|
|
|
|
|
|
Try to identify open documents and list their URIs and |
985
|
|
|
|
|
|
|
variables that contain them. |
986
|
|
|
|
|
|
|
|
987
|
|
|
|
|
|
|
see also: open close |
988
|
|
|
|
|
|
|
|
989
|
|
|
|
|
|
|
END |
990
|
|
|
|
|
|
|
|
991
|
|
|
|
|
|
|
$HELP{'files'}=$HELP{'documents'}; |
992
|
|
|
|
|
|
|
$HELP{'docs'}=$HELP{'documents'}; |
993
|
|
|
|
|
|
|
|
994
|
|
|
|
|
|
|
$HELP{'set_filename'}=[<<'END']; |
995
|
|
|
|
|
|
|
usage: set_filename [expression] [[document]] |
996
|
|
|
|
|
|
|
|
997
|
|
|
|
|
|
|
description: |
998
|
|
|
|
|
|
|
Changes filename or URL associated with a given document (or |
999
|
|
|
|
|
|
|
the current document, if only one argument is specified). |
1000
|
|
|
|
|
|
|
Document filename is initialized by the [open] command and |
1001
|
|
|
|
|
|
|
used e.g. by [save]. It can be queried in XPath expressions |
1002
|
|
|
|
|
|
|
using the [xsh:filename] function. |
1003
|
|
|
|
|
|
|
|
1004
|
|
|
|
|
|
|
see also: open save xsh:filename |
1005
|
|
|
|
|
|
|
|
1006
|
|
|
|
|
|
|
END |
1007
|
|
|
|
|
|
|
|
1008
|
|
|
|
|
|
|
|
1009
|
|
|
|
|
|
|
$HELP{'variables'}=[<<'END']; |
1010
|
|
|
|
|
|
|
usage: variables |
1011
|
|
|
|
|
|
|
|
1012
|
|
|
|
|
|
|
aliases: vars var |
1013
|
|
|
|
|
|
|
|
1014
|
|
|
|
|
|
|
description: |
1015
|
|
|
|
|
|
|
List all global variables and their current values. |
1016
|
|
|
|
|
|
|
|
1017
|
|
|
|
|
|
|
see also: documents defs |
1018
|
|
|
|
|
|
|
|
1019
|
|
|
|
|
|
|
END |
1020
|
|
|
|
|
|
|
|
1021
|
|
|
|
|
|
|
$HELP{'vars'}=$HELP{'variables'}; |
1022
|
|
|
|
|
|
|
$HELP{'var'}=$HELP{'variables'}; |
1023
|
|
|
|
|
|
|
|
1024
|
|
|
|
|
|
|
$HELP{'copy'}=[<<'END']; |
1025
|
|
|
|
|
|
|
usage: copy [--respective|:r] [expression] [location] [expression] |
1026
|
|
|
|
|
|
|
$results := copy [--respective|:r] [expression] [location] [expression] |
1027
|
|
|
|
|
|
|
|
1028
|
|
|
|
|
|
|
aliases: cp |
1029
|
|
|
|
|
|
|
|
1030
|
|
|
|
|
|
|
description: |
1031
|
|
|
|
|
|
|
Copies nodes in the first node-list [expression] (source |
1032
|
|
|
|
|
|
|
nodes) to the destinations determined by the the [location] |
1033
|
|
|
|
|
|
|
directive applied to nodes in the second node-list |
1034
|
|
|
|
|
|
|
[expression] (target nodes). If the source node-list contains |
1035
|
|
|
|
|
|
|
more than one node, than N'th node in the source node-list is |
1036
|
|
|
|
|
|
|
copied to the location relative to the N'th node in the target |
1037
|
|
|
|
|
|
|
node-list. |
1038
|
|
|
|
|
|
|
|
1039
|
|
|
|
|
|
|
If '--respective|:r' option is used, then the target node-list |
1040
|
|
|
|
|
|
|
[expression] is evaluated in the context of the source node |
1041
|
|
|
|
|
|
|
being copied. |
1042
|
|
|
|
|
|
|
|
1043
|
|
|
|
|
|
|
Possible values for [location] are: 'after', 'before', 'into', |
1044
|
|
|
|
|
|
|
'replace', 'append' and 'prepend'. The first three location |
1045
|
|
|
|
|
|
|
directives cause making a copy of the source nodes after, |
1046
|
|
|
|
|
|
|
before, and within (as the last child-node) the target nodes, |
1047
|
|
|
|
|
|
|
respectively. If 'replace' location directive is used, source |
1048
|
|
|
|
|
|
|
node are copied before the respective target nodes and target |
1049
|
|
|
|
|
|
|
nodes are removed. The 'append' and 'prepend' location |
1050
|
|
|
|
|
|
|
directives allow, depending on the destination node type, |
1051
|
|
|
|
|
|
|
either inserting copies of the source nodes as the first or |
1052
|
|
|
|
|
|
|
last child nodes of a destination element or |
1053
|
|
|
|
|
|
|
appending/prepending destination node data in case of |
1054
|
|
|
|
|
|
|
non-element destination nodes. See [location] argument type |
1055
|
|
|
|
|
|
|
for more detail. |
1056
|
|
|
|
|
|
|
|
1057
|
|
|
|
|
|
|
The command returns a node-list consisting of the copies of |
1058
|
|
|
|
|
|
|
all source nodes created by the command. |
1059
|
|
|
|
|
|
|
|
1060
|
|
|
|
|
|
|
Despite the fact the command is named "copy", nodes resulting |
1061
|
|
|
|
|
|
|
from copying the source nodes may pass through certain type |
1062
|
|
|
|
|
|
|
conversion before they are inserted at the appointed |
1063
|
|
|
|
|
|
|
destinations. This, however, only happens in cases where the |
1064
|
|
|
|
|
|
|
types of the source and target nodes are not compatible with |
1065
|
|
|
|
|
|
|
the location directive. See [location] argument type for more |
1066
|
|
|
|
|
|
|
detail. |
1067
|
|
|
|
|
|
|
|
1068
|
|
|
|
|
|
|
Note that XSH2 refuses to create multiple top-level elements |
1069
|
|
|
|
|
|
|
using 'copy', [move] and similar commands. |
1070
|
|
|
|
|
|
|
|
1071
|
|
|
|
|
|
|
Example: Replace living-thing elements in the document b with copies of |
1072
|
|
|
|
|
|
|
the corresponding creature elements from the document $a. |
1073
|
|
|
|
|
|
|
|
1074
|
|
|
|
|
|
|
xsh> copy $a//creature replace $b//living-thing |
1075
|
|
|
|
|
|
|
|
1076
|
|
|
|
|
|
|
Example: Copy every element into itself |
1077
|
|
|
|
|
|
|
|
1078
|
|
|
|
|
|
|
xsh> copy --respective $a//* into . |
1079
|
|
|
|
|
|
|
xsh> copy $a//* into $a//* #same as |
1080
|
|
|
|
|
|
|
above |
1081
|
|
|
|
|
|
|
|
1082
|
|
|
|
|
|
|
see also: xcopy move xmove insert xinsert |
1083
|
|
|
|
|
|
|
|
1084
|
|
|
|
|
|
|
END |
1085
|
|
|
|
|
|
|
|
1086
|
|
|
|
|
|
|
$HELP{'cp'}=$HELP{'copy'}; |
1087
|
|
|
|
|
|
|
|
1088
|
|
|
|
|
|
|
$HELP{'xcopy'}=[<<'END']; |
1089
|
|
|
|
|
|
|
usage: xcopy [--respective|:r] [--preserve-order|:p] [expression] [location] [expression] |
1090
|
|
|
|
|
|
|
|
1091
|
|
|
|
|
|
|
aliases: xcp |
1092
|
|
|
|
|
|
|
|
1093
|
|
|
|
|
|
|
description: |
1094
|
|
|
|
|
|
|
xcopy is similar to [copy], but copies all nodes in the first |
1095
|
|
|
|
|
|
|
node-list [expression] to all destinations determined by the |
1096
|
|
|
|
|
|
|
[location] directive relative to the second node-list |
1097
|
|
|
|
|
|
|
[expression]. See [copy] for detailed description of 'xcopy' |
1098
|
|
|
|
|
|
|
arguments. |
1099
|
|
|
|
|
|
|
|
1100
|
|
|
|
|
|
|
If '--respective|:r' option is used, then the target node-list |
1101
|
|
|
|
|
|
|
[expression] is evaluated in the context of the source node |
1102
|
|
|
|
|
|
|
being copied. |
1103
|
|
|
|
|
|
|
|
1104
|
|
|
|
|
|
|
The '--preserve-order|:p' option can be used to ensure that |
1105
|
|
|
|
|
|
|
the copied nodes are in the same relative order as the |
1106
|
|
|
|
|
|
|
corresponding source nodes. Otherwise, if [location] is |
1107
|
|
|
|
|
|
|
'after' or 'prepend', the relative order of the copied nodes |
1108
|
|
|
|
|
|
|
will be reversed, because source nodes are placed to the |
1109
|
|
|
|
|
|
|
target location one by one. |
1110
|
|
|
|
|
|
|
|
1111
|
|
|
|
|
|
|
Example: Copy all middle-earth creatures within the document $a into |
1112
|
|
|
|
|
|
|
every world of the document $b. |
1113
|
|
|
|
|
|
|
|
1114
|
|
|
|
|
|
|
xsh> xcopy $a/middle-earth/creature into $b//world |
1115
|
|
|
|
|
|
|
|
1116
|
|
|
|
|
|
|
see also: copy move xmove insert xinsert |
1117
|
|
|
|
|
|
|
|
1118
|
|
|
|
|
|
|
END |
1119
|
|
|
|
|
|
|
|
1120
|
|
|
|
|
|
|
$HELP{'xcp'}=$HELP{'xcopy'}; |
1121
|
|
|
|
|
|
|
|
1122
|
|
|
|
|
|
|
$HELP{'lcd'}=[<<'END']; |
1123
|
|
|
|
|
|
|
usage: lcd [expression] |
1124
|
|
|
|
|
|
|
|
1125
|
|
|
|
|
|
|
aliases: chdir |
1126
|
|
|
|
|
|
|
|
1127
|
|
|
|
|
|
|
description: |
1128
|
|
|
|
|
|
|
Changes the filesystem working directory to [expression], if |
1129
|
|
|
|
|
|
|
possible. If [expression] is omitted, changes to the directory |
1130
|
|
|
|
|
|
|
specified in HOME environment variable, if set; if not, |
1131
|
|
|
|
|
|
|
changes to the directory specified by LOGDIR environment |
1132
|
|
|
|
|
|
|
variable. |
1133
|
|
|
|
|
|
|
|
1134
|
|
|
|
|
|
|
END |
1135
|
|
|
|
|
|
|
|
1136
|
|
|
|
|
|
|
$HELP{'chdir'}=$HELP{'lcd'}; |
1137
|
|
|
|
|
|
|
|
1138
|
|
|
|
|
|
|
$HELP{'insert'}=[<<'END']; |
1139
|
|
|
|
|
|
|
usage: insert [--namespace|:n [expression]] [node-type] [expression] [location] [xpath] |
1140
|
|
|
|
|
|
|
|
1141
|
|
|
|
|
|
|
aliases: add |
1142
|
|
|
|
|
|
|
|
1143
|
|
|
|
|
|
|
description: |
1144
|
|
|
|
|
|
|
Works just like [xinsert], except that the new node is |
1145
|
|
|
|
|
|
|
attached only the first node matched. |
1146
|
|
|
|
|
|
|
|
1147
|
|
|
|
|
|
|
see also: xinsert move xmove |
1148
|
|
|
|
|
|
|
|
1149
|
|
|
|
|
|
|
END |
1150
|
|
|
|
|
|
|
|
1151
|
|
|
|
|
|
|
$HELP{'add'}=$HELP{'insert'}; |
1152
|
|
|
|
|
|
|
|
1153
|
|
|
|
|
|
|
$HELP{'wrap'}=[<<'END']; |
1154
|
|
|
|
|
|
|
usage: wrap [--namespace [expression]] |
1155
|
|
|
|
|
|
|
[ [--inner] | [--while|:W [expression]] [--until|:U [expression]] |
1156
|
|
|
|
|
|
|
[--skip-whitespace|:w] [--skip-comments|:c] [--skip-pi|:p] ] |
1157
|
|
|
|
|
|
|
[expression] [xpath] |
1158
|
|
|
|
|
|
|
|
1159
|
|
|
|
|
|
|
description: |
1160
|
|
|
|
|
|
|
For each node matching the [xpath] argument, this command |
1161
|
|
|
|
|
|
|
creates a new element node according to a given [expression] |
1162
|
|
|
|
|
|
|
(in the same way as [xinsert] does) which replaces the |
1163
|
|
|
|
|
|
|
matching node, and moves the matching node into this newly |
1164
|
|
|
|
|
|
|
created element. If namespace [expression] is given, the |
1165
|
|
|
|
|
|
|
namespace is applied on the created element. The command |
1166
|
|
|
|
|
|
|
returns a node-list consisting of the elements created. |
1167
|
|
|
|
|
|
|
|
1168
|
|
|
|
|
|
|
With '--inner' (or ':i') flag the command wraps children nodes |
1169
|
|
|
|
|
|
|
of the matching node rather than the node it self the |
1170
|
|
|
|
|
|
|
following sense: for each matching node a new element node is |
1171
|
|
|
|
|
|
|
created, but this time it is placed into the matching node and |
1172
|
|
|
|
|
|
|
all previous children of the matching node are moved into the |
1173
|
|
|
|
|
|
|
newly created node. In this mode, all non-element matching |
1174
|
|
|
|
|
|
|
nodes are ignored. This flag cannot be used together with |
1175
|
|
|
|
|
|
|
'--while' and '--until', which we describe next. |
1176
|
|
|
|
|
|
|
|
1177
|
|
|
|
|
|
|
'--while' (':W') and/or '--until' (':U') arguments can be |
1178
|
|
|
|
|
|
|
provided in order to move a sequence of adjacent siblings |
1179
|
|
|
|
|
|
|
following the matching node into the newly created element. In |
1180
|
|
|
|
|
|
|
this way the newly created element wraps not just the matching |
1181
|
|
|
|
|
|
|
node itself but a range of nodes starting at the matching node |
1182
|
|
|
|
|
|
|
and ending either before a first following node matching the |
1183
|
|
|
|
|
|
|
expression of '--until', or before a first following node not |
1184
|
|
|
|
|
|
|
matching the expression of '--while', or at the last sibling |
1185
|
|
|
|
|
|
|
if neither of the prior apply. Both these expressions are |
1186
|
|
|
|
|
|
|
evaluated in the context of the currently tested sibling and |
1187
|
|
|
|
|
|
|
prior to the creation of the wrapping element. The context |
1188
|
|
|
|
|
|
|
position for these expressions is 1 at the first sibling |
1189
|
|
|
|
|
|
|
following the matching node and increases with each tested |
1190
|
|
|
|
|
|
|
sibling; the context size is the number of all siblings |
1191
|
|
|
|
|
|
|
following the matching node. It is important to mention that |
1192
|
|
|
|
|
|
|
siblings wrapped in this way are excluded from further |
1193
|
|
|
|
|
|
|
processing by [wrap] even if included in the node-list |
1194
|
|
|
|
|
|
|
produced by the [xpath] argument. This allows to easily wrap |
1195
|
|
|
|
|
|
|
certain adjacent elements without worrying about some elements |
1196
|
|
|
|
|
|
|
being wrapped multiple times (for example, 'wrap :W x y //x' |
1197
|
|
|
|
|
|
|
wraps each sequence of adjacent elements '' in a ''). |
1198
|
|
|
|
|
|
|
|
1199
|
|
|
|
|
|
|
'--skip-whitespace' (':w'), '--skip-comments' (':c'), and |
1200
|
|
|
|
|
|
|
'--skip-pi' (':p') can be used in combination with '--while' |
1201
|
|
|
|
|
|
|
(':W') and/or '--until' (':U') to skip testing the expressions |
1202
|
|
|
|
|
|
|
on white-space text nodes, comments, and/or processing |
1203
|
|
|
|
|
|
|
instruction, respectively. Such nodes are only included in the |
1204
|
|
|
|
|
|
|
wrapped range if followed by a sibling that is to be wrapped. |
1205
|
|
|
|
|
|
|
|
1206
|
|
|
|
|
|
|
Example: |
1207
|
|
|
|
|
|
|
$scratch/> ls /; |
1208
|
|
|
|
|
|
|
|
1209
|
|
|
|
|
|
|
|
1210
|
|
|
|
|
|
|
|
1211
|
|
|
|
|
|
|
$scratch/> wrap 'foo' *; |
1212
|
|
|
|
|
|
|
$scratch/> insert attribute 'bar=baz' into /foo; |
1213
|
|
|
|
|
|
|
$scratch/> insert text 'some text' into //scratch; |
1214
|
|
|
|
|
|
|
$scratch/> wrap --namespace 'http://foo/bar' 'a:A' //@*; |
1215
|
|
|
|
|
|
|
$scratch/> $wrapper := wrap 'text aaa="bbb"' //text(); |
1216
|
|
|
|
|
|
|
$scratch/> wrap '' //*; |
1217
|
|
|
|
|
|
|
$scratch/> ls /; |
1218
|
|
|
|
|
|
|
|
1219
|
|
|
|
|
|
|
|
1220
|
|
|
|
|
|
|
|
1221
|
|
|
|
|
|
|
|
1222
|
|
|
|
|
|
|
|
1223
|
|
|
|
|
|
|
|
1224
|
|
|
|
|
|
|
some text |
1225
|
|
|
|
|
|
|
|
1226
|
|
|
|
|
|
|
|
1227
|
|
|
|
|
|
|
|
1228
|
|
|
|
|
|
|
|
1229
|
|
|
|
|
|
|
|
1230
|
|
|
|
|
|
|
|
1231
|
|
|
|
|
|
|
|
1232
|
|
|
|
|
|
|
|
1233
|
|
|
|
|
|
|
|
1234
|
|
|
|
|
|
|
$scratch/> ls $wrapper; |
1235
|
|
|
|
|
|
|
some text |
1236
|
|
|
|
|
|
|
|
1237
|
|
|
|
|
|
|
|
1238
|
|
|
|
|
|
|
$scratch/> wrap --inner bar //foo |
1239
|
|
|
|
|
|
|
$scratch/> ls /; |
1240
|
|
|
|
|
|
|
|
1241
|
|
|
|
|
|
|
|
1242
|
|
|
|
|
|
|
|
1243
|
|
|
|
|
|
|
|
1244
|
|
|
|
|
|
|
|
1245
|
|
|
|
|
|
|
|
1246
|
|
|
|
|
|
|
|
1247
|
|
|
|
|
|
|
some text |
1248
|
|
|
|
|
|
|
|
1249
|
|
|
|
|
|
|
|
1250
|
|
|
|
|
|
|
|
1251
|
|
|
|
|
|
|
|
1252
|
|
|
|
|
|
|
|
1253
|
|
|
|
|
|
|
|
1254
|
|
|
|
|
|
|
|
1255
|
|
|
|
|
|
|
|
1256
|
|
|
|
|
|
|
|
1257
|
|
|
|
|
|
|
|
1258
|
|
|
|
|
|
|
Example: Wrapping a range of adjacent nodes |
1259
|
|
|
|
|
|
|
|
1260
|
|
|
|
|
|
|
# prepare the test document |
1261
|
|
|
|
|
|
|
$scratch/> rm /scratch/node(); # cleanup the document |
1262
|
|
|
|
|
|
|
$scratch/> set /scratch/li[5]; # create 5 elements |
1263
|
|
|
|
|
|
|
$scratch/> set /scratch/li[3]/following-sibling::li; # add after the 3rd |
1264
|
|
|
|
|
|
|
$scratch/> for //li set . position(); # number the elements |
1265
|
|
|
|
|
|
|
$scratch/> ls / |
1266
|
|
|
|
|
|
|
|
1267
|
|
|
|
|
|
|
|
1268
|
|
|
|
|
|
|
1 |
1269
|
|
|
|
|
|
|
2 |
1270
|
|
|
|
|
|
|
3 |
1271
|
|
|
|
|
|
|
|
1272
|
|
|
|
|
|
|
4 |
1273
|
|
|
|
|
|
|
5 |
1274
|
|
|
|
|
|
|
|
1275
|
|
|
|
|
|
|
# wrap adjacent elements into an |
1276
|
|
|
|
|
|
|
$scratch/> wrap --skip-whitespace --while self::li ol //li; |
1277
|
|
|
|
|
|
|
$scratch/> ls / |
1278
|
|
|
|
|
|
|
|
1279
|
|
|
|
|
|
|
|
1280
|
|
|
|
|
|
|
|
1281
|
|
|
|
|
|
|
1 |
1282
|
|
|
|
|
|
|
2 |
1283
|
|
|
|
|
|
|
3 |
1284
|
|
|
|
|
|
|
|
1285
|
|
|
|
|
|
|
|
1286
|
|
|
|
|
|
|
|
1287
|
|
|
|
|
|
|
4 |
1288
|
|
|
|
|
|
|
5 |
1289
|
|
|
|
|
|
|
|
1290
|
|
|
|
|
|
|
|
1291
|
|
|
|
|
|
|
|
1292
|
|
|
|
|
|
|
see also: xinsert insert move xmove |
1293
|
|
|
|
|
|
|
|
1294
|
|
|
|
|
|
|
END |
1295
|
|
|
|
|
|
|
|
1296
|
|
|
|
|
|
|
|
1297
|
|
|
|
|
|
|
$HELP{'wrap-span'}=[<<'END']; |
1298
|
|
|
|
|
|
|
usage: wrap-span [--namespace [expression]] [expression] [expression] [expression] |
1299
|
|
|
|
|
|
|
|
1300
|
|
|
|
|
|
|
aliases: wrap_span |
1301
|
|
|
|
|
|
|
|
1302
|
|
|
|
|
|
|
description: |
1303
|
|
|
|
|
|
|
This command is very similar to [wrap] command, except that it |
1304
|
|
|
|
|
|
|
works on spans of nodes. It wraps spans (i.e. sequence of |
1305
|
|
|
|
|
|
|
adjacent nodes between (and including) a start node and an end |
1306
|
|
|
|
|
|
|
node) with a new element whose name is specified as the first |
1307
|
|
|
|
|
|
|
argument. Nodes within each span must have the same parent |
1308
|
|
|
|
|
|
|
node. The spans to be wrapped are defined by a pair of |
1309
|
|
|
|
|
|
|
node-lists in the second and third argument. The first |
1310
|
|
|
|
|
|
|
node-list specifies the start node of one or more spans, while |
1311
|
|
|
|
|
|
|
the second node-list should contain the corresponding end |
1312
|
|
|
|
|
|
|
nodes. The two node-lists must evaluate to the exactly same |
1313
|
|
|
|
|
|
|
number of nodes, otherwise a runtime error is reported. The |
1314
|
|
|
|
|
|
|
N'th span is then defined as a span starting on the N'th node |
1315
|
|
|
|
|
|
|
in the start node-list and ending at the N'th node in the end |
1316
|
|
|
|
|
|
|
node-list. |
1317
|
|
|
|
|
|
|
|
1318
|
|
|
|
|
|
|
All nodes within the spans are removed from the document and |
1319
|
|
|
|
|
|
|
placed into the newly generated elements. The wrapping |
1320
|
|
|
|
|
|
|
elements are put back into the document tree at the positions |
1321
|
|
|
|
|
|
|
previously occupied by the node-spans. |
1322
|
|
|
|
|
|
|
|
1323
|
|
|
|
|
|
|
The command returns a node-list containing the newly created |
1324
|
|
|
|
|
|
|
wrapping elements. |
1325
|
|
|
|
|
|
|
|
1326
|
|
|
|
|
|
|
Example: |
1327
|
|
|
|
|
|
|
xsh $scratch/> $foo := create { "\n\n\n\n" }; |
1328
|
|
|
|
|
|
|
xsh $foo/> wrap-span 'span' //a //b; |
1329
|
|
|
|
|
|
|
xsh $foo/> ls /; |
1330
|
|
|
|
|
|
|
|
1331
|
|
|
|
|
|
|
|
1332
|
|
|
|
|
|
|
|
1333
|
|
|
|
|
|
|
|
1334
|
|
|
|
|
|
|
|
1335
|
|
|
|
|
|
|
|
1336
|
|
|
|
|
|
|
|
1337
|
|
|
|
|
|
|
see also: xinsert insert move xmove |
1338
|
|
|
|
|
|
|
|
1339
|
|
|
|
|
|
|
END |
1340
|
|
|
|
|
|
|
|
1341
|
|
|
|
|
|
|
$HELP{'wrap_span'}=$HELP{'wrap-span'}; |
1342
|
|
|
|
|
|
|
|
1343
|
|
|
|
|
|
|
$HELP{'xinsert'}=[<<'END']; |
1344
|
|
|
|
|
|
|
usage: xinsert [--namespace [expression]] [node-type] [expression] [location] [xpath] |
1345
|
|
|
|
|
|
|
|
1346
|
|
|
|
|
|
|
aliases: xadd |
1347
|
|
|
|
|
|
|
|
1348
|
|
|
|
|
|
|
description: |
1349
|
|
|
|
|
|
|
Create new nodes of the [node-type] given in the 1st argument |
1350
|
|
|
|
|
|
|
of name specified in the 2nd argument and insert them to |
1351
|
|
|
|
|
|
|
[location]s relative to nodes in the node-list specified in |
1352
|
|
|
|
|
|
|
the 4th argument. |
1353
|
|
|
|
|
|
|
|
1354
|
|
|
|
|
|
|
For element nodes, the the 2nd argument [expression] should |
1355
|
|
|
|
|
|
|
evaluate to something like "
|
1356
|
|
|
|
|
|
|
...>". The '<' and '>' characters are optional. If no |
1357
|
|
|
|
|
|
|
attributes are used, the expression may simply consist the |
1358
|
|
|
|
|
|
|
element name. Note, that in the first case, the quotes are |
1359
|
|
|
|
|
|
|
required since the expression contains spaces. |
1360
|
|
|
|
|
|
|
|
1361
|
|
|
|
|
|
|
Attribute nodes use the following syntax: "att-name='attvalue' |
1362
|
|
|
|
|
|
|
[...]". |
1363
|
|
|
|
|
|
|
|
1364
|
|
|
|
|
|
|
For the other types of nodes (text, cdata, comments) the |
1365
|
|
|
|
|
|
|
expression should contain the node's literal content. Again, |
1366
|
|
|
|
|
|
|
it is necessary to quote all whitespace and special characters |
1367
|
|
|
|
|
|
|
as in any expression argument. |
1368
|
|
|
|
|
|
|
|
1369
|
|
|
|
|
|
|
The [location] argument should be one of: 'after', 'before', |
1370
|
|
|
|
|
|
|
'into', 'replace', 'append' or 'prepend'. See documentation of |
1371
|
|
|
|
|
|
|
the [location] argument type for more detail. |
1372
|
|
|
|
|
|
|
|
1373
|
|
|
|
|
|
|
Optionally, for element and attribute nodes, a namespace may |
1374
|
|
|
|
|
|
|
be specified with '--namespace' or ':n'. If used, the |
1375
|
|
|
|
|
|
|
expression should evaluate to the desired namespace URI and |
1376
|
|
|
|
|
|
|
the name of the element or attribute being inserted must have |
1377
|
|
|
|
|
|
|
a prefix. |
1378
|
|
|
|
|
|
|
|
1379
|
|
|
|
|
|
|
The command returns a node-list consisting of nodes it |
1380
|
|
|
|
|
|
|
created. |
1381
|
|
|
|
|
|
|
|
1382
|
|
|
|
|
|
|
Note, that instead of 'xinsert', you can alternatively use one |
1383
|
|
|
|
|
|
|
of [xsh:new-attribute], [xsh:new-cdata], [xsh:new-chunk], |
1384
|
|
|
|
|
|
|
[xsh:new-comment], [xsh:new-element], [xsh:new-element-ns], |
1385
|
|
|
|
|
|
|
[xsh:new-pi], and [xsh:new-text] together with the command |
1386
|
|
|
|
|
|
|
[xcopy]. |
1387
|
|
|
|
|
|
|
|
1388
|
|
|
|
|
|
|
Example: Give each chapter a provisional title element. |
1389
|
|
|
|
|
|
|
|
1390
|
|
|
|
|
|
|
xsh> my $new_titles := xinsert element "" \ </td>
</tr>
<tr>
<td class="h" >
<a name="1391">1391</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> into /book/chapter </td>
</tr>
<tr>
<td class="h" >
<a name="1392">1392</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> xinsert text "Change me!" into $new_titles; </td>
</tr>
<tr>
<td class="h" >
<a name="1393">1393</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1394">1394</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Same as above, using xcopy and xsh:new-... instead of xinsert </td>
</tr>
<tr>
<td class="h" >
<a name="1395">1395</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1396">1396</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> my $new_titles := xcopy xsh:new-element("title","font-size","large","underline","yes") \ </td>
</tr>
<tr>
<td class="h" >
<a name="1397">1397</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> into /book/chapter </td>
</tr>
<tr>
<td class="h" >
<a name="1398">1398</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> xcopy xsh:new-text("Change me!") into $new_titles; </td>
</tr>
<tr>
<td class="h" >
<a name="1399">1399</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1400">1400</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: insert move xmove </td>
</tr>
<tr>
<td class="h" >
<a name="1401">1401</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1402">1402</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1403">1403</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1404">1404</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'xadd'}=$HELP{'xinsert'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1405">1405</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1406">1406</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'node-type'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1407">1407</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Node-type argument type </td>
</tr>
<tr>
<td class="h" >
<a name="1408">1408</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1409">1409</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1410">1410</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> One of: element, attribute, text, cdata, comment, chunk and </td>
</tr>
<tr>
<td class="h" >
<a name="1411">1411</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> (EXPERIMENTALLY!) entity_reference. A chunk is a character </td>
</tr>
<tr>
<td class="h" >
<a name="1412">1412</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> string which forms a well-balanced piece of XML. </td>
</tr>
<tr>
<td class="h" >
<a name="1413">1413</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1414">1414</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: </td>
</tr>
<tr>
<td class="h" >
<a name="1415">1415</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> add element hobbit into //middle-earth/creatures; </td>
</tr>
<tr>
<td class="h" >
<a name="1416">1416</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> add attribute 'name="Bilbo"' into //middle-earth/creatures/hobbit[last()]; </td>
</tr>
<tr>
<td class="h" >
<a name="1417">1417</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> add chunk '<hobbit name="Frodo">A small guy from <place>Shire</place>.</hobbit>' </td>
</tr>
<tr>
<td class="h" >
<a name="1418">1418</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> into //middle-earth/creatures; </td>
</tr>
<tr>
<td class="h" >
<a name="1419">1419</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1420">1420</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1421">1421</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1422">1422</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1423">1423</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'location'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1424">1424</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Location argument type </td>
</tr>
<tr>
<td class="h" >
<a name="1425">1425</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1426">1426</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1427">1427</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> One of: 'after', 'before', 'into', 'append', 'prepend', </td>
</tr>
<tr>
<td class="h" >
<a name="1428">1428</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'replace'. </td>
</tr>
<tr>
<td class="h" >
<a name="1429">1429</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1430">1430</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This argument is required by all commands that insert nodes to </td>
</tr>
<tr>
<td class="h" >
<a name="1431">1431</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> a document in some way to a destination described by an XPath </td>
</tr>
<tr>
<td class="h" >
<a name="1432">1432</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> expression. The meaning of the values listed above is supposed </td>
</tr>
<tr>
<td class="h" >
<a name="1433">1433</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> be obvious in most cases, however the exact semantics for </td>
</tr>
<tr>
<td class="h" >
<a name="1434">1434</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> location argument values depends on types of both the source </td>
</tr>
<tr>
<td class="h" >
<a name="1435">1435</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node and the target node. </td>
</tr>
<tr>
<td class="h" >
<a name="1436">1436</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1437">1437</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'after/before' place the node right after/before the </td>
</tr>
<tr>
<td class="h" >
<a name="1438">1438</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> destination node, except for when the destination node is a </td>
</tr>
<tr>
<td class="h" >
<a name="1439">1439</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> document node or one of the source nodes is an attribute: If </td>
</tr>
<tr>
<td class="h" >
<a name="1440">1440</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the destination node is a document node, the source node is </td>
</tr>
<tr>
<td class="h" >
<a name="1441">1441</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> attached to the end/beginning of the document (remember: there </td>
</tr>
<tr>
<td class="h" >
<a name="1442">1442</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> is no "after/before a document"). If both the source and </td>
</tr>
<tr>
<td class="h" >
<a name="1443">1443</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> destination nodes are attributes, then the source node is </td>
</tr>
<tr>
<td class="h" >
<a name="1444">1444</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> simply attached to the element containing the destination node </td>
</tr>
<tr>
<td class="h" >
<a name="1445">1445</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> (remember: there is no order on attribute nodes). If the </td>
</tr>
<tr>
<td class="h" >
<a name="1446">1446</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> destination node is an attribute but the source node is of a </td>
</tr>
<tr>
<td class="h" >
<a name="1447">1447</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> different type, then the textual content of the source node is </td>
</tr>
<tr>
<td class="h" >
<a name="1448">1448</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> appended to the value of the destination attribute (i.e. in </td>
</tr>
<tr>
<td class="h" >
<a name="1449">1449</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> this case after/before act just as append/prepend). </td>
</tr>
<tr>
<td class="h" >
<a name="1450">1450</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1451">1451</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'append/prepend' appends/prepends the source node to the </td>
</tr>
<tr>
<td class="h" >
<a name="1452">1452</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> destination node. If the destination node can contain other </td>
</tr>
<tr>
<td class="h" >
<a name="1453">1453</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> nodes (i.e. it is an element or a document node) then the </td>
</tr>
<tr>
<td class="h" >
<a name="1454">1454</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> entire source node is attached to it. In case of other </td>
</tr>
<tr>
<td class="h" >
<a name="1455">1455</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> destination node types, the textual content of the source node </td>
</tr>
<tr>
<td class="h" >
<a name="1456">1456</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> is appended/prepended to the content of the destination node. </td>
</tr>
<tr>
<td class="h" >
<a name="1457">1457</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1458">1458</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'into' can also be used to place the source node to the end of </td>
</tr>
<tr>
<td class="h" >
<a name="1459">1459</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> an element (in the same way as 'append'), to attach an </td>
</tr>
<tr>
<td class="h" >
<a name="1460">1460</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> attribute to an element, or, if the destination node is a text </td>
</tr>
<tr>
<td class="h" >
<a name="1461">1461</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node, cdata section, processing-instruction, attribute or </td>
</tr>
<tr>
<td class="h" >
<a name="1462">1462</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> comment, to replace its textual content with the textual </td>
</tr>
<tr>
<td class="h" >
<a name="1463">1463</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> content of the source node. </td>
</tr>
<tr>
<td class="h" >
<a name="1464">1464</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1465">1465</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'replace' replaces the entire destination node with the source </td>
</tr>
<tr>
<td class="h" >
<a name="1466">1466</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node except for the case when the destination node is an </td>
</tr>
<tr>
<td class="h" >
<a name="1467">1467</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> attribute and the source node is not. In such a case only the </td>
</tr>
<tr>
<td class="h" >
<a name="1468">1468</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> value of the destination attribute is replaced with the </td>
</tr>
<tr>
<td class="h" >
<a name="1469">1469</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> textual content of the source node. Note also that document </td>
</tr>
<tr>
<td class="h" >
<a name="1470">1470</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node can never be replaced. </td>
</tr>
<tr>
<td class="h" >
<a name="1471">1471</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1472">1472</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1473">1473</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1474">1474</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1475">1475</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'move'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1476">1476</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: move [xpath] [location] [xpath] </td>
</tr>
<tr>
<td class="h" >
<a name="1477">1477</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1478">1478</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: mv </td>
</tr>
<tr>
<td class="h" >
<a name="1479">1479</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1480">1480</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1481">1481</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'move' command acts exactly like [copy], except that it </td>
</tr>
<tr>
<td class="h" >
<a name="1482">1482</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> removes the source nodes after a successful copy. Remember </td>
</tr>
<tr>
<td class="h" >
<a name="1483">1483</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> that the moved nodes are actually different nodes from the </td>
</tr>
<tr>
<td class="h" >
<a name="1484">1484</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> original ones (which may not be obvious when moving nodes </td>
</tr>
<tr>
<td class="h" >
<a name="1485">1485</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> within a single document into locations that do not require </td>
</tr>
<tr>
<td class="h" >
<a name="1486">1486</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> type conversion). So, after the move, the original nodes don't </td>
</tr>
<tr>
<td class="h" >
<a name="1487">1487</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> belong to any document and are automatically destroyed unless </td>
</tr>
<tr>
<td class="h" >
<a name="1488">1488</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> some variable still contains to them. </td>
</tr>
<tr>
<td class="h" >
<a name="1489">1489</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1490">1490</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command returns a node-list consisting of nodes it </td>
</tr>
<tr>
<td class="h" >
<a name="1491">1491</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> created on the target locations. </td>
</tr>
<tr>
<td class="h" >
<a name="1492">1492</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1493">1493</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> See [copy] for more details on how the copies of the moved </td>
</tr>
<tr>
<td class="h" >
<a name="1494">1494</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> nodes are created. </td>
</tr>
<tr>
<td class="h" >
<a name="1495">1495</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1496">1496</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: xmove copy xcopy insert xinsert </td>
</tr>
<tr>
<td class="h" >
<a name="1497">1497</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1498">1498</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1499">1499</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1500">1500</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'mv'}=$HELP{'move'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1501">1501</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1502">1502</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'xmove'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1503">1503</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: xmove [--respective|:r] [--preserve-order|:p] [xpath] [location] [xpath] </td>
</tr>
<tr>
<td class="h" >
<a name="1504">1504</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1505">1505</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: xmv </td>
</tr>
<tr>
<td class="h" >
<a name="1506">1506</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1507">1507</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1508">1508</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Like [xcopy], except that 'xmove' removes the source nodes </td>
</tr>
<tr>
<td class="h" >
<a name="1509">1509</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> after a successful copy. Remember that the moved nodes are </td>
</tr>
<tr>
<td class="h" >
<a name="1510">1510</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> actually different nodes from the original ones (which may not </td>
</tr>
<tr>
<td class="h" >
<a name="1511">1511</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> be obvious when moving nodes within a single document into </td>
</tr>
<tr>
<td class="h" >
<a name="1512">1512</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> locations that do not require type conversion). So, after the </td>
</tr>
<tr>
<td class="h" >
<a name="1513">1513</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> move, the original nodes don't belong to any document and are </td>
</tr>
<tr>
<td class="h" >
<a name="1514">1514</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> automatically destroyed unless still contained in some </td>
</tr>
<tr>
<td class="h" >
<a name="1515">1515</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> variable. </td>
</tr>
<tr>
<td class="h" >
<a name="1516">1516</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1517">1517</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command returns a node-list consisting of all nodes it </td>
</tr>
<tr>
<td class="h" >
<a name="1518">1518</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> created on the target locations. </td>
</tr>
<tr>
<td class="h" >
<a name="1519">1519</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1520">1520</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If '--respective|:r' option is used, then the target node-list </td>
</tr>
<tr>
<td class="h" >
<a name="1521">1521</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [expression] is evaluated in the context of the source node </td>
</tr>
<tr>
<td class="h" >
<a name="1522">1522</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> being copied. </td>
</tr>
<tr>
<td class="h" >
<a name="1523">1523</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1524">1524</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> The '--preserve-order|:p' option can be used to ensure that </td>
</tr>
<tr>
<td class="h" >
<a name="1525">1525</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the copied nodes are in the same relative order as the </td>
</tr>
<tr>
<td class="h" >
<a name="1526">1526</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> corresponding source nodes. Otherwise, if [location] is </td>
</tr>
<tr>
<td class="h" >
<a name="1527">1527</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'after' or 'prepend', the relative order of the copied nodes </td>
</tr>
<tr>
<td class="h" >
<a name="1528">1528</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> will be reversed, because source nodes are placed to the </td>
</tr>
<tr>
<td class="h" >
<a name="1529">1529</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> target location one by one. </td>
</tr>
<tr>
<td class="h" >
<a name="1530">1530</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1531">1531</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> See [xcopy] for more details on how the copies of the moved </td>
</tr>
<tr>
<td class="h" >
<a name="1532">1532</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> nodes are created. </td>
</tr>
<tr>
<td class="h" >
<a name="1533">1533</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1534">1534</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> The following example demonstrates how 'xmove' can be used to </td>
</tr>
<tr>
<td class="h" >
<a name="1535">1535</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> get rid of HTML '<font>' elements while preserving their </td>
</tr>
<tr>
<td class="h" >
<a name="1536">1536</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> content. As an exercise, try to figure out why simple 'foreach </td>
</tr>
<tr>
<td class="h" >
<a name="1537">1537</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> //font { xmove node() replace . }' would not work here. </td>
</tr>
<tr>
<td class="h" >
<a name="1538">1538</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1539">1539</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Get rid of all <font> tags </td>
</tr>
<tr>
<td class="h" >
<a name="1540">1540</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1541">1541</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> while //font { </td>
</tr>
<tr>
<td class="h" >
<a name="1542">1542</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> foreach //font { </td>
</tr>
<tr>
<td class="h" >
<a name="1543">1543</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xmove node() replace .; </td>
</tr>
<tr>
<td class="h" >
<a name="1544">1544</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="1545">1545</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="1546">1546</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1547">1547</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: move copy xcopy insert xinsert </td>
</tr>
<tr>
<td class="h" >
<a name="1548">1548</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1549">1549</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1550">1550</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1551">1551</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'xmv'}=$HELP{'xmove'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1552">1552</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1553">1553</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'clone'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1554">1554</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: $doc := clone [document] </td>
</tr>
<tr>
<td class="h" >
<a name="1555">1555</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1556">1556</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: dup </td>
</tr>
<tr>
<td class="h" >
<a name="1557">1557</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1558">1558</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1559">1559</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Create and return a copy of a given [document]. Unless </td>
</tr>
<tr>
<td class="h" >
<a name="1560">1560</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [switch-to-new-documents] configuration flag is turned off, </td>
</tr>
<tr>
<td class="h" >
<a name="1561">1561</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the root node of the new document becomes the current node. </td>
</tr>
<tr>
<td class="h" >
<a name="1562">1562</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1563">1563</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Calling this command only makes sense if either </td>
</tr>
<tr>
<td class="h" >
<a name="1564">1564</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [switch-to-new-documents] is set, or if the result is assigned </td>
</tr>
<tr>
<td class="h" >
<a name="1565">1565</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> to a variable or passed to another XSH2 command using the </td>
</tr>
<tr>
<td class="h" >
<a name="1566">1566</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '&{...}' syntax, since otherwise the newly created copy of the </td>
</tr>
<tr>
<td class="h" >
<a name="1567">1567</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> document is automatically garbage-collected and destroyed. </td>
</tr>
<tr>
<td class="h" >
<a name="1568">1568</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1569">1569</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: open close enc documents </td>
</tr>
<tr>
<td class="h" >
<a name="1570">1570</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1571">1571</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1572">1572</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1573">1573</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'dup'}=$HELP{'clone'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1574">1574</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1575">1575</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'normalize'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1576">1576</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: normalize [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="1577">1577</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1578">1578</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1579">1579</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'normalize' evaluates given [expression] to a node-list and </td>
</tr>
<tr>
<td class="h" >
<a name="1580">1580</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> puts all text nodes in the full depth of the sub-tree </td>
</tr>
<tr>
<td class="h" >
<a name="1581">1581</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> underneath each node in the node-list into a "normal" form </td>
</tr>
<tr>
<td class="h" >
<a name="1582">1582</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> where only structure (e.g., elements, comments, processing </td>
</tr>
<tr>
<td class="h" >
<a name="1583">1583</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> instructions, CDATA sections, and entity references) separates </td>
</tr>
<tr>
<td class="h" >
<a name="1584">1584</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> text nodes, i.e., there are neither adjacent text nodes nor </td>
</tr>
<tr>
<td class="h" >
<a name="1585">1585</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> empty text nodes. </td>
</tr>
<tr>
<td class="h" >
<a name="1586">1586</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1587">1587</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Note, that most XSH2 commands automatically join adjacent text </td>
</tr>
<tr>
<td class="h" >
<a name="1588">1588</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> nodes. </td>
</tr>
<tr>
<td class="h" >
<a name="1589">1589</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1590">1590</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1591">1591</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1592">1592</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1593">1593</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'strip-whitespace'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1594">1594</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: strip-whitespace [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="1595">1595</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1596">1596</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: strip_whitespace </td>
</tr>
<tr>
<td class="h" >
<a name="1597">1597</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1598">1598</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1599">1599</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'strip-whitespace' removes all leading and trailing whitespace </td>
</tr>
<tr>
<td class="h" >
<a name="1600">1600</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> from given nodes. If applied to an element node, it removes </td>
</tr>
<tr>
<td class="h" >
<a name="1601">1601</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> all leading and trailing child whitespace-only text nodes and </td>
</tr>
<tr>
<td class="h" >
<a name="1602">1602</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> CDATA sections. </td>
</tr>
<tr>
<td class="h" >
<a name="1603">1603</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1604">1604</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1605">1605</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1606">1606</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'strip_whitespace'}=$HELP{'strip-whitespace'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1607">1607</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1608">1608</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'ls'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1609">1609</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: ls [--fold|:f] [--fold-attrs|:A] [--indent|:i | --no-indent|:I] </td>
</tr>
<tr>
<td class="h" >
<a name="1610">1610</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--depth|:d [expression]] [[expression]] </td>
</tr>
<tr>
<td class="h" >
<a name="1611">1611</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1612">1612</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: list </td>
</tr>
<tr>
<td class="h" >
<a name="1613">1613</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1614">1614</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1615">1615</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Print XML representation of a given [expression], in </td>
</tr>
<tr>
<td class="h" >
<a name="1616">1616</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> particular, if used with an [xpath], list parts of the </td>
</tr>
<tr>
<td class="h" >
<a name="1617">1617</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> document matching given expression. </td>
</tr>
<tr>
<td class="h" >
<a name="1618">1618</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1619">1619</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If used without an argument, current node is listed to the </td>
</tr>
<tr>
<td class="h" >
<a name="1620">1620</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> depth 1 (see below). </td>
</tr>
<tr>
<td class="h" >
<a name="1621">1621</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1622">1622</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--depth' or ':d' argument may be used to specify depth of the </td>
</tr>
<tr>
<td class="h" >
<a name="1623">1623</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> XML listing. If negative, the listing depth is unlimited. All </td>
</tr>
<tr>
<td class="h" >
<a name="1624">1624</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> content below the specified depth is replaced with an ellipsis </td>
</tr>
<tr>
<td class="h" >
<a name="1625">1625</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> ('...'). </td>
</tr>
<tr>
<td class="h" >
<a name="1626">1626</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1627">1627</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--fold' or ':f' option makes the listing fold elements marked </td>
</tr>
<tr>
<td class="h" >
<a name="1628">1628</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> using the [fold] command are folded, i.e. listed only to the </td>
</tr>
<tr>
<td class="h" >
<a name="1629">1629</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> depth specified in the folding mark. </td>
</tr>
<tr>
<td class="h" >
<a name="1630">1630</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1631">1631</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--fold-attrs' or ':A' option avoids listing of attributes of </td>
</tr>
<tr>
<td class="h" >
<a name="1632">1632</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the folded elements (i.e. elements on the lowest level of </td>
</tr>
<tr>
<td class="h" >
<a name="1633">1633</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> listing). Folded attributes are replaced with ellipsis </td>
</tr>
<tr>
<td class="h" >
<a name="1634">1634</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> ('...'). </td>
</tr>
<tr>
<td class="h" >
<a name="1635">1635</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1636">1636</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--indent' (':i') and '--no-indent' (':I') may be used to </td>
</tr>
<tr>
<td class="h" >
<a name="1637">1637</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> enforce/suppress indentation, overriding current setting (see </td>
</tr>
<tr>
<td class="h" >
<a name="1638">1638</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> command [indent]). </td>
</tr>
<tr>
<td class="h" >
<a name="1639">1639</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1640">1640</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Unless in [quiet] mode, this command also prints the number of </td>
</tr>
<tr>
<td class="h" >
<a name="1641">1641</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> (top-level) nodes listed. </td>
</tr>
<tr>
<td class="h" >
<a name="1642">1642</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1643">1643</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: count fold unfold </td>
</tr>
<tr>
<td class="h" >
<a name="1644">1644</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1645">1645</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1646">1646</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1647">1647</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'list'}=$HELP{'ls'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1648">1648</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1649">1649</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'canonical'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1650">1650</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: canonical [--comments|:c] [--filter|:f [xpath]] [[expression]] </td>
</tr>
<tr>
<td class="h" >
<a name="1651">1651</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1652">1652</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1653">1653</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This commands prints a canonical XML representing nodes </td>
</tr>
<tr>
<td class="h" >
<a name="1654">1654</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> specified by its argument (or current node, if no argument is </td>
</tr>
<tr>
<td class="h" >
<a name="1655">1655</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> given). </td>
</tr>
<tr>
<td class="h" >
<a name="1656">1656</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1657">1657</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--comments' or ':c' removes comments from the resulting XML. </td>
</tr>
<tr>
<td class="h" >
<a name="1658">1658</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1659">1659</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--filter' or ':f' can be used to filter the resulting XML so </td>
</tr>
<tr>
<td class="h" >
<a name="1660">1660</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> that it only contains nodes explicitly included in the given </td>
</tr>
<tr>
<td class="h" >
<a name="1661">1661</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node-set. </td>
</tr>
<tr>
<td class="h" >
<a name="1662">1662</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1663">1663</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> For details see "Canonical XML" or "Exclusive XML </td>
</tr>
<tr>
<td class="h" >
<a name="1664">1664</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Canonicalization" W3C recommendations. </td>
</tr>
<tr>
<td class="h" >
<a name="1665">1665</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1666">1666</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: ls </td>
</tr>
<tr>
<td class="h" >
<a name="1667">1667</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1668">1668</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1669">1669</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1670">1670</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1671">1671</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'count'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1672">1672</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: count [--quiet|:q] [xpath] </td>
</tr>
<tr>
<td class="h" >
<a name="1673">1673</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1674">1674</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1675">1675</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Calculates a given [expression] expression. If the result is a </td>
</tr>
<tr>
<td class="h" >
<a name="1676">1676</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node-list, print number of nodes in the node-list. If the </td>
</tr>
<tr>
<td class="h" >
<a name="1677">1677</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [expression] results in a boolean, numeric or literal value, </td>
</tr>
<tr>
<td class="h" >
<a name="1678">1678</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> print the value. </td>
</tr>
<tr>
<td class="h" >
<a name="1679">1679</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1680">1680</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If '--quiet' or ':q' option is used, output is suppressed and </td>
</tr>
<tr>
<td class="h" >
<a name="1681">1681</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the value is returned. </td>
</tr>
<tr>
<td class="h" >
<a name="1682">1682</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1683">1683</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: get </td>
</tr>
<tr>
<td class="h" >
<a name="1684">1684</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1685">1685</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1686">1686</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1687">1687</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1688">1688</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'change-ns-uri'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1689">1689</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: change-ns-uri [expression] [[expression]] </td>
</tr>
<tr>
<td class="h" >
<a name="1690">1690</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1691">1691</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1692">1692</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command takes one or two arguments. The first argument is </td>
</tr>
<tr>
<td class="h" >
<a name="1693">1693</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> a new namespace URI and the second, optional, argument is a </td>
</tr>
<tr>
<td class="h" >
<a name="1694">1694</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> namespace prefix. It changes the URI value of a namespace </td>
</tr>
<tr>
<td class="h" >
<a name="1695">1695</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> declaration of the context node to the new value. If no prefix </td>
</tr>
<tr>
<td class="h" >
<a name="1696">1696</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> is given, the change applies to a declaration on the context </td>
</tr>
<tr>
<td class="h" >
<a name="1697">1697</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node whose prefix equals to the prefix of the context node, </td>
</tr>
<tr>
<td class="h" >
<a name="1698">1698</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> otherwise the change applies to a declaration with the given </td>
</tr>
<tr>
<td class="h" >
<a name="1699">1699</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> prefix. </td>
</tr>
<tr>
<td class="h" >
<a name="1700">1700</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1701">1701</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: change-ns-prefix set-ns declare-ns namespaces </td>
</tr>
<tr>
<td class="h" >
<a name="1702">1702</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1703">1703</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1704">1704</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1705">1705</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1706">1706</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'change-ns-prefix'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1707">1707</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: change-ns-prefix [expression] [[expression]] </td>
</tr>
<tr>
<td class="h" >
<a name="1708">1708</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1709">1709</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1710">1710</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command takes one or two arguments. The first argument is </td>
</tr>
<tr>
<td class="h" >
<a name="1711">1711</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> a new prefix and the second, optional, argument is an old </td>
</tr>
<tr>
<td class="h" >
<a name="1712">1712</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> namespace prefix. It changes the prefix of a namespace </td>
</tr>
<tr>
<td class="h" >
<a name="1713">1713</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> declaration of the context node to the new value. If no old </td>
</tr>
<tr>
<td class="h" >
<a name="1714">1714</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> prefix is given, the change applies to a declaration on the </td>
</tr>
<tr>
<td class="h" >
<a name="1715">1715</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> context node whose prefix equals to the prefix of the context </td>
</tr>
<tr>
<td class="h" >
<a name="1716">1716</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node, otherwise the command changes the declaration with the </td>
</tr>
<tr>
<td class="h" >
<a name="1717">1717</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> given old prefix. </td>
</tr>
<tr>
<td class="h" >
<a name="1718">1718</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1719">1719</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> The command throws an exception if the new prefix is already </td>
</tr>
<tr>
<td class="h" >
<a name="1720">1720</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> taken by some other declaration in the scope. </td>
</tr>
<tr>
<td class="h" >
<a name="1721">1721</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1722">1722</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: change-ns-uri set-ns declare-ns namespaces </td>
</tr>
<tr>
<td class="h" >
<a name="1723">1723</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1724">1724</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1725">1725</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1726">1726</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1727">1727</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'set-ns'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1728">1728</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: set-ns [:p|--prefix [expression]] [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="1729">1729</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1730">1730</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1731">1731</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command takes one argument, the namespace URI, possibly </td>
</tr>
<tr>
<td class="h" >
<a name="1732">1732</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> accompanied by a prefix provided in the option '--prefix' </td>
</tr>
<tr>
<td class="h" >
<a name="1733">1733</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> ':p'; both these expressions are evaluated as names. The </td>
</tr>
<tr>
<td class="h" >
<a name="1734">1734</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> command changes the namespace of the current element to a </td>
</tr>
<tr>
<td class="h" >
<a name="1735">1735</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> given namespace URI. The current node must be in the scope of </td>
</tr>
<tr>
<td class="h" >
<a name="1736">1736</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> a namespace declaration associating the namespace URI with a </td>
</tr>
<tr>
<td class="h" >
<a name="1737">1737</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> prefix; if prefix option is given, then one of such </td>
</tr>
<tr>
<td class="h" >
<a name="1738">1738</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> declarations must associate the particular given prefix with </td>
</tr>
<tr>
<td class="h" >
<a name="1739">1739</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the namespace URI. If this condition is not met or the current </td>
</tr>
<tr>
<td class="h" >
<a name="1740">1740</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node is neither element nor attribute, an error is issued. The </td>
</tr>
<tr>
<td class="h" >
<a name="1741">1741</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> command also changes the prefix of the current element </td>
</tr>
<tr>
<td class="h" >
<a name="1742">1742</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> accordingly. </td>
</tr>
<tr>
<td class="h" >
<a name="1743">1743</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1744">1744</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: declare-ns change-ns-uri change-ns-prefix namespaces </td>
</tr>
<tr>
<td class="h" >
<a name="1745">1745</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1746">1746</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1747">1747</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1748">1748</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1749">1749</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'declare-ns'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1750">1750</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: declare-ns [expression] [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="1751">1751</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1752">1752</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1753">1753</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command takes one or two arguments: prefix and URI, both </td>
</tr>
<tr>
<td class="h" >
<a name="1754">1754</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> evaluated as names. It creates a namespace declaration of the </td>
</tr>
<tr>
<td class="h" >
<a name="1755">1755</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> form 'xmlns:prefix="URI"' on the current node. The command </td>
</tr>
<tr>
<td class="h" >
<a name="1756">1756</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> produces an error if the prefix is already declared in the </td>
</tr>
<tr>
<td class="h" >
<a name="1757">1757</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> scope of the current node with a different namespace URI. </td>
</tr>
<tr>
<td class="h" >
<a name="1758">1758</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1759">1759</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: set-ns change-ns-uri change-ns-prefix namespaces </td>
</tr>
<tr>
<td class="h" >
<a name="1760">1760</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1761">1761</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1762">1762</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1763">1763</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1764">1764</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'set'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1765">1765</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: set [xpath] [[xpath]] </td>
</tr>
<tr>
<td class="h" >
<a name="1766">1766</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1767">1767</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1768">1768</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command provides very easy way to create or modify </td>
</tr>
<tr>
<td class="h" >
<a name="1769">1769</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> content of a document. It takes two XPath expressions. The </td>
</tr>
<tr>
<td class="h" >
<a name="1770">1770</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> first one should be a node location path which specifies the </td>
</tr>
<tr>
<td class="h" >
<a name="1771">1771</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> target node, the second is optional and provides new content </td>
</tr>
<tr>
<td class="h" >
<a name="1772">1772</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> for the target node. If a node matches the first XPath </td>
</tr>
<tr>
<td class="h" >
<a name="1773">1773</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> expression, then its content is replaced with the given value. </td>
</tr>
<tr>
<td class="h" >
<a name="1774">1774</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If no node matches, then XSH2 tries to magically extend the </td>
</tr>
<tr>
<td class="h" >
<a name="1775">1775</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> current document by adding nodes in order to add missing steps </td>
</tr>
<tr>
<td class="h" >
<a name="1776">1776</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> of the location path so as to make the expression match a </td>
</tr>
<tr>
<td class="h" >
<a name="1777">1777</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node. This node is then populated with a copy of the content </td>
</tr>
<tr>
<td class="h" >
<a name="1778">1778</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> value (either text or, if the content [xpath] results in a </td>
</tr>
<tr>
<td class="h" >
<a name="1779">1779</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node-list and the target node is an element, nodes). </td>
</tr>
<tr>
<td class="h" >
<a name="1780">1780</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1781">1781</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Try the following on an empty scratch document </td>
</tr>
<tr>
<td class="h" >
<a name="1782">1782</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1783">1783</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $scratch/> ls / </td>
</tr>
<tr>
<td class="h" >
<a name="1784">1784</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <scratch/> </td>
</tr>
<tr>
<td class="h" >
<a name="1785">1785</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $scratch/> set scratch/@say "hallo world" </td>
</tr>
<tr>
<td class="h" >
<a name="1786">1786</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <scratch say="hello world"/> </td>
</tr>
<tr>
<td class="h" >
<a name="1787">1787</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1788">1788</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $scratch/> set scratch/foo[2]/../foo[1]/following-sibling::bar/baz[3] "HALLO" </td>
</tr>
<tr>
<td class="h" >
<a name="1789">1789</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $scratch/> ls / </td>
</tr>
<tr>
<td class="h" >
<a name="1790">1790</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <?xml version="1.0" encoding="utf-8"?> </td>
</tr>
<tr>
<td class="h" >
<a name="1791">1791</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <scratch say="hello world"> </td>
</tr>
<tr>
<td class="h" >
<a name="1792">1792</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <foo/> </td>
</tr>
<tr>
<td class="h" >
<a name="1793">1793</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <bar> </td>
</tr>
<tr>
<td class="h" >
<a name="1794">1794</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <baz/> </td>
</tr>
<tr>
<td class="h" >
<a name="1795">1795</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <baz/> </td>
</tr>
<tr>
<td class="h" >
<a name="1796">1796</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <baz>HALLO</baz> </td>
</tr>
<tr>
<td class="h" >
<a name="1797">1797</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </bar> </td>
</tr>
<tr>
<td class="h" >
<a name="1798">1798</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <foo/> </td>
</tr>
<tr>
<td class="h" >
<a name="1799">1799</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <scratch/> </td>
</tr>
<tr>
<td class="h" >
<a name="1800">1800</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1801">1801</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Only a limited subset of XPath is currently supported by this </td>
</tr>
<tr>
<td class="h" >
<a name="1802">1802</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> command. Namely, the XPath expression must be a location path </td>
</tr>
<tr>
<td class="h" >
<a name="1803">1803</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> consisting of a /-separated sequence of one or more location </td>
</tr>
<tr>
<td class="h" >
<a name="1804">1804</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> steps and new nodes can only be magically created along the </td>
</tr>
<tr>
<td class="h" >
<a name="1805">1805</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> child, sibling, or attribute axes. The node-test part of the </td>
</tr>
<tr>
<td class="h" >
<a name="1806">1806</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> expression can neither be a wildcard ('*', '@*', 'prefix:*', </td>
</tr>
<tr>
<td class="h" >
<a name="1807">1807</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> ...), nor the 'node()' function. If a namespace prefix is </td>
</tr>
<tr>
<td class="h" >
<a name="1808">1808</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> used, then either the namespace must already be declared in </td>
</tr>
<tr>
<td class="h" >
<a name="1809">1809</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the document or registered with XSH. </td>
</tr>
<tr>
<td class="h" >
<a name="1810">1810</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1811">1811</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Location steps may contain arbitrary predicates (filters), </td>
</tr>
<tr>
<td class="h" >
<a name="1812">1812</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> however, only a limited subset is supported for magically </td>
</tr>
<tr>
<td class="h" >
<a name="1813">1813</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> created nodes. In particular, if a filter predicate of a </td>
</tr>
<tr>
<td class="h" >
<a name="1814">1814</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> location step specifies a position of a node (e.g. with '[4]', </td>
</tr>
<tr>
<td class="h" >
<a name="1815">1815</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> or '[position()>3]', etc), then the parser tries to </td>
</tr>
<tr>
<td class="h" >
<a name="1816">1816</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> automatically create empty siblings nodes until it finally </td>
</tr>
<tr>
<td class="h" >
<a name="1817">1817</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> creates one with for which the predicate is true. </td>
</tr>
<tr>
<td class="h" >
<a name="1818">1818</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1819">1819</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Note, that this command only processes one location step at a </td>
</tr>
<tr>
<td class="h" >
<a name="1820">1820</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> time and always picks the first matching node. So, expressions </td>
</tr>
<tr>
<td class="h" >
<a name="1821">1821</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> like '/root/a/b' are treated as '/root/a[1]/b[1]'. This means </td>
</tr>
<tr>
<td class="h" >
<a name="1822">1822</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> that an expression '/root/a/b' will magically create element </td>
</tr>
<tr>
<td class="h" >
<a name="1823">1823</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '<b>' in a first matching '<a>' even if some following '<a>' </td>
</tr>
<tr>
<td class="h" >
<a name="1824">1824</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> already contains a '<b>'. </td>
</tr>
<tr>
<td class="h" >
<a name="1825">1825</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1826">1826</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> To prevent this, either explicitly state that 'b' must exist </td>
</tr>
<tr>
<td class="h" >
<a name="1827">1827</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> with e.g. '/root/a[b]/b' or make the corresponding element </td>
</tr>
<tr>
<td class="h" >
<a name="1828">1828</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '<a>' the context node and use a relative location path: </td>
</tr>
<tr>
<td class="h" >
<a name="1829">1829</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1830">1830</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: </td>
</tr>
<tr>
<td class="h" >
<a name="1831">1831</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> for /root/a/b set b 'foo' </td>
</tr>
<tr>
<td class="h" >
<a name="1832">1832</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1833">1833</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1834">1834</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1835">1835</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1836">1836</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'get'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1837">1837</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: get [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="1838">1838</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1839">1839</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: exp expr </td>
</tr>
<tr>
<td class="h" >
<a name="1840">1840</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1841">1841</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1842">1842</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Calculate a given [expression] and return the value. </td>
</tr>
<tr>
<td class="h" >
<a name="1843">1843</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1844">1844</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: count </td>
</tr>
<tr>
<td class="h" >
<a name="1845">1845</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1846">1846</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1847">1847</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1848">1848</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'exp'}=$HELP{'get'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1849">1849</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'expr'}=$HELP{'get'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1850">1850</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1851">1851</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'perl-code'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1852">1852</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Perl-code argument type </td>
</tr>
<tr>
<td class="h" >
<a name="1853">1853</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1854">1854</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1855">1855</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> A block of Perl code enclosed in braces. All XSH2 variables </td>
</tr>
<tr>
<td class="h" >
<a name="1856">1856</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> are transparently accessible from the Perl code as well. </td>
</tr>
<tr>
<td class="h" >
<a name="1857">1857</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1858">1858</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> For more information about embedded Perl code in XSH2, </td>
</tr>
<tr>
<td class="h" >
<a name="1859">1859</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> predefined functions etc., see [Perl_shell]. </td>
</tr>
<tr>
<td class="h" >
<a name="1860">1860</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1861">1861</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: </td>
</tr>
<tr>
<td class="h" >
<a name="1862">1862</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> $i={ "foo" }; </td>
</tr>
<tr>
<td class="h" >
<a name="1863">1863</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> perl { echo "$i-bar\n"; } # prints foo-bar </td>
</tr>
<tr>
<td class="h" >
<a name="1864">1864</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> echo { "$i-bar" } # very much the same as above </td>
</tr>
<tr>
<td class="h" >
<a name="1865">1865</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1866">1866</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1867">1867</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1868">1868</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1869">1869</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'perl'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1870">1870</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: perl [perl-code] </td>
</tr>
<tr>
<td class="h" >
<a name="1871">1871</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1872">1872</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1873">1873</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Evaluate a given perl expression and return the result. </td>
</tr>
<tr>
<td class="h" >
<a name="1874">1874</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1875">1875</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: count </td>
</tr>
<tr>
<td class="h" >
<a name="1876">1876</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1877">1877</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1878">1878</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1879">1879</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1880">1880</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'remove'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1881">1881</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: remove [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="1882">1882</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1883">1883</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: rm prune delete del </td>
</tr>
<tr>
<td class="h" >
<a name="1884">1884</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1885">1885</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1886">1886</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Unlink all nodes in a given node-list from their respective </td>
</tr>
<tr>
<td class="h" >
<a name="1887">1887</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> documents. Nodes, which are neither attached to a document or </td>
</tr>
<tr>
<td class="h" >
<a name="1888">1888</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> stored in a variable are automatically garbage-collected. </td>
</tr>
<tr>
<td class="h" >
<a name="1889">1889</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1890">1890</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Returns a number of nodes removed. </td>
</tr>
<tr>
<td class="h" >
<a name="1891">1891</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1892">1892</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Get rid of all evil creatures. </td>
</tr>
<tr>
<td class="h" >
<a name="1893">1893</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1894">1894</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> del //creature[@manner='evil'] </td>
</tr>
<tr>
<td class="h" >
<a name="1895">1895</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1896">1896</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1897">1897</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1898">1898</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'rm'}=$HELP{'remove'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1899">1899</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'prune'}=$HELP{'remove'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1900">1900</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'delete'}=$HELP{'remove'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1901">1901</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'del'}=$HELP{'remove'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1902">1902</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1903">1903</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'print'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1904">1904</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: print [--nonl|:n] [--nospace|:s] [--stderr|:e] [expression] [[expression] ...] </td>
</tr>
<tr>
<td class="h" >
<a name="1905">1905</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1906">1906</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: echo </td>
</tr>
<tr>
<td class="h" >
<a name="1907">1907</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1908">1908</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1909">1909</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Evaluate given expression(s) and print the results (separated </td>
</tr>
<tr>
<td class="h" >
<a name="1910">1910</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> by a single space character). Expressions not containing any </td>
</tr>
<tr>
<td class="h" >
<a name="1911">1911</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> special characters, such as brackets, quotes, $, or @ are </td>
</tr>
<tr>
<td class="h" >
<a name="1912">1912</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> considered as bare words and evaluate to themselves. </td>
</tr>
<tr>
<td class="h" >
<a name="1913">1913</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1914">1914</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--nonl' or ':n' can be used to avoid printing a trailing </td>
</tr>
<tr>
<td class="h" >
<a name="1915">1915</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> new-line. </td>
</tr>
<tr>
<td class="h" >
<a name="1916">1916</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1917">1917</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--nospace' or ':s' suppresses printing additional spaces </td>
</tr>
<tr>
<td class="h" >
<a name="1918">1918</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> between individual arguments. </td>
</tr>
<tr>
<td class="h" >
<a name="1919">1919</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1920">1920</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--stderr' or ':e' causes the command to print on standard </td>
</tr>
<tr>
<td class="h" >
<a name="1921">1921</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> error output. </td>
</tr>
<tr>
<td class="h" >
<a name="1922">1922</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1923">1923</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: </td>
</tr>
<tr>
<td class="h" >
<a name="1924">1924</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> print foo bar; # prints "foo bar" </td>
</tr>
<tr>
<td class="h" >
<a name="1925">1925</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> print "foo bar"; # prints "foo bar" </td>
</tr>
<tr>
<td class="h" >
<a name="1926">1926</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1927">1927</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1928">1928</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1929">1929</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'echo'}=$HELP{'print'}; </td>
</tr>
<tr>
<td class="h" >
<a name="1930">1930</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1931">1931</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'sort'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1932">1932</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: $result := sort [ --key|:k [expression] ] </td>
</tr>
<tr>
<td class="h" >
<a name="1933">1933</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> --compare|:c [perl-code] [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="1934">1934</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $result := sort [ --key|:k [expression] ] </td>
</tr>
<tr>
<td class="h" >
<a name="1935">1935</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [ --numeric|:n ] [ --descending|:d ] [ --locale|:l] [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="1936">1936</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1937">1937</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1938">1938</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command sorts a given node-list, returning a node-list </td>
</tr>
<tr>
<td class="h" >
<a name="1939">1939</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> ordered according to a given key and ordering function. </td>
</tr>
<tr>
<td class="h" >
<a name="1940">1940</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1941">1941</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--key|:k' followed by an expression specifies the key to be </td>
</tr>
<tr>
<td class="h" >
<a name="1942">1942</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> computed for each member of the node-list and the result used </td>
</tr>
<tr>
<td class="h" >
<a name="1943">1943</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> as the sorting key. If omitted, keys are created by converting </td>
</tr>
<tr>
<td class="h" >
<a name="1944">1944</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the nodes to string as if XPath expression 'string(.)' was </td>
</tr>
<tr>
<td class="h" >
<a name="1945">1945</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> used. </td>
</tr>
<tr>
<td class="h" >
<a name="1946">1946</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1947">1947</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--numeric|:n' specifies, that keys should be compared by </td>
</tr>
<tr>
<td class="h" >
<a name="1948">1948</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> their numerical values (the default is string comparison). </td>
</tr>
<tr>
<td class="h" >
<a name="1949">1949</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1950">1950</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--descending|:d' specifies, that the result should be ordered </td>
</tr>
<tr>
<td class="h" >
<a name="1951">1951</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> in descending order (default is ascending). </td>
</tr>
<tr>
<td class="h" >
<a name="1952">1952</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1953">1953</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--locale|:l' forces using current locale settings for string </td>
</tr>
<tr>
<td class="h" >
<a name="1954">1954</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> comparison (default is no locale). </td>
</tr>
<tr>
<td class="h" >
<a name="1955">1955</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1956">1956</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--compare' argument followed by a [perl-code] allows to </td>
</tr>
<tr>
<td class="h" >
<a name="1957">1957</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> define a custom comparison method in a similar way to Perl </td>
</tr>
<tr>
<td class="h" >
<a name="1958">1958</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'sort' command. The keys to be compared are passed to the code </td>
</tr>
<tr>
<td class="h" >
<a name="1959">1959</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> in variables '$a' and '$b'. The code is supposed to return 1 </td>
</tr>
<tr>
<td class="h" >
<a name="1960">1960</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if the key in '$a' is greater than '$b', 0 if the keys are </td>
</tr>
<tr>
<td class="h" >
<a name="1961">1961</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> equal and '-1' if '$a' is less than '$b', depending on how the </td>
</tr>
<tr>
<td class="h" >
<a name="1962">1962</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> corresponding elements are to be ordered. It is a run-time </td>
</tr>
<tr>
<td class="h" >
<a name="1963">1963</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> error to use '--compare' together with either '--numeric' or </td>
</tr>
<tr>
<td class="h" >
<a name="1964">1964</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--descending'. </td>
</tr>
<tr>
<td class="h" >
<a name="1965">1965</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1966">1966</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Case-insensitive sort of a given node-list </td>
</tr>
<tr>
<td class="h" >
<a name="1967">1967</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1968">1968</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $ordered := sort --key xsh:lc(.) $unordered; </td>
</tr>
<tr>
<td class="h" >
<a name="1969">1969</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1970">1970</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Reorder creature elements by name attribute in ascending order </td>
</tr>
<tr>
<td class="h" >
<a name="1971">1971</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> using Czech locale settings </td>
</tr>
<tr>
<td class="h" >
<a name="1972">1972</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1973">1973</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> perl { </td>
</tr>
<tr>
<td class="h" >
<a name="1974">1974</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # setup locale collating function </td>
</tr>
<tr>
<td class="h" >
<a name="1975">1975</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # Note, that the collating function must be UTF8 aware. </td>
</tr>
<tr>
<td class="h" >
<a name="1976">1976</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> use POSIX qw(locale_h); </td>
</tr>
<tr>
<td class="h" >
<a name="1977">1977</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> setlocale(LC_COLLATE,'cs_CZ.UTF-8'); </td>
</tr>
<tr>
<td class="h" >
<a name="1978">1978</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> }; </td>
</tr>
<tr>
<td class="h" >
<a name="1979">1979</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1980">1980</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xmove &{ sort :k@name :l * } into /middle-earth[1]/creatures; </td>
</tr>
<tr>
<td class="h" >
<a name="1981">1981</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1982">1982</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Sort a node-list by a pre-computed score (Perl-based sort) </td>
</tr>
<tr>
<td class="h" >
<a name="1983">1983</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1984">1984</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $results := sort --numeric --descending --key { $scores{literal('@name')} } $players; </td>
</tr>
<tr>
<td class="h" >
<a name="1985">1985</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1986">1986</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="1987">1987</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1988">1988</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1989">1989</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'map'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="1990">1990</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: map [expression] [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="1991">1991</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1992">1992</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="1993">1993</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> NOTE: THE SEMANTICS OF COMMAND HAS CHANGED IN 2.1.0 </td>
</tr>
<tr>
<td class="h" >
<a name="1994">1994</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1995">1995</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command provides an easy way to transform node's data </td>
</tr>
<tr>
<td class="h" >
<a name="1996">1996</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> (content) using arbitrary expression. It takes two arguments: </td>
</tr>
<tr>
<td class="h" >
<a name="1997">1997</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> a mapping expression and a node-list. </td>
</tr>
<tr>
<td class="h" >
<a name="1998">1998</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="1999">1999</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> First the second argument is evaluated to a node-list. For </td>
</tr>
<tr>
<td class="h" >
<a name="2000">2000</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> each of the nodes, the mapping expression is evaluated and the </td>
</tr>
<tr>
<td class="h" >
<a name="2001">2001</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> result is used to replace the original content of the node. </td>
</tr>
<tr>
<td class="h" >
<a name="2002">2002</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> The node is made the context node for the time of evaluation </td>
</tr>
<tr>
<td class="h" >
<a name="2003">2003</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> of the mapping expression. Moreover, if the expression is a </td>
</tr>
<tr>
<td class="h" >
<a name="2004">2004</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Perl code, it gets the original text content in the variable </td>
</tr>
<tr>
<td class="h" >
<a name="2005">2005</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '$_'. </td>
</tr>
<tr>
<td class="h" >
<a name="2006">2006</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2007">2007</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Note that if the processed node is an element than the mapping </td>
</tr>
<tr>
<td class="h" >
<a name="2008">2008</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> expression may even produce nodes which are then copied into </td>
</tr>
<tr>
<td class="h" >
<a name="2009">2009</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the element discarding any previous content of the element. </td>
</tr>
<tr>
<td class="h" >
<a name="2010">2010</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2011">2011</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If the mapping expression returns an undefined value for a </td>
</tr>
<tr>
<td class="h" >
<a name="2012">2012</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node, then its content is kept untouched. </td>
</tr>
<tr>
<td class="h" >
<a name="2013">2013</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2014">2014</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--in-place' (':i') flag: if the expression is a Perl code, </td>
</tr>
<tr>
<td class="h" >
<a name="2015">2015</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> then it is sometimes convenient to change the value in place. </td>
</tr>
<tr>
<td class="h" >
<a name="2016">2016</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> In that case use this flag to indicate that the result should </td>
</tr>
<tr>
<td class="h" >
<a name="2017">2017</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> to be taken from the '$_' variable rather than from the value </td>
</tr>
<tr>
<td class="h" >
<a name="2018">2018</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> of the expression itself. Without this flag, '$_' is </td>
</tr>
<tr>
<td class="h" >
<a name="2019">2019</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> read-only. </td>
</tr>
<tr>
<td class="h" >
<a name="2020">2020</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2021">2021</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--reverse' (':r') flag instruct the map to process the </td>
</tr>
<tr>
<td class="h" >
<a name="2022">2022</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> nodelist in reversed order. </td>
</tr>
<tr>
<td class="h" >
<a name="2023">2023</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2024">2024</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Capitalizes all hobbit names </td>
</tr>
<tr>
<td class="h" >
<a name="2025">2025</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2026">2026</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> map { ucfirst($_) } //hobbit/@name; </td>
</tr>
<tr>
<td class="h" >
<a name="2027">2027</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2028">2028</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Changes Goblins to Orcs in all hobbit tales (\b matches word </td>
</tr>
<tr>
<td class="h" >
<a name="2029">2029</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> boundary). </td>
</tr>
<tr>
<td class="h" >
<a name="2030">2030</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2031">2031</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> map :i { s/\bgoblin\b/orc/gi } //hobbit/tale/text(); </td>
</tr>
<tr>
<td class="h" >
<a name="2032">2032</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2033">2033</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Recompute column sums in the last row of row-oriented table </td>
</tr>
<tr>
<td class="h" >
<a name="2034">2034</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2035">2035</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> map sum(/table/row[position()<last()]/ </td>
</tr>
<tr>
<td class="h" >
<a name="2036">2036</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> cell[count(xsh:current()/preceding-sibling::cell)+1]) </td>
</tr>
<tr>
<td class="h" >
<a name="2037">2037</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> /table/row[last()]/cell; </td>
</tr>
<tr>
<td class="h" >
<a name="2038">2038</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2039">2039</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: The following commands do all about the same: </td>
</tr>
<tr>
<td class="h" >
<a name="2040">2040</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2041">2041</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> wrap --inner Z //*; </td>
</tr>
<tr>
<td class="h" >
<a name="2042">2042</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> map --reverse xsh:parse(concat("<Z>",xsh:serialize(node()),"</Z>")) //*; </td>
</tr>
<tr>
<td class="h" >
<a name="2043">2043</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> map xsh:parse(concat("<Z>",xsh:serialize(node()),"</Z>")) { reverse xpath('//*') }; </td>
</tr>
<tr>
<td class="h" >
<a name="2044">2044</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2045">2045</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Note that in the last example we use ':r' (or Perl 'reverse' </td>
</tr>
<tr>
<td class="h" >
<a name="2046">2046</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> function) to reverse the node list order so that child nodes </td>
</tr>
<tr>
<td class="h" >
<a name="2047">2047</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> get processed before their parents. Otherwise, the child nodes </td>
</tr>
<tr>
<td class="h" >
<a name="2048">2048</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> would be replaced by parent's new content before the </td>
</tr>
<tr>
<td class="h" >
<a name="2049">2049</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> processing could reach them. </td>
</tr>
<tr>
<td class="h" >
<a name="2050">2050</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2051">2051</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: rename </td>
</tr>
<tr>
<td class="h" >
<a name="2052">2052</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2053">2053</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2054">2054</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2055">2055</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2056">2056</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'rename'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2057">2057</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: rename [nodename] [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2058">2058</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2059">2059</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2060">2060</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> NOTE: THE SEMANTICS OF COMMAND HAS CHANGED IN 2.1.0 </td>
</tr>
<tr>
<td class="h" >
<a name="2061">2061</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2062">2062</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is very similar to the [map] command, except that </td>
</tr>
<tr>
<td class="h" >
<a name="2063">2063</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> it operates on nodes' names rather than their content. It </td>
</tr>
<tr>
<td class="h" >
<a name="2064">2064</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> changes name of every element, attribute or </td>
</tr>
<tr>
<td class="h" >
<a name="2065">2065</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> processing-instruction contained in the node-list specified in </td>
</tr>
<tr>
<td class="h" >
<a name="2066">2066</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the second argument [expression], according to the value of </td>
</tr>
<tr>
<td class="h" >
<a name="2067">2067</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the [nodename] expression, which is evaluated in the context </td>
</tr>
<tr>
<td class="h" >
<a name="2068">2068</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> of each node in turn. </td>
</tr>
<tr>
<td class="h" >
<a name="2069">2069</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2070">2070</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If the [nodename] is a Perl expression, then the name of the </td>
</tr>
<tr>
<td class="h" >
<a name="2071">2071</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> node is also stored into Perl's '$_' variable prior to </td>
</tr>
<tr>
<td class="h" >
<a name="2072">2072</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> evaluation. </td>
</tr>
<tr>
<td class="h" >
<a name="2073">2073</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2074">2074</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> The flag '--in-place' (':i') can be used to indicate that the </td>
</tr>
<tr>
<td class="h" >
<a name="2075">2075</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> new name should be collected from the '$_' variable rather </td>
</tr>
<tr>
<td class="h" >
<a name="2076">2076</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> than from the result of the expression itself. </td>
</tr>
<tr>
<td class="h" >
<a name="2077">2077</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2078">2078</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> The '--namespace' (':n') argument may be used to provide </td>
</tr>
<tr>
<td class="h" >
<a name="2079">2079</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> namespace for the renamed nodes. </td>
</tr>
<tr>
<td class="h" >
<a name="2080">2080</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2081">2081</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--reverse' (':r') flag instruct the map to process the </td>
</tr>
<tr>
<td class="h" >
<a name="2082">2082</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> nodelist in reversed order. </td>
</tr>
<tr>
<td class="h" >
<a name="2083">2083</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2084">2084</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Note: if the expression [nodename] returns an undefined value </td>
</tr>
<tr>
<td class="h" >
<a name="2085">2085</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> for a particular node, the node's original name and namespace </td>
</tr>
<tr>
<td class="h" >
<a name="2086">2086</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> are preserved. </td>
</tr>
<tr>
<td class="h" >
<a name="2087">2087</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2088">2088</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Renames all Hobbits to Halflings </td>
</tr>
<tr>
<td class="h" >
<a name="2089">2089</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2090">2090</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> rename halfling //hobbit </td>
</tr>
<tr>
<td class="h" >
<a name="2091">2091</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2092">2092</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Make all elements and attributes uppercase (yack!) </td>
</tr>
<tr>
<td class="h" >
<a name="2093">2093</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2094">2094</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> rename { uc } (//*|//@*) </td>
</tr>
<tr>
<td class="h" >
<a name="2095">2095</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2096">2096</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Substitute dashes with underscores in all node names </td>
</tr>
<tr>
<td class="h" >
<a name="2097">2097</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2098">2098</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> rename :i { s/-/_/g } (//*|//@*) </td>
</tr>
<tr>
<td class="h" >
<a name="2099">2099</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2100">2100</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Make all elements start with the name of their parents </td>
</tr>
<tr>
<td class="h" >
<a name="2101">2101</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2102">2102</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> rename concat(local-name(parent::*),'.',local-name(.)) //*[parent::*] </td>
</tr>
<tr>
<td class="h" >
<a name="2103">2103</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2104">2104</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: map </td>
</tr>
<tr>
<td class="h" >
<a name="2105">2105</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2106">2106</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2107">2107</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2108">2108</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2109">2109</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'hash'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2110">2110</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: $hash := hash [expression] [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2111">2111</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2112">2112</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2113">2113</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command takes two arguments: an expression computing a </td>
</tr>
<tr>
<td class="h" >
<a name="2114">2114</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> key from a given node (1st argument) and a node-set (2nd </td>
</tr>
<tr>
<td class="h" >
<a name="2115">2115</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> argument). For each node in the node-set, the key value is </td>
</tr>
<tr>
<td class="h" >
<a name="2116">2116</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> computed and the node is stored under the given key in the </td>
</tr>
<tr>
<td class="h" >
<a name="2117">2117</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> resulting hash. For a given key, the value stored in the hash </td>
</tr>
<tr>
<td class="h" >
<a name="2118">2118</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> table is a node-list consisting of all nodes for which the 1st </td>
</tr>
<tr>
<td class="h" >
<a name="2119">2119</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> expression evaluated to an object string-wise equal to the </td>
</tr>
<tr>
<td class="h" >
<a name="2120">2120</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> key. It is therefore possible to index more than one node </td>
</tr>
<tr>
<td class="h" >
<a name="2121">2121</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> under the same key. </td>
</tr>
<tr>
<td class="h" >
<a name="2122">2122</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2123">2123</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> The XPath function 'xsh:lookup(varname,key)' can be used to </td>
</tr>
<tr>
<td class="h" >
<a name="2124">2124</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> retrieve values from hashes in XPath expressions. </td>
</tr>
<tr>
<td class="h" >
<a name="2125">2125</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2126">2126</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Index books by author </td>
</tr>
<tr>
<td class="h" >
<a name="2127">2127</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2128">2128</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $books_by_author := hash concat(author/firstname," ",author/surname) //book; </td>
</tr>
<tr>
<td class="h" >
<a name="2129">2129</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2130">2130</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Lookup books by Jack London. </td>
</tr>
<tr>
<td class="h" >
<a name="2131">2131</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2132">2132</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> ls { $books_by_author->{'Jack London'} }; </td>
</tr>
<tr>
<td class="h" >
<a name="2133">2133</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> ls xsh:lookup('books_by_author','Jack London'); </td>
</tr>
<tr>
<td class="h" >
<a name="2134">2134</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2135">2135</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: xsh:lookup </td>
</tr>
<tr>
<td class="h" >
<a name="2136">2136</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2137">2137</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2138">2138</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2139">2139</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2140">2140</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'close'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2141">2141</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: close [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2142">2142</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2143">2143</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2144">2144</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Close a given [document] (or, if called with no argument, the </td>
</tr>
<tr>
<td class="h" >
<a name="2145">2145</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> current document) by trying to remove all references from XSH2 </td>
</tr>
<tr>
<td class="h" >
<a name="2146">2146</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> variables to nodes belonging to the document. If no references </td>
</tr>
<tr>
<td class="h" >
<a name="2147">2147</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> to the document are left, the garbage-collector destroys the </td>
</tr>
<tr>
<td class="h" >
<a name="2148">2148</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> DOM tree and frees the memory it occupied for later reuse </td>
</tr>
<tr>
<td class="h" >
<a name="2149">2149</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> (depending on architecture, this may or may not give the </td>
</tr>
<tr>
<td class="h" >
<a name="2150">2150</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> allocated memory back to the system). </td>
</tr>
<tr>
<td class="h" >
<a name="2151">2151</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2152">2152</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2153">2153</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2154">2154</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2155">2155</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'index'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2156">2156</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: index [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2157">2157</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2158">2158</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2159">2159</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command makes 'libxml2' library to remember </td>
</tr>
<tr>
<td class="h" >
<a name="2160">2160</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> document-order position of every element node in the </td>
</tr>
<tr>
<td class="h" >
<a name="2161">2161</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [document]. Such indexation makes XPath queries considerably </td>
</tr>
<tr>
<td class="h" >
<a name="2162">2162</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> faster on large documents (with thousands of nodes). The </td>
</tr>
<tr>
<td class="h" >
<a name="2163">2163</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> command should only be used on documents which don't change; </td>
</tr>
<tr>
<td class="h" >
<a name="2164">2164</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> modifying an indexed document might possibly lead to </td>
</tr>
<tr>
<td class="h" >
<a name="2165">2165</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> non-conformant behavior of later XPath queries on the </td>
</tr>
<tr>
<td class="h" >
<a name="2166">2166</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> document. </td>
</tr>
<tr>
<td class="h" >
<a name="2167">2167</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2168">2168</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2169">2169</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2170">2170</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2171">2171</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'open'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2172">2172</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: $doc := open [--format|:F html|xml|docbook] </td>
</tr>
<tr>
<td class="h" >
<a name="2173">2173</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--file|:f | --pipe|:p | --string|:s] </td>
</tr>
<tr>
<td class="h" >
<a name="2174">2174</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--switch-to|:w | --no-switch-to|:W] </td>
</tr>
<tr>
<td class="h" >
<a name="2175">2175</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--validate|:v | --no-validate|:V] </td>
</tr>
<tr>
<td class="h" >
<a name="2176">2176</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--recover|:r | --no-recover|:R] </td>
</tr>
<tr>
<td class="h" >
<a name="2177">2177</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--expand-entities|:e | --no-expand-entities|:E] </td>
</tr>
<tr>
<td class="h" >
<a name="2178">2178</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--xinclude|:x | --no-xinclude|:X] </td>
</tr>
<tr>
<td class="h" >
<a name="2179">2179</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--keep-blanks|:b | --no-keep-blanks|:B] </td>
</tr>
<tr>
<td class="h" >
<a name="2180">2180</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--pedantic|:n | --no-pedantic|:N] </td>
</tr>
<tr>
<td class="h" >
<a name="2181">2181</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--load-ext-dtd|:d | --no-load-ext-dtd|:D] </td>
</tr>
<tr>
<td class="h" >
<a name="2182">2182</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--complete-attributes|:a | --no-complete-attributes|:A] </td>
</tr>
<tr>
<td class="h" >
<a name="2183">2183</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2184">2184</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2185">2185</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2186">2186</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Parse a XML, HTML or SGML DOCBOOK document from a file or URL, </td>
</tr>
<tr>
<td class="h" >
<a name="2187">2187</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> command output or string and return a node-set consisting of </td>
</tr>
<tr>
<td class="h" >
<a name="2188">2188</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the root of the resulting DOM tree. </td>
</tr>
<tr>
<td class="h" >
<a name="2189">2189</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2190">2190</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--format' (':F') option may be used to specify file format. </td>
</tr>
<tr>
<td class="h" >
<a name="2191">2191</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Possible values are 'xml' (default), 'html', and 'docbook'. </td>
</tr>
<tr>
<td class="h" >
<a name="2192">2192</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Note, however, that the support for parsing 'DocBook' SGML </td>
</tr>
<tr>
<td class="h" >
<a name="2193">2193</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> files has been deprecated in recent 'libxml2' versions. </td>
</tr>
<tr>
<td class="h" >
<a name="2194">2194</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2195">2195</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--file' (':f') instructs the parser to consider a given </td>
</tr>
<tr>
<td class="h" >
<a name="2196">2196</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [expression] as a file name or URL. </td>
</tr>
<tr>
<td class="h" >
<a name="2197">2197</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2198">2198</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--pipe' (':p') instructs the parser to consider a given </td>
</tr>
<tr>
<td class="h" >
<a name="2199">2199</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [expression] as a system command and parse its output. </td>
</tr>
<tr>
<td class="h" >
<a name="2200">2200</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2201">2201</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--string' (':s') instructs the parser to consider a given </td>
</tr>
<tr>
<td class="h" >
<a name="2202">2202</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [expression] as a string of XML or HTML to parse. </td>
</tr>
<tr>
<td class="h" >
<a name="2203">2203</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2204">2204</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--switch-to' (':w') and '--no-switch-to' (':W') control </td>
</tr>
<tr>
<td class="h" >
<a name="2205">2205</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> whether the new document's root should become current node. </td>
</tr>
<tr>
<td class="h" >
<a name="2206">2206</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> These option override current global setting of </td>
</tr>
<tr>
<td class="h" >
<a name="2207">2207</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [switch-to-new-documents]. </td>
</tr>
<tr>
<td class="h" >
<a name="2208">2208</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2209">2209</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--validate' (':v') and '--no-validate' (':V') turn on/off </td>
</tr>
<tr>
<td class="h" >
<a name="2210">2210</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> DTD-validation of the parsed document. These option override </td>
</tr>
<tr>
<td class="h" >
<a name="2211">2211</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> current global setting of [validation]. </td>
</tr>
<tr>
<td class="h" >
<a name="2212">2212</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2213">2213</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--recover' (':r') and '--no-recover' (':R') turn on/off </td>
</tr>
<tr>
<td class="h" >
<a name="2214">2214</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> parser's ability to recover from non-fatal errors. These </td>
</tr>
<tr>
<td class="h" >
<a name="2215">2215</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> option override current global setting of [recovering]. </td>
</tr>
<tr>
<td class="h" >
<a name="2216">2216</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2217">2217</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--expand-entities' (':e') and '--no-expand-entities' (':E') </td>
</tr>
<tr>
<td class="h" >
<a name="2218">2218</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> turn on/off entity expansion, overriding current global </td>
</tr>
<tr>
<td class="h" >
<a name="2219">2219</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> setting of [parser-expands-entities]. </td>
</tr>
<tr>
<td class="h" >
<a name="2220">2220</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2221">2221</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--xinclude' (':x') and '--no-xinclude' (':X') turn on/off </td>
</tr>
<tr>
<td class="h" >
<a name="2222">2222</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> XInclude processing, overriding current global settings of </td>
</tr>
<tr>
<td class="h" >
<a name="2223">2223</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [parser-expands-xinclude]. </td>
</tr>
<tr>
<td class="h" >
<a name="2224">2224</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2225">2225</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--keep-blanks' (':b') and '--no-keep-blanks' (':B') control </td>
</tr>
<tr>
<td class="h" >
<a name="2226">2226</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> whether the parser should preserve so called ignorable </td>
</tr>
<tr>
<td class="h" >
<a name="2227">2227</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> whitespace. These option override current global setting of </td>
</tr>
<tr>
<td class="h" >
<a name="2228">2228</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [keep-blanks]. </td>
</tr>
<tr>
<td class="h" >
<a name="2229">2229</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2230">2230</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--pedantic' (':n') and '--no-pedantic' (':N') turn on/off </td>
</tr>
<tr>
<td class="h" >
<a name="2231">2231</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> pedantic parser flag. </td>
</tr>
<tr>
<td class="h" >
<a name="2232">2232</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2233">2233</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--load-ext-dtd' (':d') and '--no-load-ext-dtd' (':D') control </td>
</tr>
<tr>
<td class="h" >
<a name="2234">2234</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> whether the external DTD subset should be loaded with the </td>
</tr>
<tr>
<td class="h" >
<a name="2235">2235</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> document. These option override current global setting of </td>
</tr>
<tr>
<td class="h" >
<a name="2236">2236</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [load-ext-dtd]. </td>
</tr>
<tr>
<td class="h" >
<a name="2237">2237</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2238">2238</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--complete-attributes' (':a') and '--no-complete-attributes' </td>
</tr>
<tr>
<td class="h" >
<a name="2239">2239</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> (':A') turn on/off parse-time default attribute completion </td>
</tr>
<tr>
<td class="h" >
<a name="2240">2240</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> based on default values specified in the DTD. These option </td>
</tr>
<tr>
<td class="h" >
<a name="2241">2241</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> override current global setting of </td>
</tr>
<tr>
<td class="h" >
<a name="2242">2242</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [parser-completes-attributes]. </td>
</tr>
<tr>
<td class="h" >
<a name="2243">2243</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2244">2244</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: </td>
</tr>
<tr>
<td class="h" >
<a name="2245">2245</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $scratch/> $x := open mydoc.xml # open an XML document </td>
</tr>
<tr>
<td class="h" >
<a name="2246">2246</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2247">2247</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # open a HTML document from the Internet </td>
</tr>
<tr>
<td class="h" >
<a name="2248">2248</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $h:=open --format html "http://www.google.com/?q=xsh" </td>
</tr>
<tr>
<td class="h" >
<a name="2249">2249</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # quote file name if it contains whitespace </td>
</tr>
<tr>
<td class="h" >
<a name="2250">2250</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $y := open "document with a long name with spaces.xml" </td>
</tr>
<tr>
<td class="h" >
<a name="2251">2251</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2252">2252</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # use --format html or --format docbook to load these types </td>
</tr>
<tr>
<td class="h" >
<a name="2253">2253</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $z := open --format html index.htm </td>
</tr>
<tr>
<td class="h" >
<a name="2254">2254</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2255">2255</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # use --pipe flag to read output of a command </td>
</tr>
<tr>
<td class="h" >
<a name="2256">2256</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $z := open --format html --pipe 'wget -O - xsh.sourceforge.net/index.html' </td>
</tr>
<tr>
<td class="h" >
<a name="2257">2257</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2258">2258</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # use document variable to restrict XPath search to a </td>
</tr>
<tr>
<td class="h" >
<a name="2259">2259</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # given document </td>
</tr>
<tr>
<td class="h" >
<a name="2260">2260</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> ls $z//chapter/title </td>
</tr>
<tr>
<td class="h" >
<a name="2261">2261</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2262">2262</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2263">2263</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2264">2264</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2265">2265</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'create'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2266">2266</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: $doc := create [nodename]|[expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2267">2267</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2268">2268</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: new </td>
</tr>
<tr>
<td class="h" >
<a name="2269">2269</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2270">2270</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2271">2271</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Returns a new document object. The argument must evaluate </td>
</tr>
<tr>
<td class="h" >
<a name="2272">2272</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> either to a valid element name (possibly followed by some </td>
</tr>
<tr>
<td class="h" >
<a name="2273">2273</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> attribute declarations) to be used for the document element, </td>
</tr>
<tr>
<td class="h" >
<a name="2274">2274</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> or to a well-formed XML string. </td>
</tr>
<tr>
<td class="h" >
<a name="2275">2275</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2276">2276</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Unless [switch-to-new-documents] option is turned off, this </td>
</tr>
<tr>
<td class="h" >
<a name="2277">2277</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> command also changes current node to the new document. </td>
</tr>
<tr>
<td class="h" >
<a name="2278">2278</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2279">2279</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: </td>
</tr>
<tr>
<td class="h" >
<a name="2280">2280</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $scratch/> $t1 := create root </td>
</tr>
<tr>
<td class="h" >
<a name="2281">2281</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $t1> ls $t1 </td>
</tr>
<tr>
<td class="h" >
<a name="2282">2282</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <?xml version="1.0" encoding="utf-8"?> </td>
</tr>
<tr>
<td class="h" >
<a name="2283">2283</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <root/> </td>
</tr>
<tr>
<td class="h" >
<a name="2284">2284</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2285">2285</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $t1> $t2 := create "root id='r1'" </td>
</tr>
<tr>
<td class="h" >
<a name="2286">2286</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $t2> ls $t2 </td>
</tr>
<tr>
<td class="h" >
<a name="2287">2287</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <?xml version="1.0" encoding="utf-8"?> </td>
</tr>
<tr>
<td class="h" >
<a name="2288">2288</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <root id="r1"/> </td>
</tr>
<tr>
<td class="h" >
<a name="2289">2289</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2290">2290</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $t2> create "<root id='r0'>Just a <b>test</b></root>" </td>
</tr>
<tr>
<td class="h" >
<a name="2291">2291</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> /> ls / </td>
</tr>
<tr>
<td class="h" >
<a name="2292">2292</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <?xml version="1.0" encoding="utf-8"?> </td>
</tr>
<tr>
<td class="h" >
<a name="2293">2293</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <root id='r0'>Just a <b>test</b></root> </td>
</tr>
<tr>
<td class="h" >
<a name="2294">2294</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2295">2295</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: open clone </td>
</tr>
<tr>
<td class="h" >
<a name="2296">2296</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2297">2297</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2298">2298</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2299">2299</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'new'}=$HELP{'create'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2300">2300</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2301">2301</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'save'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2302">2302</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: save [--format|:F html|xml] [--xinclude|:x] </td>
</tr>
<tr>
<td class="h" >
<a name="2303">2303</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--file|:f [filename] | </td>
</tr>
<tr>
<td class="h" >
<a name="2304">2304</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> --pipe|:p [filename] | </td>
</tr>
<tr>
<td class="h" >
<a name="2305">2305</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> --string|:s | </td>
</tr>
<tr>
<td class="h" >
<a name="2306">2306</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> --print|:r ] </td>
</tr>
<tr>
<td class="h" >
<a name="2307">2307</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--subtree|:S] </td>
</tr>
<tr>
<td class="h" >
<a name="2308">2308</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--indent|:i | --no-indent|:I] </td>
</tr>
<tr>
<td class="h" >
<a name="2309">2309</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--skip-dtd|:d | --no-skip-dtd|:D] </td>
</tr>
<tr>
<td class="h" >
<a name="2310">2310</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--skip-empty-tags|:t | --no-skip-empty-tags|:T] </td>
</tr>
<tr>
<td class="h" >
<a name="2311">2311</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--skip-xmldecl|:x] </td>
</tr>
<tr>
<td class="h" >
<a name="2312">2312</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--encoding|:e [encoding]] </td>
</tr>
<tr>
<td class="h" >
<a name="2313">2313</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [document] </td>
</tr>
<tr>
<td class="h" >
<a name="2314">2314</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2315">2315</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2316">2316</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This takes a given [document], serializes it to XML or HTML </td>
</tr>
<tr>
<td class="h" >
<a name="2317">2317</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> and either saves the result to its original file or another </td>
</tr>
<tr>
<td class="h" >
<a name="2318">2318</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> file (default), pipes it to an external command, prints it on </td>
</tr>
<tr>
<td class="h" >
<a name="2319">2319</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> standard output, or simply returns it. Without arguments it </td>
</tr>
<tr>
<td class="h" >
<a name="2320">2320</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> simply saves current document to its original file. </td>
</tr>
<tr>
<td class="h" >
<a name="2321">2321</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2322">2322</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--file|:f' option may be used to specify an output file-name. </td>
</tr>
<tr>
<td class="h" >
<a name="2323">2323</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> By default, the original document's file-name is used. </td>
</tr>
<tr>
<td class="h" >
<a name="2324">2324</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2325">2325</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--pipe|:p' option specifies, that the output should be piped </td>
</tr>
<tr>
<td class="h" >
<a name="2326">2326</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> to an external command specified as the option's argument. </td>
</tr>
<tr>
<td class="h" >
<a name="2327">2327</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2328">2328</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--print|:r' option specifies, that the output should be </td>
</tr>
<tr>
<td class="h" >
<a name="2329">2329</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> printed on standard output. </td>
</tr>
<tr>
<td class="h" >
<a name="2330">2330</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2331">2331</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--string|:s' option specifies, that the output should be </td>
</tr>
<tr>
<td class="h" >
<a name="2332">2332</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> returned by the command as a string. In this case, the result </td>
</tr>
<tr>
<td class="h" >
<a name="2333">2333</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> is always in UTF8, regardless on which encoding is specified </td>
</tr>
<tr>
<td class="h" >
<a name="2334">2334</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> in the document or using '--encoding' option. </td>
</tr>
<tr>
<td class="h" >
<a name="2335">2335</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2336">2336</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> The above four options are mutually exclusive. </td>
</tr>
<tr>
<td class="h" >
<a name="2337">2337</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2338">2338</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--format' option may be used to specify the output format. </td>
</tr>
<tr>
<td class="h" >
<a name="2339">2339</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> It's argument should be either 'xml', 'html' or an expression </td>
</tr>
<tr>
<td class="h" >
<a name="2340">2340</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> evaluating to one of these. If not specified, XML output is </td>
</tr>
<tr>
<td class="h" >
<a name="2341">2341</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> assumed. Note, that a document should be saved as HTML only if </td>
</tr>
<tr>
<td class="h" >
<a name="2342">2342</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> it actually is a HTML document, otherwise the result would be </td>
</tr>
<tr>
<td class="h" >
<a name="2343">2343</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> an invalid XML instance. Note also, that the optional encoding </td>
</tr>
<tr>
<td class="h" >
<a name="2344">2344</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> parameter only forces character conversion; it is up to the </td>
</tr>
<tr>
<td class="h" >
<a name="2345">2345</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> user to declare the document encoding in the appropriate HTML </td>
</tr>
<tr>
<td class="h" >
<a name="2346">2346</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <META> tag, if needed. </td>
</tr>
<tr>
<td class="h" >
<a name="2347">2347</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2348">2348</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--xinclude' automatically implies XML format and can be used </td>
</tr>
<tr>
<td class="h" >
<a name="2349">2349</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> to force XSH2 to save all already expanded XInclude sections </td>
</tr>
<tr>
<td class="h" >
<a name="2350">2350</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> back to their original files while replacing them with </td>
</tr>
<tr>
<td class="h" >
<a name="2351">2351</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <xi:include> tags in the main XML file. Moreover, all material </td>
</tr>
<tr>
<td class="h" >
<a name="2352">2352</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> included within <include> elements from the </td>
</tr>
<tr>
<td class="h" >
<a name="2353">2353</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> http://www.w3.org/2001/XInclude namespace is saved to separate </td>
</tr>
<tr>
<td class="h" >
<a name="2354">2354</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> files too according to the 'href' attribute, leaving only </td>
</tr>
<tr>
<td class="h" >
<a name="2355">2355</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> empty <include> element in the root file. This feature may be </td>
</tr>
<tr>
<td class="h" >
<a name="2356">2356</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> used to split the document to a new set of XInclude fragments. </td>
</tr>
<tr>
<td class="h" >
<a name="2357">2357</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2358">2358</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If the '--subtree' (':S') flag is used, only the subtree of </td>
</tr>
<tr>
<td class="h" >
<a name="2359">2359</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the specified node is saved instead of the complete document </td>
</tr>
<tr>
<td class="h" >
<a name="2360">2360</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> (this flag cannot be used with '--html' format). </td>
</tr>
<tr>
<td class="h" >
<a name="2361">2361</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2362">2362</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--indent' (':i') and '--no-indent' (':I') may be used to </td>
</tr>
<tr>
<td class="h" >
<a name="2363">2363</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> enforce/suppress indentation, overriding current global </td>
</tr>
<tr>
<td class="h" >
<a name="2364">2364</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> setting of [indent]. </td>
</tr>
<tr>
<td class="h" >
<a name="2365">2365</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2366">2366</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--skip-dtd' (':d') and '--no-skip-dtd' (':D') may be used to </td>
</tr>
<tr>
<td class="h" >
<a name="2367">2367</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> enforce/suppress skipping DTD declaration and internal subset </td>
</tr>
<tr>
<td class="h" >
<a name="2368">2368</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> on output, overriding current global setting of [skip-dtd]. </td>
</tr>
<tr>
<td class="h" >
<a name="2369">2369</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2370">2370</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--empty-tags' (':t') and '--no-empty-tags' (':T') may be used </td>
</tr>
<tr>
<td class="h" >
<a name="2371">2371</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> to override current global setting of [empty-tags]. </td>
</tr>
<tr>
<td class="h" >
<a name="2372">2372</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--no-empty-tags' instructs XSH2 to serialize elements with no </td>
</tr>
<tr>
<td class="h" >
<a name="2373">2373</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> child nodes as start-tag/end-tag pair '<element></element>' </td>
</tr>
<tr>
<td class="h" >
<a name="2374">2374</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> instead of using a short empty-tag form '<element/>'. </td>
</tr>
<tr>
<td class="h" >
<a name="2375">2375</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2376">2376</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--skip-xmldecl' (':x') instructs XSH2 to omit the XML </td>
</tr>
<tr>
<td class="h" >
<a name="2377">2377</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> declaration from the saved document. Note however, that XML </td>
</tr>
<tr>
<td class="h" >
<a name="2378">2378</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> declaration is obligatory for XML documents. It usually looks </td>
</tr>
<tr>
<td class="h" >
<a name="2379">2379</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> like '<?xml version="1.0" ...?>'. </td>
</tr>
<tr>
<td class="h" >
<a name="2380">2380</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2381">2381</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--backup' (':b') and '--no-backup' (':B') can be used to </td>
</tr>
<tr>
<td class="h" >
<a name="2382">2382</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> enforce/suppress creation of a backup file if target file </td>
</tr>
<tr>
<td class="h" >
<a name="2383">2383</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> already exists. Using these options overrides current global </td>
</tr>
<tr>
<td class="h" >
<a name="2384">2384</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> setting of [backups]. </td>
</tr>
<tr>
<td class="h" >
<a name="2385">2385</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2386">2386</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--encoding' followed by a [encoding] instructs XSH2 to save </td>
</tr>
<tr>
<td class="h" >
<a name="2387">2387</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the document in the specified encoding. In case of XML output, </td>
</tr>
<tr>
<td class="h" >
<a name="2388">2388</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the <?xml?> declaration is automatically changed accordingly. </td>
</tr>
<tr>
<td class="h" >
<a name="2389">2389</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2390">2390</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: Use save to preview current HTML document in Lynx </td>
</tr>
<tr>
<td class="h" >
<a name="2391">2391</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2392">2392</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> save --format html --pipe 'lynx -stdin' </td>
</tr>
<tr>
<td class="h" >
<a name="2393">2393</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2394">2394</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: open close enc documents </td>
</tr>
<tr>
<td class="h" >
<a name="2395">2395</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2396">2396</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2397">2397</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2398">2398</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2399">2399</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'set-dtd'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2400">2400</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: set-dtd [--internal] [--name|:n [expression]] </td>
</tr>
<tr>
<td class="h" >
<a name="2401">2401</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--public|:p [expression]] </td>
</tr>
<tr>
<td class="h" >
<a name="2402">2402</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [--system|:s [expression]] </td>
</tr>
<tr>
<td class="h" >
<a name="2403">2403</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2404">2404</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2405">2405</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: set_dtd </td>
</tr>
<tr>
<td class="h" >
<a name="2406">2406</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2407">2407</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2408">2408</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Set external (default) or internal DTD for a given document. </td>
</tr>
<tr>
<td class="h" >
<a name="2409">2409</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If no [document] is given, the current document is used. At </td>
</tr>
<tr>
<td class="h" >
<a name="2410">2410</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> least one of '--public' and '--system' options should be used </td>
</tr>
<tr>
<td class="h" >
<a name="2411">2411</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> to specify the PUBLIC and SYSTEM identifiers of the DTD. If </td>
</tr>
<tr>
<td class="h" >
<a name="2412">2412</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--name' parameter is not provided, name of the document root </td>
</tr>
<tr>
<td class="h" >
<a name="2413">2413</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> element is used as DTD name. </td>
</tr>
<tr>
<td class="h" >
<a name="2414">2414</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2415">2415</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: dtd validate </td>
</tr>
<tr>
<td class="h" >
<a name="2416">2416</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2417">2417</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2418">2418</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2419">2419</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'set_dtd'}=$HELP{'set-dtd'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2420">2420</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2421">2421</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'dtd'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2422">2422</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: dtd [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2423">2423</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2424">2424</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2425">2425</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Print external or internal DTD for a given document. If used </td>
</tr>
<tr>
<td class="h" >
<a name="2426">2426</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> without arguments prints DTD of the current document. </td>
</tr>
<tr>
<td class="h" >
<a name="2427">2427</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2428">2428</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: set-dtd validate </td>
</tr>
<tr>
<td class="h" >
<a name="2429">2429</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2430">2430</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2431">2431</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2432">2432</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2433">2433</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'set-enc'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2434">2434</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: set-enc [encoding] [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2435">2435</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2436">2436</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2437">2437</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Changes character encoding of a given document. If no </td>
</tr>
<tr>
<td class="h" >
<a name="2438">2438</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [document] is given, the command applies to the current </td>
</tr>
<tr>
<td class="h" >
<a name="2439">2439</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> document. This has two effects: changing the XMLDecl encoding </td>
</tr>
<tr>
<td class="h" >
<a name="2440">2440</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> declaration in the document prolog to display the new encoding </td>
</tr>
<tr>
<td class="h" >
<a name="2441">2441</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> and making all future [save] operations on the document </td>
</tr>
<tr>
<td class="h" >
<a name="2442">2442</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> default to the given charset. </td>
</tr>
<tr>
<td class="h" >
<a name="2443">2443</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2444">2444</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: </td>
</tr>
<tr>
<td class="h" >
<a name="2445">2445</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> ls </td>
</tr>
<tr>
<td class="h" >
<a name="2446">2446</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <?xml version="1.0" encoding="iso-8859-1"?> </td>
</tr>
<tr>
<td class="h" >
<a name="2447">2447</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <foo>...</foo> </td>
</tr>
<tr>
<td class="h" >
<a name="2448">2448</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> set-enc "utf-8" </td>
</tr>
<tr>
<td class="h" >
<a name="2449">2449</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> ls </td>
</tr>
<tr>
<td class="h" >
<a name="2450">2450</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <?xml version="1.0" encoding="utf-8"?> </td>
</tr>
<tr>
<td class="h" >
<a name="2451">2451</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <foo>...</foo> </td>
</tr>
<tr>
<td class="h" >
<a name="2452">2452</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> save # saves the file in UTF-8 encoding </td>
</tr>
<tr>
<td class="h" >
<a name="2453">2453</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2454">2454</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: enc doc-info </td>
</tr>
<tr>
<td class="h" >
<a name="2455">2455</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2456">2456</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2457">2457</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2458">2458</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2459">2459</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'set-standalone'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2460">2460</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: set-standalone [expression] [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2461">2461</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2462">2462</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2463">2463</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Changes the value of 'standalone' declaration in the XMLDecl </td>
</tr>
<tr>
<td class="h" >
<a name="2464">2464</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> prolog of a document. The [expression] should evaluate to </td>
</tr>
<tr>
<td class="h" >
<a name="2465">2465</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> either 1 or 0 or ''yes'' or ''no''. The result of applying the </td>
</tr>
<tr>
<td class="h" >
<a name="2466">2466</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> command on other values is not specified. If no [document] is </td>
</tr>
<tr>
<td class="h" >
<a name="2467">2467</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> given, the command applies to the current document. </td>
</tr>
<tr>
<td class="h" >
<a name="2468">2468</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2469">2469</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: doc-info </td>
</tr>
<tr>
<td class="h" >
<a name="2470">2470</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2471">2471</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2472">2472</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2473">2473</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2474">2474</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'enc'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2475">2475</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: enc [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2476">2476</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2477">2477</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2478">2478</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Print the original document encoding string. If no [document] </td>
</tr>
<tr>
<td class="h" >
<a name="2479">2479</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> is given, the current document is used. </td>
</tr>
<tr>
<td class="h" >
<a name="2480">2480</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2481">2481</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: set-enc </td>
</tr>
<tr>
<td class="h" >
<a name="2482">2482</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2483">2483</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2484">2484</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2485">2485</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2486">2486</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'validate'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2487">2487</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: validate [--yesno|:q] [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2488">2488</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate [--yesno|:q] [--dtd|:D | --relaxng|:R | --schema|:S] --file|:f [filename]] [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2489">2489</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate [--yesno|:q] [--dtd|:D | --relaxng|:R | --schema|:S] --string|:s [expression]] [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2490">2490</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate [--yesno|:q] [--dtd|:D | --relaxng|:R | --schema|:S] --doc|:d [document]] [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2491">2491</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate [--yesno|:q] [--dtd|:d] --public|:p [expression] [--file|:f [expression]] [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2492">2492</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2493">2493</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2494">2494</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command validates the current document or a document </td>
</tr>
<tr>
<td class="h" >
<a name="2495">2495</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> specified in the argument against a DTD, RelaxNG or XSD </td>
</tr>
<tr>
<td class="h" >
<a name="2496">2496</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> schema. If '--yesno' or ':q' is specified, only prints 'yes' </td>
</tr>
<tr>
<td class="h" >
<a name="2497">2497</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> and returns 1 if the document validates or 'no' and returns 0 </td>
</tr>
<tr>
<td class="h" >
<a name="2498">2498</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if it does not. Without '--yesno', it throws an exception with </td>
</tr>
<tr>
<td class="h" >
<a name="2499">2499</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> a complete validation error message if the document doesn't </td>
</tr>
<tr>
<td class="h" >
<a name="2500">2500</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate. </td>
</tr>
<tr>
<td class="h" >
<a name="2501">2501</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2502">2502</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--dtd' or ':D' forces DTD validation (default). </td>
</tr>
<tr>
<td class="h" >
<a name="2503">2503</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2504">2504</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--relaxng' or ':R' forces RelaxNG validation. Only XML </td>
</tr>
<tr>
<td class="h" >
<a name="2505">2505</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> RelaxNG grammars are supported. </td>
</tr>
<tr>
<td class="h" >
<a name="2506">2506</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2507">2507</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--schema' or ':S' forces W3C XML Schema validation (XSD). </td>
</tr>
<tr>
<td class="h" >
<a name="2508">2508</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Support for schema validation may still be incomplete (see </td>
</tr>
<tr>
<td class="h" >
<a name="2509">2509</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> libxml2 home page for more details). </td>
</tr>
<tr>
<td class="h" >
<a name="2510">2510</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2511">2511</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> A DTD subset can be specified by its PUBLIC identifier (with </td>
</tr>
<tr>
<td class="h" >
<a name="2512">2512</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '--public'), by its SYSTEM identifier (with '--file'), or as a </td>
</tr>
<tr>
<td class="h" >
<a name="2513">2513</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> string (with '--string'). If none of these options is used, </td>
</tr>
<tr>
<td class="h" >
<a name="2514">2514</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validation is performed against the internal or external DTD </td>
</tr>
<tr>
<td class="h" >
<a name="2515">2515</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> subset of the document being validated. </td>
</tr>
<tr>
<td class="h" >
<a name="2516">2516</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2517">2517</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> RelaxNG grammars and XML Schemas can either be specified </td>
</tr>
<tr>
<td class="h" >
<a name="2518">2518</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> either as a filename or url (with '--file'), as a string </td>
</tr>
<tr>
<td class="h" >
<a name="2519">2519</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> containing (with '--string'), or as a document currently open </td>
</tr>
<tr>
<td class="h" >
<a name="2520">2520</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> in XSH2 (with '--doc'). </td>
</tr>
<tr>
<td class="h" >
<a name="2521">2521</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2522">2522</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: </td>
</tr>
<tr>
<td class="h" >
<a name="2523">2523</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $mydoc := open "test.xml" </td>
</tr>
<tr>
<td class="h" >
<a name="2524">2524</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # in all examples below, mydoc can be omitted </td>
</tr>
<tr>
<td class="h" >
<a name="2525">2525</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate --yesno $mydoc; # validate against the document's DOCTYPE </td>
</tr>
<tr>
<td class="h" >
<a name="2526">2526</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate --public "-//OASIS//DTD DocBook XML V4.1.2//EN" $mydoc </td>
</tr>
<tr>
<td class="h" >
<a name="2527">2527</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate --file "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" $mydoc </td>
</tr>
<tr>
<td class="h" >
<a name="2528">2528</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2529">2529</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: </td>
</tr>
<tr>
<td class="h" >
<a name="2530">2530</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate --relaxng --file "test.rng" $mydoc </td>
</tr>
<tr>
<td class="h" >
<a name="2531">2531</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate --relaxng --string $relaxschema $mydoc </td>
</tr>
<tr>
<td class="h" >
<a name="2532">2532</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $rng := open "test.rng" </td>
</tr>
<tr>
<td class="h" >
<a name="2533">2533</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate --relaxng --doc $rng $mydoc </td>
</tr>
<tr>
<td class="h" >
<a name="2534">2534</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2535">2535</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: </td>
</tr>
<tr>
<td class="h" >
<a name="2536">2536</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate --schema --file "test.xsd" $mydoc </td>
</tr>
<tr>
<td class="h" >
<a name="2537">2537</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate --schema --string $xsdschema $mydoc </td>
</tr>
<tr>
<td class="h" >
<a name="2538">2538</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $xsd := open "test.xsd" </td>
</tr>
<tr>
<td class="h" >
<a name="2539">2539</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> validate --schema --doc $xsd $mydoc </td>
</tr>
<tr>
<td class="h" >
<a name="2540">2540</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2541">2541</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: dtd </td>
</tr>
<tr>
<td class="h" >
<a name="2542">2542</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2543">2543</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2544">2544</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2545">2545</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2546">2546</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'exit'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2547">2547</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: exit [[expression]] </td>
</tr>
<tr>
<td class="h" >
<a name="2548">2548</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2549">2549</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: quit </td>
</tr>
<tr>
<td class="h" >
<a name="2550">2550</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2551">2551</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2552">2552</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Exit xsh, optionally with an exit-code resulting from </td>
</tr>
<tr>
<td class="h" >
<a name="2553">2553</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> evaluation of a given [expression]. </td>
</tr>
<tr>
<td class="h" >
<a name="2554">2554</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2555">2555</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> WARNING: No files are saved on exit. </td>
</tr>
<tr>
<td class="h" >
<a name="2556">2556</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2557">2557</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2558">2558</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2559">2559</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'quit'}=$HELP{'exit'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2560">2560</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2561">2561</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'process-xinclude'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2562">2562</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: process-xinclude [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2563">2563</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2564">2564</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: process_xinclude process-xincludes process_xincludes xinclude xincludes load_xincludes load-xincludes load_xinclude load-xinclude </td>
</tr>
<tr>
<td class="h" >
<a name="2565">2565</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2566">2566</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2567">2567</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Replace any xinclude tags in a given [document] with the </td>
</tr>
<tr>
<td class="h" >
<a name="2568">2568</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> corresponding content. See http://www.w3.org/TR/xinclude/ to </td>
</tr>
<tr>
<td class="h" >
<a name="2569">2569</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> find out more about XInclude technology. </td>
</tr>
<tr>
<td class="h" >
<a name="2570">2570</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2571">2571</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: parser-expands-xinclude </td>
</tr>
<tr>
<td class="h" >
<a name="2572">2572</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2573">2573</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2574">2574</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2575">2575</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'process_xinclude'}=$HELP{'process-xinclude'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2576">2576</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'process-xincludes'}=$HELP{'process-xinclude'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2577">2577</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'process_xincludes'}=$HELP{'process-xinclude'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2578">2578</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'xinclude'}=$HELP{'process-xinclude'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2579">2579</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'xincludes'}=$HELP{'process-xinclude'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2580">2580</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'load_xincludes'}=$HELP{'process-xinclude'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2581">2581</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'load-xincludes'}=$HELP{'process-xinclude'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2582">2582</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'load_xinclude'}=$HELP{'process-xinclude'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2583">2583</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'load-xinclude'}=$HELP{'process-xinclude'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2584">2584</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2585">2585</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'cd'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2586">2586</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: cd [[expression]] </td>
</tr>
<tr>
<td class="h" >
<a name="2587">2587</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2588">2588</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: chxpath </td>
</tr>
<tr>
<td class="h" >
<a name="2589">2589</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2590">2590</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2591">2591</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Evaluate given [expression] to a node-list and change current </td>
</tr>
<tr>
<td class="h" >
<a name="2592">2592</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> context node to the first node in it. </td>
</tr>
<tr>
<td class="h" >
<a name="2593">2593</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2594">2594</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2595">2595</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2596">2596</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'chxpath'}=$HELP{'cd'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2597">2597</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2598">2598</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'pwd'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2599">2599</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: pwd [--id|:i] </td>
</tr>
<tr>
<td class="h" >
<a name="2600">2600</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2601">2601</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2602">2602</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Print XPath leading to the current context node (equivalent to </td>
</tr>
<tr>
<td class="h" >
<a name="2603">2603</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'locate .'). </td>
</tr>
<tr>
<td class="h" >
<a name="2604">2604</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2605">2605</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If flag '--id' (':i') is used then ID-based shortcut is </td>
</tr>
<tr>
<td class="h" >
<a name="2606">2606</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> allowed in the resulting location path. That means that if the </td>
</tr>
<tr>
<td class="h" >
<a name="2607">2607</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> current node or some of its ancestors has an ID attribute </td>
</tr>
<tr>
<td class="h" >
<a name="2608">2608</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> (either 'xml:id' or one specified in a DTD) then the </td>
</tr>
<tr>
<td class="h" >
<a name="2609">2609</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> corresponding segment of the canonical location path is </td>
</tr>
<tr>
<td class="h" >
<a name="2610">2610</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> replaced by the 'id()' function which jumps directly to an </td>
</tr>
<tr>
<td class="h" >
<a name="2611">2611</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> element based on its ID. </td>
</tr>
<tr>
<td class="h" >
<a name="2612">2612</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2613">2613</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: locate xsh:path </td>
</tr>
<tr>
<td class="h" >
<a name="2614">2614</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2615">2615</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2616">2616</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2617">2617</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2618">2618</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'locate'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2619">2619</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: locate [--id|:i] [xpath] </td>
</tr>
<tr>
<td class="h" >
<a name="2620">2620</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2621">2621</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2622">2622</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Print canonical XPaths leading to nodes matched by a given </td>
</tr>
<tr>
<td class="h" >
<a name="2623">2623</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [xpath]. </td>
</tr>
<tr>
<td class="h" >
<a name="2624">2624</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2625">2625</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If flag '--id' (':i') is used then ID-based shortcuts are </td>
</tr>
<tr>
<td class="h" >
<a name="2626">2626</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> allowed in the resulting location paths. That means that if </td>
</tr>
<tr>
<td class="h" >
<a name="2627">2627</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the node or some of its ancestors has an ID attribute (either </td>
</tr>
<tr>
<td class="h" >
<a name="2628">2628</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'xml:id' or one specified in a DTD) then the corresponding </td>
</tr>
<tr>
<td class="h" >
<a name="2629">2629</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> segment of the canonical location path is replaced by the </td>
</tr>
<tr>
<td class="h" >
<a name="2630">2630</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'id()' function which jumps directly to an element based on </td>
</tr>
<tr>
<td class="h" >
<a name="2631">2631</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> its ID. </td>
</tr>
<tr>
<td class="h" >
<a name="2632">2632</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2633">2633</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: pwd </td>
</tr>
<tr>
<td class="h" >
<a name="2634">2634</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2635">2635</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2636">2636</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2637">2637</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2638">2638</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'xupdate'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2639">2639</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: xupdate [document] [[document]] </td>
</tr>
<tr>
<td class="h" >
<a name="2640">2640</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2641">2641</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2642">2642</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Modify the current document or the document specified by the </td>
</tr>
<tr>
<td class="h" >
<a name="2643">2643</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> second [document] argument according to XUpdate commands of </td>
</tr>
<tr>
<td class="h" >
<a name="2644">2644</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the first [document] argument. XUpdate, or more specifically </td>
</tr>
<tr>
<td class="h" >
<a name="2645">2645</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the XML Update Language, aims to be a language for updating </td>
</tr>
<tr>
<td class="h" >
<a name="2646">2646</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> XML documents. </td>
</tr>
<tr>
<td class="h" >
<a name="2647">2647</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2648">2648</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> XUpdate language is described in XUpdate Working Draft at </td>
</tr>
<tr>
<td class="h" >
<a name="2649">2649</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> http://xmldb-org.sourceforge.net/xupdate/xupdate-wd.html. </td>
</tr>
<tr>
<td class="h" >
<a name="2650">2650</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2651">2651</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> XUpdate output can be generated for example by Python xmldiff </td>
</tr>
<tr>
<td class="h" >
<a name="2652">2652</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> utility from http://www.logilab.org/projects/xmldiff/. </td>
</tr>
<tr>
<td class="h" >
<a name="2653">2653</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2654">2654</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2655">2655</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2656">2656</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2657">2657</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'verbose'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2658">2658</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: verbose </td>
</tr>
<tr>
<td class="h" >
<a name="2659">2659</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2660">2660</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2661">2661</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Turn on verbose messages (default). </td>
</tr>
<tr>
<td class="h" >
<a name="2662">2662</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2663">2663</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This is equivalent to setting '$QUIET' variable to 0. </td>
</tr>
<tr>
<td class="h" >
<a name="2664">2664</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2665">2665</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: quiet </td>
</tr>
<tr>
<td class="h" >
<a name="2666">2666</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2667">2667</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2668">2668</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2669">2669</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2670">2670</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'test-mode'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2671">2671</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: test-mode </td>
</tr>
<tr>
<td class="h" >
<a name="2672">2672</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2673">2673</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: test_mode </td>
</tr>
<tr>
<td class="h" >
<a name="2674">2674</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2675">2675</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2676">2676</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Switch into a mode in which no commands are actually executed </td>
</tr>
<tr>
<td class="h" >
<a name="2677">2677</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> and only command syntax is checked. </td>
</tr>
<tr>
<td class="h" >
<a name="2678">2678</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2679">2679</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This is equivalent to setting '$TEST_MODE' variable to 1. </td>
</tr>
<tr>
<td class="h" >
<a name="2680">2680</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2681">2681</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: run-mode </td>
</tr>
<tr>
<td class="h" >
<a name="2682">2682</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2683">2683</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2684">2684</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2685">2685</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'test_mode'}=$HELP{'test-mode'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2686">2686</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2687">2687</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'run-mode'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2688">2688</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: run-mode </td>
</tr>
<tr>
<td class="h" >
<a name="2689">2689</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2690">2690</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: run_mode </td>
</tr>
<tr>
<td class="h" >
<a name="2691">2691</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2692">2692</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2693">2693</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Switch from the [test-mode] back to the normal execution mode. </td>
</tr>
<tr>
<td class="h" >
<a name="2694">2694</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2695">2695</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This is equivalent to setting '$TEST_MODE' variable to 0. </td>
</tr>
<tr>
<td class="h" >
<a name="2696">2696</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2697">2697</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: test-mode </td>
</tr>
<tr>
<td class="h" >
<a name="2698">2698</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2699">2699</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2700">2700</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2701">2701</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'run_mode'}=$HELP{'run-mode'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2702">2702</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2703">2703</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'debug'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2704">2704</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: debug </td>
</tr>
<tr>
<td class="h" >
<a name="2705">2705</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2706">2706</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2707">2707</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Turn on debugging messages. </td>
</tr>
<tr>
<td class="h" >
<a name="2708">2708</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2709">2709</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This is equivalent to setting '$DEBUG' variable to 1. </td>
</tr>
<tr>
<td class="h" >
<a name="2710">2710</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2711">2711</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: nodebug </td>
</tr>
<tr>
<td class="h" >
<a name="2712">2712</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2713">2713</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2714">2714</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2715">2715</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2716">2716</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'nodebug'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2717">2717</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: nodebug </td>
</tr>
<tr>
<td class="h" >
<a name="2718">2718</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2719">2719</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2720">2720</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Turn off debugging messages. </td>
</tr>
<tr>
<td class="h" >
<a name="2721">2721</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2722">2722</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This is equivalent to setting '$DEBUG' variable to 0. </td>
</tr>
<tr>
<td class="h" >
<a name="2723">2723</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2724">2724</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: debug </td>
</tr>
<tr>
<td class="h" >
<a name="2725">2725</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2726">2726</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2727">2727</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2728">2728</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2729">2729</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'version'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2730">2730</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: version </td>
</tr>
<tr>
<td class="h" >
<a name="2731">2731</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2732">2732</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2733">2733</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Prints program version plus version numbers of the most </td>
</tr>
<tr>
<td class="h" >
<a name="2734">2734</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> important libraries used. </td>
</tr>
<tr>
<td class="h" >
<a name="2735">2735</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2736">2736</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2737">2737</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2738">2738</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2739">2739</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'validation'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2740">2740</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: validation [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2741">2741</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2742">2742</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2743">2743</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Turn on validation during the parse process if the </td>
</tr>
<tr>
<td class="h" >
<a name="2744">2744</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> [expression] is non-zero or off otherwise. Defaults to off. </td>
</tr>
<tr>
<td class="h" >
<a name="2745">2745</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2746">2746</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$VALIDATION' </td>
</tr>
<tr>
<td class="h" >
<a name="2747">2747</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2748">2748</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2749">2749</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2750">2750</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2751">2751</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2752">2752</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'recovering'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2753">2753</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: recovering [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2754">2754</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2755">2755</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2756">2756</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If the [expression] evaluates to non-zero value, turn on the </td>
</tr>
<tr>
<td class="h" >
<a name="2757">2757</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> recovering parser mode on; turn it off otherwise. Defaults to </td>
</tr>
<tr>
<td class="h" >
<a name="2758">2758</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> off. </td>
</tr>
<tr>
<td class="h" >
<a name="2759">2759</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2760">2760</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Note, that the in the recovering mode, validation is not </td>
</tr>
<tr>
<td class="h" >
<a name="2761">2761</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> performed by the parser even if the validation flag is on. </td>
</tr>
<tr>
<td class="h" >
<a name="2762">2762</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2763">2763</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> The recover mode helps to efficiently recover documents that </td>
</tr>
<tr>
<td class="h" >
<a name="2764">2764</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> are almost well-formed. This for example includes documents </td>
</tr>
<tr>
<td class="h" >
<a name="2765">2765</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> without a close tag for the document element (or any other </td>
</tr>
<tr>
<td class="h" >
<a name="2766">2766</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> element inside the document). </td>
</tr>
<tr>
<td class="h" >
<a name="2767">2767</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2768">2768</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$RECOVERING' </td>
</tr>
<tr>
<td class="h" >
<a name="2769">2769</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2770">2770</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2771">2771</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2772">2772</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2773">2773</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2774">2774</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'parser-expands-entities'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2775">2775</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: parser-expands-entities [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2776">2776</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2777">2777</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: parser_expands_entities </td>
</tr>
<tr>
<td class="h" >
<a name="2778">2778</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2779">2779</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2780">2780</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If the [expression] is non-zero enable the entity expansion </td>
</tr>
<tr>
<td class="h" >
<a name="2781">2781</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> during the parse process; disable it otherwise. If entity </td>
</tr>
<tr>
<td class="h" >
<a name="2782">2782</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> expansion is disabled, any external entity references in </td>
</tr>
<tr>
<td class="h" >
<a name="2783">2783</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> parsed documents are preserved as references. By default, </td>
</tr>
<tr>
<td class="h" >
<a name="2784">2784</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> entity expansion is enabled. </td>
</tr>
<tr>
<td class="h" >
<a name="2785">2785</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2786">2786</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the </td>
</tr>
<tr>
<td class="h" >
<a name="2787">2787</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '$PARSER_EXPANDS_ENTITIES' variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2788">2788</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2789">2789</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2790">2790</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2791">2791</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'parser_expands_entities'}=$HELP{'parser-expands-entities'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2792">2792</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2793">2793</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'keep-blanks'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2794">2794</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: keep-blanks [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2795">2795</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2796">2796</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: keep_blanks </td>
</tr>
<tr>
<td class="h" >
<a name="2797">2797</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2798">2798</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2799">2799</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Allows you to turn on/off preserving the parser's default </td>
</tr>
<tr>
<td class="h" >
<a name="2800">2800</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> behavior of preserving all whitespace in the document. Setting </td>
</tr>
<tr>
<td class="h" >
<a name="2801">2801</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> this option to 0, instructs the XML parser to ignore </td>
</tr>
<tr>
<td class="h" >
<a name="2802">2802</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> whitespace occurring between adjacent element nodes, so that </td>
</tr>
<tr>
<td class="h" >
<a name="2803">2803</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> no extra text nodes are created for it. </td>
</tr>
<tr>
<td class="h" >
<a name="2804">2804</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2805">2805</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$KEEP_BLANKS' </td>
</tr>
<tr>
<td class="h" >
<a name="2806">2806</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2807">2807</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2808">2808</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2809">2809</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2810">2810</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'keep_blanks'}=$HELP{'keep-blanks'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2811">2811</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2812">2812</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'pedantic-parser'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2813">2813</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: pedantic-parser [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2814">2814</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2815">2815</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: pedantic_parser </td>
</tr>
<tr>
<td class="h" >
<a name="2816">2816</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2817">2817</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2818">2818</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If you wish, you can make the XML parser little more pedantic </td>
</tr>
<tr>
<td class="h" >
<a name="2819">2819</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> by passing a non-zero [expression] to this command. </td>
</tr>
<tr>
<td class="h" >
<a name="2820">2820</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2821">2821</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$PEDANTIC_PARSER' </td>
</tr>
<tr>
<td class="h" >
<a name="2822">2822</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2823">2823</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2824">2824</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2825">2825</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2826">2826</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'pedantic_parser'}=$HELP{'pedantic-parser'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2827">2827</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2828">2828</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'parser-completes-attributes'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2829">2829</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: parser-completes-attributes [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2830">2830</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2831">2831</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: complete_attributes complete-attributes parser_completes_attributes </td>
</tr>
<tr>
<td class="h" >
<a name="2832">2832</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2833">2833</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2834">2834</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If the expression is non-zero, the command makes XML parser </td>
</tr>
<tr>
<td class="h" >
<a name="2835">2835</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> add missing attributes with default values as specified in a </td>
</tr>
<tr>
<td class="h" >
<a name="2836">2836</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> DTD. By default, this option is enabled. </td>
</tr>
<tr>
<td class="h" >
<a name="2837">2837</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2838">2838</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the </td>
</tr>
<tr>
<td class="h" >
<a name="2839">2839</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '$PARSER_COMPLETES_ATTRIBUTES' variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2840">2840</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2841">2841</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2842">2842</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2843">2843</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'complete_attributes'}=$HELP{'parser-completes-attributes'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2844">2844</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'complete-attributes'}=$HELP{'parser-completes-attributes'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2845">2845</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'parser_completes_attributes'}=$HELP{'parser-completes-attributes'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2846">2846</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2847">2847</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'indent'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2848">2848</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: indent [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2849">2849</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2850">2850</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2851">2851</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If the value of [expression] is 1, saved and listed XML will </td>
</tr>
<tr>
<td class="h" >
<a name="2852">2852</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> be formatted using some (hopefully) ignorable whitespace. If </td>
</tr>
<tr>
<td class="h" >
<a name="2853">2853</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the value is 2 (or higher), XSH2 will act as in case of 1, </td>
</tr>
<tr>
<td class="h" >
<a name="2854">2854</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> plus it will add a leading and a trailing linebreak to each </td>
</tr>
<tr>
<td class="h" >
<a name="2855">2855</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> text node. </td>
</tr>
<tr>
<td class="h" >
<a name="2856">2856</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2857">2857</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Note, that since the underlying C library (libxml2) uses a </td>
</tr>
<tr>
<td class="h" >
<a name="2858">2858</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> hard-coded indentation of 2 space characters per indentation </td>
</tr>
<tr>
<td class="h" >
<a name="2859">2859</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> level, the amount of whitespace used for indentation can not </td>
</tr>
<tr>
<td class="h" >
<a name="2860">2860</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> be altered at runtime. </td>
</tr>
<tr>
<td class="h" >
<a name="2861">2861</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2862">2862</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$INDENT' variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2863">2863</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2864">2864</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2865">2865</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2866">2866</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2867">2867</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'empty-tags'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2868">2868</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: empty-tags [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2869">2869</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2870">2870</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: empty_tags </td>
</tr>
<tr>
<td class="h" >
<a name="2871">2871</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2872">2872</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2873">2873</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If the value of [expression] is 1 (non-zero), empty tags are </td>
</tr>
<tr>
<td class="h" >
<a name="2874">2874</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> serialized as a start-tag/end-tag pair ('<foo></foo>'). This </td>
</tr>
<tr>
<td class="h" >
<a name="2875">2875</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> option affects both [ls] and [save] and possibly other </td>
</tr>
<tr>
<td class="h" >
<a name="2876">2876</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> commands. Otherwise, they are compacted into a short-tag form </td>
</tr>
<tr>
<td class="h" >
<a name="2877">2877</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> ('<foo/>'). Default value is '0'. </td>
</tr>
<tr>
<td class="h" >
<a name="2878">2878</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2879">2879</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$EMPTY_TAGS' </td>
</tr>
<tr>
<td class="h" >
<a name="2880">2880</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2881">2881</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2882">2882</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2883">2883</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2884">2884</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'empty_tags'}=$HELP{'empty-tags'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2885">2885</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2886">2886</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'skip-dtd'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2887">2887</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: skip-dtd [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2888">2888</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2889">2889</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: skip_dtd </td>
</tr>
<tr>
<td class="h" >
<a name="2890">2890</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2891">2891</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2892">2892</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If the value of [expression] is 1 (non-zero), DTD DOCTYPE </td>
</tr>
<tr>
<td class="h" >
<a name="2893">2893</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> declaration is omitted from any further serializations of XML </td>
</tr>
<tr>
<td class="h" >
<a name="2894">2894</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> documents (including [ls] and [save]). Default value is '0'. </td>
</tr>
<tr>
<td class="h" >
<a name="2895">2895</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2896">2896</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$SKIP_DTD' </td>
</tr>
<tr>
<td class="h" >
<a name="2897">2897</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2898">2898</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2899">2899</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2900">2900</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2901">2901</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'skip_dtd'}=$HELP{'skip-dtd'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2902">2902</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2903">2903</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'parser-expands-xinclude'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2904">2904</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: parser-expands-xinclude [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2905">2905</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2906">2906</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: parser_expands_xinclude </td>
</tr>
<tr>
<td class="h" >
<a name="2907">2907</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2908">2908</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2909">2909</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If the [expression] is non-zero, the parser is allowed to </td>
</tr>
<tr>
<td class="h" >
<a name="2910">2910</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> expand XInclude tags immediately while parsing the document. </td>
</tr>
<tr>
<td class="h" >
<a name="2911">2911</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2912">2912</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the </td>
</tr>
<tr>
<td class="h" >
<a name="2913">2913</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '$PARSER_EXPANDS_XINCLUDE' variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2914">2914</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2915">2915</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: process-xinclude </td>
</tr>
<tr>
<td class="h" >
<a name="2916">2916</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2917">2917</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2918">2918</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2919">2919</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'parser_expands_xinclude'}=$HELP{'parser-expands-xinclude'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2920">2920</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2921">2921</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'load-ext-dtd'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2922">2922</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: load-ext-dtd [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2923">2923</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2924">2924</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: load_ext_dtd </td>
</tr>
<tr>
<td class="h" >
<a name="2925">2925</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2926">2926</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2927">2927</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Non-zero [expression] instructs the XML parser to load </td>
</tr>
<tr>
<td class="h" >
<a name="2928">2928</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> external DTD subsets declared in XML documents. This option is </td>
</tr>
<tr>
<td class="h" >
<a name="2929">2929</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> enabled by default. </td>
</tr>
<tr>
<td class="h" >
<a name="2930">2930</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2931">2931</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$LOAD_EXT_DTD' </td>
</tr>
<tr>
<td class="h" >
<a name="2932">2932</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2933">2933</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2934">2934</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2935">2935</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2936">2936</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'load_ext_dtd'}=$HELP{'load-ext-dtd'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2937">2937</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2938">2938</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'encoding'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2939">2939</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: encoding [encoding] </td>
</tr>
<tr>
<td class="h" >
<a name="2940">2940</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2941">2941</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2942">2942</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Set the default character encoding used for standard (e.g. </td>
</tr>
<tr>
<td class="h" >
<a name="2943">2943</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> terminal) output. This doesn't influence the encoding used for </td>
</tr>
<tr>
<td class="h" >
<a name="2944">2944</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> saving XML documents. </td>
</tr>
<tr>
<td class="h" >
<a name="2945">2945</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2946">2946</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$ENCODING' </td>
</tr>
<tr>
<td class="h" >
<a name="2947">2947</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2948">2948</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2949">2949</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: query-encoding </td>
</tr>
<tr>
<td class="h" >
<a name="2950">2950</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2951">2951</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2952">2952</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2953">2953</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2954">2954</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'query-encoding'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2955">2955</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: query-encoding [encoding] </td>
</tr>
<tr>
<td class="h" >
<a name="2956">2956</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2957">2957</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: query_encoding </td>
</tr>
<tr>
<td class="h" >
<a name="2958">2958</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2959">2959</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2960">2960</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Set the default query character encoding, i.e. encoding used </td>
</tr>
<tr>
<td class="h" >
<a name="2961">2961</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> when taking input from XSH2 prompt or standard input. </td>
</tr>
<tr>
<td class="h" >
<a name="2962">2962</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2963">2963</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$QUERY_ENCODING' </td>
</tr>
<tr>
<td class="h" >
<a name="2964">2964</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2965">2965</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2966">2966</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: encoding </td>
</tr>
<tr>
<td class="h" >
<a name="2967">2967</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2968">2968</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2969">2969</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2970">2970</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'query_encoding'}=$HELP{'query-encoding'}; </td>
</tr>
<tr>
<td class="h" >
<a name="2971">2971</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2972">2972</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'quiet'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2973">2973</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: quiet </td>
</tr>
<tr>
<td class="h" >
<a name="2974">2974</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2975">2975</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2976">2976</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Turn off verbose messages. </td>
</tr>
<tr>
<td class="h" >
<a name="2977">2977</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2978">2978</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$QUIET' variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2979">2979</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2980">2980</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: verbose </td>
</tr>
<tr>
<td class="h" >
<a name="2981">2981</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2982">2982</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="2983">2983</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2984">2984</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2985">2985</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'switch-to-new-documents'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="2986">2986</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: switch-to-new-documents [expression] </td>
</tr>
<tr>
<td class="h" >
<a name="2987">2987</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2988">2988</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> aliases: switch_to_new_documents </td>
</tr>
<tr>
<td class="h" >
<a name="2989">2989</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2990">2990</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="2991">2991</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If non-zero, XSH2 changes current node to the document node of </td>
</tr>
<tr>
<td class="h" >
<a name="2992">2992</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> a newly open/created files every time a new document is opened </td>
</tr>
<tr>
<td class="h" >
<a name="2993">2993</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> or created with [open] or [create]. Default value for this </td>
</tr>
<tr>
<td class="h" >
<a name="2994">2994</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> option is 1. </td>
</tr>
<tr>
<td class="h" >
<a name="2995">2995</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2996">2996</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the </td>
</tr>
<tr>
<td class="h" >
<a name="2997">2997</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> '$SWITCH_TO_NEW_DOCUMENTS' variable. </td>
</tr>
<tr>
<td class="h" >
<a name="2998">2998</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="2999">2999</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="3000">3000</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3001">3001</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'switch_to_new_documents'}=$HELP{'switch-to-new-documents'}; </td>
</tr>
<tr>
<td class="h" >
<a name="3002">3002</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3003">3003</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'backups'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="3004">3004</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: backups </td>
</tr>
<tr>
<td class="h" >
<a name="3005">3005</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3006">3006</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="3007">3007</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Enable creating backup files on save (default). </td>
</tr>
<tr>
<td class="h" >
<a name="3008">3008</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3009">3009</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$BACKUPS' variable </td>
</tr>
<tr>
<td class="h" >
<a name="3010">3010</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> to 1. </td>
</tr>
<tr>
<td class="h" >
<a name="3011">3011</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3012">3012</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: nobackups </td>
</tr>
<tr>
<td class="h" >
<a name="3013">3013</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3014">3014</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="3015">3015</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3016">3016</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3017">3017</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'nobackups'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="3018">3018</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: nobackups </td>
</tr>
<tr>
<td class="h" >
<a name="3019">3019</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3020">3020</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="3021">3021</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Disable creating backup files on save. </td>
</tr>
<tr>
<td class="h" >
<a name="3022">3022</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3023">3023</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This command is equivalent to setting the '$BACKUPS' variable </td>
</tr>
<tr>
<td class="h" >
<a name="3024">3024</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> to 0. </td>
</tr>
<tr>
<td class="h" >
<a name="3025">3025</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3026">3026</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> see also: nobackups </td>
</tr>
<tr>
<td class="h" >
<a name="3027">3027</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3028">3028</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> END </td>
</tr>
<tr>
<td class="h" >
<a name="3029">3029</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3030">3030</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3031">3031</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $HELP{'fold'}=[<<'END']; </td>
</tr>
<tr>
<td class="h" >
<a name="3032">3032</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> usage: fold [--depth|:d [expression]] [[expression]] </td>
</tr>
<tr>
<td class="h" >
<a name="3033">3033</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3034">3034</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> description: </td>
</tr>
<tr>
<td class="h" >
<a name="3035">3035</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> This feature is still EXPERIMENTAL and may change in the </td>
</tr>
<tr>
<td class="h" >
<a name="3036">3036</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> future! Fold command may be used to mark elements with a </td>
</tr>
<tr>
<td class="h" >
<a name="3037">3037</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'xsh:fold' attribute from the </td>
</tr>
<tr>
<td class="h" >
<a name="3038">3038</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 'http://xsh.sourceforge.net/xsh/' namespace. When listing the </td>
</tr>
<tr>
<td class="h" >
<a name="3039">3039</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> DOM tree using '[ls] --fold [xpath]', elements marked in this </td>
</tr>
<tr>
<td class="h" >
<a name="3040">3040</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> way are folded to a given depth (default is 0 = fold </td>
</tr>
<tr>
<td class="h" >
<a name="3041">3041</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> immediately). </td>
</tr>
<tr>
<td class="h" >
<a name="3042">3042</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3043">3043</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> The option '--depth' (':d') may be used to specify the depth </td>
</tr>
<tr>
<td class="h" >
<a name="3044">3044</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> at which subtrees of given elements are to be folded. </td>
</tr>
<tr>
<td class="h" >
<a name="3045">3045</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3046">3046</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> If called without arguments, the command applies to the </td>
</tr>
<tr>
<td class="h" >
<a name="3047">3047</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> current element, otherwise the [expression] is evaluated to </td>
</tr>
<tr>
<td class="h" >
<a name="3048">3048</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the node-list and folding is applied to all elements within </td>
</tr>
<tr>
<td class="h" >
<a name="3049">3049</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> this node-list. </td>
</tr>
<tr>
<td class="h" >
<a name="3050">3050</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="3051">3051</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Example: </td>
</tr>
<tr>
<td class="h" >
<a name="3052">3052</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> fold --depth 1 //chapter </td>
</tr>
<tr>
<td class="h" >
<a name="3053">3053</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> xsh> ls --fold //chapter[1] </td>
</tr>
<tr>
<td class="h" >
<a name="3054">3054</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <chapter id="intro" xsh:fold="1"> </td>
</tr>
<tr>
<td class="h" >
<a name="3055">3055</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <title>... |
3056
|
|
|
|
|
|
|
... |
3057
|
|
|
|
|
|
|
... |
3058
|
|
|
|
|
|
|
|
3059
|
|
|
|
|
|
|
|
3060
|
|
|
|
|
|
|
see also: unfold ls |
3061
|
|
|
|
|
|
|
|
3062
|
|
|
|
|
|
|
END |
3063
|
|
|
|
|
|
|
|
3064
|
|
|
|
|
|
|
|
3065
|
|
|
|
|
|
|
$HELP{'unfold'}=[<<'END']; |
3066
|
|
|
|
|
|
|
usage: unfold [expression] |
3067
|
|
|
|
|
|
|
|
3068
|
|
|
|
|
|
|
description: |
3069
|
|
|
|
|
|
|
This feature is still EXPERIMENTAL! |
3070
|
|
|
|
|
|
|
|
3071
|
|
|
|
|
|
|
Unfold command removes 'xsh:fold' attributes from all given |
3072
|
|
|
|
|
|
|
elements. Such attributes are usually created by previous |
3073
|
|
|
|
|
|
|
usage of [fold]. Be aware, that 'xmlns:xsh' namespace |
3074
|
|
|
|
|
|
|
declaration may still be present in the document even when all |
3075
|
|
|
|
|
|
|
elements are unfolded. |
3076
|
|
|
|
|
|
|
|
3077
|
|
|
|
|
|
|
see also: fold ls |
3078
|
|
|
|
|
|
|
|
3079
|
|
|
|
|
|
|
END |
3080
|
|
|
|
|
|
|
|
3081
|
|
|
|
|
|
|
|
3082
|
|
|
|
|
|
|
$HELP{'redo'}=[<<'END']; |
3083
|
|
|
|
|
|
|
usage: redo [[expression]] |
3084
|
|
|
|
|
|
|
|
3085
|
|
|
|
|
|
|
description: |
3086
|
|
|
|
|
|
|
'redo' restarts a loop block without evaluating the |
3087
|
|
|
|
|
|
|
conditional again. The optional [expression] argument may |
3088
|
|
|
|
|
|
|
evaluate to a positive integer number that indicates which |
3089
|
|
|
|
|
|
|
level of the nested loops should be restarted. If omitted, it |
3090
|
|
|
|
|
|
|
defaults to 1, i.e. the innermost loop. |
3091
|
|
|
|
|
|
|
|
3092
|
|
|
|
|
|
|
Using this command outside a loop causes an immediate run-time |
3093
|
|
|
|
|
|
|
error. |
3094
|
|
|
|
|
|
|
|
3095
|
|
|
|
|
|
|
Example: Restart a higher level loop from an inner one |
3096
|
|
|
|
|
|
|
|
3097
|
|
|
|
|
|
|
while ($i<100) { |
3098
|
|
|
|
|
|
|
# ... |
3099
|
|
|
|
|
|
|
foreach //para { |
3100
|
|
|
|
|
|
|
# some code |
3101
|
|
|
|
|
|
|
if $param { |
3102
|
|
|
|
|
|
|
redo; # redo foreach loop |
3103
|
|
|
|
|
|
|
} else { |
3104
|
|
|
|
|
|
|
redo 2; # redo while loop |
3105
|
|
|
|
|
|
|
} |
3106
|
|
|
|
|
|
|
} |
3107
|
|
|
|
|
|
|
} |
3108
|
|
|
|
|
|
|
|
3109
|
|
|
|
|
|
|
see also: foreach while iterate next last |
3110
|
|
|
|
|
|
|
|
3111
|
|
|
|
|
|
|
END |
3112
|
|
|
|
|
|
|
|
3113
|
|
|
|
|
|
|
|
3114
|
|
|
|
|
|
|
$HELP{'next'}=[<<'END']; |
3115
|
|
|
|
|
|
|
usage: next [[expression]] |
3116
|
|
|
|
|
|
|
|
3117
|
|
|
|
|
|
|
description: |
3118
|
|
|
|
|
|
|
'next' is like the continue statement in C; it starts the next |
3119
|
|
|
|
|
|
|
iteration of an enclosing loop. The command may be used with |
3120
|
|
|
|
|
|
|
an optional argument evaluating to a positive integer number |
3121
|
|
|
|
|
|
|
indicating which level of the nested loops should be |
3122
|
|
|
|
|
|
|
restarted. If the argument is omitted, it defaults to 1, i.e. |
3123
|
|
|
|
|
|
|
the innermost loop. |
3124
|
|
|
|
|
|
|
|
3125
|
|
|
|
|
|
|
Using this command outside a loop causes an immediate run-time |
3126
|
|
|
|
|
|
|
error. |
3127
|
|
|
|
|
|
|
|
3128
|
|
|
|
|
|
|
see also: foreach while iterate redo last prev |
3129
|
|
|
|
|
|
|
|
3130
|
|
|
|
|
|
|
END |
3131
|
|
|
|
|
|
|
|
3132
|
|
|
|
|
|
|
|
3133
|
|
|
|
|
|
|
$HELP{'prev'}=[<<'END']; |
3134
|
|
|
|
|
|
|
usage: prev [[expression]] |
3135
|
|
|
|
|
|
|
|
3136
|
|
|
|
|
|
|
description: |
3137
|
|
|
|
|
|
|
This command is only allowed inside an 'iterate' loop. It |
3138
|
|
|
|
|
|
|
returns the iteration one step back, to the previous node on |
3139
|
|
|
|
|
|
|
the iterated axis. The optional [expression] argument may be |
3140
|
|
|
|
|
|
|
used to indicate to which level of nested loops the command |
3141
|
|
|
|
|
|
|
applies to (default is 1). |
3142
|
|
|
|
|
|
|
|
3143
|
|
|
|
|
|
|
see also: iterate redo last next |
3144
|
|
|
|
|
|
|
|
3145
|
|
|
|
|
|
|
END |
3146
|
|
|
|
|
|
|
|
3147
|
|
|
|
|
|
|
|
3148
|
|
|
|
|
|
|
$HELP{'last'}=[<<'END']; |
3149
|
|
|
|
|
|
|
usage: last [[expression]] |
3150
|
|
|
|
|
|
|
|
3151
|
|
|
|
|
|
|
description: |
3152
|
|
|
|
|
|
|
The 'last' command is like the break statement in C (as used |
3153
|
|
|
|
|
|
|
in loops); it immediately exits an enclosing loop. The |
3154
|
|
|
|
|
|
|
optional [expression] argument may evaluate to a positive |
3155
|
|
|
|
|
|
|
integer number that indicates which level of the nested loops |
3156
|
|
|
|
|
|
|
to quit. If this argument is omitted, it defaults to 1, i.e. |
3157
|
|
|
|
|
|
|
the innermost loop. |
3158
|
|
|
|
|
|
|
|
3159
|
|
|
|
|
|
|
Using this command outside a loop causes an immediate run-time |
3160
|
|
|
|
|
|
|
error. |
3161
|
|
|
|
|
|
|
|
3162
|
|
|
|
|
|
|
see also: foreach while iterate next last |
3163
|
|
|
|
|
|
|
|
3164
|
|
|
|
|
|
|
END |
3165
|
|
|
|
|
|
|
|
3166
|
|
|
|
|
|
|
|
3167
|
|
|
|
|
|
|
$HELP{'return'}=[<<'END']; |
3168
|
|
|
|
|
|
|
usage: return [[expression]] |
3169
|
|
|
|
|
|
|
|
3170
|
|
|
|
|
|
|
description: |
3171
|
|
|
|
|
|
|
This command immediately stops the execution of a procedure it |
3172
|
|
|
|
|
|
|
occurs in and returns the execution to the place of the script |
3173
|
|
|
|
|
|
|
from which the subroutine was called. Optional argument may be |
3174
|
|
|
|
|
|
|
used as a return value for the subroutine call. |
3175
|
|
|
|
|
|
|
|
3176
|
|
|
|
|
|
|
Using this command outside a subroutine causes an immediate |
3177
|
|
|
|
|
|
|
run-time error. |
3178
|
|
|
|
|
|
|
|
3179
|
|
|
|
|
|
|
see also: def call |
3180
|
|
|
|
|
|
|
|
3181
|
|
|
|
|
|
|
END |
3182
|
|
|
|
|
|
|
|
3183
|
|
|
|
|
|
|
|
3184
|
|
|
|
|
|
|
$HELP{'throw'}=[<<'END']; |
3185
|
|
|
|
|
|
|
usage: throw [expression] |
3186
|
|
|
|
|
|
|
|
3187
|
|
|
|
|
|
|
description: |
3188
|
|
|
|
|
|
|
This command throws and exception containing error message |
3189
|
|
|
|
|
|
|
given by the obligatory [expression] argument. If the |
3190
|
|
|
|
|
|
|
exception is not handled by some surrounding [try] block, the |
3191
|
|
|
|
|
|
|
execution is stopped immediately and the error message is |
3192
|
|
|
|
|
|
|
printed. |
3193
|
|
|
|
|
|
|
|
3194
|
|
|
|
|
|
|
see also: try |
3195
|
|
|
|
|
|
|
|
3196
|
|
|
|
|
|
|
END |
3197
|
|
|
|
|
|
|
|
3198
|
|
|
|
|
|
|
|
3199
|
|
|
|
|
|
|
$HELP{'catalog'}=[<<'END']; |
3200
|
|
|
|
|
|
|
usage: catalog [filename] |
3201
|
|
|
|
|
|
|
|
3202
|
|
|
|
|
|
|
description: |
3203
|
|
|
|
|
|
|
Make use of a given XML file as a catalog during all parsing |
3204
|
|
|
|
|
|
|
processes. Using a catalog may significantly speed up parsing |
3205
|
|
|
|
|
|
|
processes if many external resources are loaded into the |
3206
|
|
|
|
|
|
|
parsed documents (such as DTDs or XIncludes). |
3207
|
|
|
|
|
|
|
|
3208
|
|
|
|
|
|
|
END |
3209
|
|
|
|
|
|
|
|
3210
|
|
|
|
|
|
|
|
3211
|
|
|
|
|
|
|
$HELP{'iterate'}=[<<'END']; |
3212
|
|
|
|
|
|
|
usage: iterate [xpath] [block] |
3213
|
|
|
|
|
|
|
|
3214
|
|
|
|
|
|
|
description: |
3215
|
|
|
|
|
|
|
Iterate works very much like a [foreach] loop with the same |
3216
|
|
|
|
|
|
|
[xpath] expression, except that it evaluates the [block] as |
3217
|
|
|
|
|
|
|
soon as a new node matching a given [xpath] is found. As a |
3218
|
|
|
|
|
|
|
limitation, an [xpath] expression used with 'iterate' may |
3219
|
|
|
|
|
|
|
consist of one XPath step only, i.e. it may not contain an |
3220
|
|
|
|
|
|
|
XPath step separator '/'. |
3221
|
|
|
|
|
|
|
|
3222
|
|
|
|
|
|
|
A possible benefit of using 'iterate' instead of [foreach] is |
3223
|
|
|
|
|
|
|
some efficiency when iterating over huge node-sets. Since |
3224
|
|
|
|
|
|
|
'iterate' doesn't compute the resulting node-set in advance, |
3225
|
|
|
|
|
|
|
it doesn't have to 1) allocate extra memory for it and 2) |
3226
|
|
|
|
|
|
|
(more importantly) doesn't have to sort the node-list in the |
3227
|
|
|
|
|
|
|
document order (which tends to be slow on large node-sets, |
3228
|
|
|
|
|
|
|
unless [index] is used). On the other hand, 'iterate' suffers |
3229
|
|
|
|
|
|
|
from a considerable speed penalty since it isn't implemented |
3230
|
|
|
|
|
|
|
in C (unlike libxml2's XPath engine). |
3231
|
|
|
|
|
|
|
|
3232
|
|
|
|
|
|
|
Author's experience shows that, unless [index] is used, |
3233
|
|
|
|
|
|
|
'iterate' beats [foreach] in speed on large node-lists (>=1500 |
3234
|
|
|
|
|
|
|
nodes, but your milage may vary) while [foreach] wins on |
3235
|
|
|
|
|
|
|
smaller node-lists. |
3236
|
|
|
|
|
|
|
|
3237
|
|
|
|
|
|
|
The following two examples give equivalent results. However, |
3238
|
|
|
|
|
|
|
the one using 'iterate' may be faster if the number of nodes |
3239
|
|
|
|
|
|
|
being counted is huge and document order isn't indexed. |
3240
|
|
|
|
|
|
|
|
3241
|
|
|
|
|
|
|
Example: Count inhabitants of the kingdom of Rohan in productive age |
3242
|
|
|
|
|
|
|
|
3243
|
|
|
|
|
|
|
cd rohan/inhabitants; |
3244
|
|
|
|
|
|
|
iterate child::*[@age>=18 and @age<60] { perl $productive++ }; |
3245
|
|
|
|
|
|
|
echo "$productive inhabitants in productive age"; |
3246
|
|
|
|
|
|
|
|
3247
|
|
|
|
|
|
|
Example: Using XPath |
3248
|
|
|
|
|
|
|
|
3249
|
|
|
|
|
|
|
$productive=count(rohan/inhabitants/*[@age>=18 and @age<60]); |
3250
|
|
|
|
|
|
|
echo "$productive inhabitants in productive age"; |
3251
|
|
|
|
|
|
|
|
3252
|
|
|
|
|
|
|
Hint: use e.g. '| time cut' pipe-line redirection to benchmark |
3253
|
|
|
|
|
|
|
a XSH2 command on a UNIX system. |
3254
|
|
|
|
|
|
|
|
3255
|
|
|
|
|
|
|
see also: foreach index next prev last |
3256
|
|
|
|
|
|
|
|
3257
|
|
|
|
|
|
|
END |
3258
|
|
|
|
|
|
|
|
3259
|
|
|
|
|
|
|
|
3260
|
|
|
|
|
|
|
$HELP{'register-namespace'}=[<<'END']; |
3261
|
|
|
|
|
|
|
usage: register-namespace [expression] [expression] |
3262
|
|
|
|
|
|
|
|
3263
|
|
|
|
|
|
|
aliases: regns |
3264
|
|
|
|
|
|
|
|
3265
|
|
|
|
|
|
|
description: |
3266
|
|
|
|
|
|
|
Registers the first argument as a prefix for the namespace |
3267
|
|
|
|
|
|
|
given in the second argument. The prefix can later be used in |
3268
|
|
|
|
|
|
|
XPath expressions. |
3269
|
|
|
|
|
|
|
|
3270
|
|
|
|
|
|
|
END |
3271
|
|
|
|
|
|
|
|
3272
|
|
|
|
|
|
|
$HELP{'regns'}=$HELP{'register-namespace'}; |
3273
|
|
|
|
|
|
|
|
3274
|
|
|
|
|
|
|
$HELP{'unregister-namespace'}=[<<'END']; |
3275
|
|
|
|
|
|
|
usage: unregister-namespace [expression] |
3276
|
|
|
|
|
|
|
|
3277
|
|
|
|
|
|
|
aliases: unregns |
3278
|
|
|
|
|
|
|
|
3279
|
|
|
|
|
|
|
description: |
3280
|
|
|
|
|
|
|
Unregisters given namespace prefix previously registered using |
3281
|
|
|
|
|
|
|
[register-namespace]. The prefix can no longer be used in |
3282
|
|
|
|
|
|
|
XPath expressions unless declared within the current scope of |
3283
|
|
|
|
|
|
|
the queried document. |
3284
|
|
|
|
|
|
|
|
3285
|
|
|
|
|
|
|
END |
3286
|
|
|
|
|
|
|
|
3287
|
|
|
|
|
|
|
$HELP{'unregns'}=$HELP{'unregister-namespace'}; |
3288
|
|
|
|
|
|
|
|
3289
|
|
|
|
|
|
|
$HELP{'register-xhtml-namespace'}=[<<'END']; |
3290
|
|
|
|
|
|
|
usage: register-xhtml-namespace [expression] |
3291
|
|
|
|
|
|
|
|
3292
|
|
|
|
|
|
|
aliases: regns-xhtml |
3293
|
|
|
|
|
|
|
|
3294
|
|
|
|
|
|
|
description: |
3295
|
|
|
|
|
|
|
Registers a prefix for the XHTML namespace |
3296
|
|
|
|
|
|
|
'http://www.w3.org/1999/xhtml'. The prefix can later be used |
3297
|
|
|
|
|
|
|
in XPath expressions. |
3298
|
|
|
|
|
|
|
|
3299
|
|
|
|
|
|
|
END |
3300
|
|
|
|
|
|
|
|
3301
|
|
|
|
|
|
|
$HELP{'regns-xhtml'}=$HELP{'register-xhtml-namespace'}; |
3302
|
|
|
|
|
|
|
|
3303
|
|
|
|
|
|
|
$HELP{'register-xsh-namespace'}=[<<'END']; |
3304
|
|
|
|
|
|
|
usage: register-xsh-namespace [expression] |
3305
|
|
|
|
|
|
|
|
3306
|
|
|
|
|
|
|
aliases: regns-xsh |
3307
|
|
|
|
|
|
|
|
3308
|
|
|
|
|
|
|
description: |
3309
|
|
|
|
|
|
|
Registers a new prefix for the XSH2 namespace |
3310
|
|
|
|
|
|
|
'http://xsh.sourceforge.net/xsh/'. The prefix can later be |
3311
|
|
|
|
|
|
|
used in XPath expressions. Note, that XSH2 namespace is by |
3312
|
|
|
|
|
|
|
default registered with the prefix 'xsh'. This command is |
3313
|
|
|
|
|
|
|
thus, in general, useful only when some document uses 'xsh' |
3314
|
|
|
|
|
|
|
prefix for a different namespace or if you want a shorter |
3315
|
|
|
|
|
|
|
prefix. |
3316
|
|
|
|
|
|
|
|
3317
|
|
|
|
|
|
|
END |
3318
|
|
|
|
|
|
|
|
3319
|
|
|
|
|
|
|
$HELP{'regns-xsh'}=$HELP{'register-xsh-namespace'}; |
3320
|
|
|
|
|
|
|
|
3321
|
|
|
|
|
|
|
$HELP{'register-function'}=[<<'END']; |
3322
|
|
|
|
|
|
|
usage: register-function [expression] [perl-code] |
3323
|
|
|
|
|
|
|
|
3324
|
|
|
|
|
|
|
aliases: function regfunc |
3325
|
|
|
|
|
|
|
|
3326
|
|
|
|
|
|
|
description: |
3327
|
|
|
|
|
|
|
EXPERIMENTAL! |
3328
|
|
|
|
|
|
|
|
3329
|
|
|
|
|
|
|
Registers a given perl code as a new XPath extension function |
3330
|
|
|
|
|
|
|
under a name provided in the first argument. XML::LibXML DOM |
3331
|
|
|
|
|
|
|
API as well as all Perl functions pre-defined in the |
3332
|
|
|
|
|
|
|
XML::XSH2::Map namespace may be used in the perl code for |
3333
|
|
|
|
|
|
|
object processing. If the name contains a colon, then the |
3334
|
|
|
|
|
|
|
first part before the colon must be a registered namespace |
3335
|
|
|
|
|
|
|
prefix (see [register-namespace]) and the function is |
3336
|
|
|
|
|
|
|
registered within the corresponding namespace. |
3337
|
|
|
|
|
|
|
|
3338
|
|
|
|
|
|
|
END |
3339
|
|
|
|
|
|
|
|
3340
|
|
|
|
|
|
|
$HELP{'function'}=$HELP{'register-function'}; |
3341
|
|
|
|
|
|
|
$HELP{'regfunc'}=$HELP{'register-function'}; |
3342
|
|
|
|
|
|
|
|
3343
|
|
|
|
|
|
|
$HELP{'unregister-function'}=[<<'END']; |
3344
|
|
|
|
|
|
|
usage: unregister-function [expression] |
3345
|
|
|
|
|
|
|
|
3346
|
|
|
|
|
|
|
aliases: unregfunc |
3347
|
|
|
|
|
|
|
|
3348
|
|
|
|
|
|
|
description: |
3349
|
|
|
|
|
|
|
EXPERIMENTAL! Unregister XPath extension function of a given |
3350
|
|
|
|
|
|
|
name previously registered using [register-function]. |
3351
|
|
|
|
|
|
|
|
3352
|
|
|
|
|
|
|
END |
3353
|
|
|
|
|
|
|
|
3354
|
|
|
|
|
|
|
$HELP{'unregfunc'}=$HELP{'unregister-function'}; |
3355
|
|
|
|
|
|
|
|
3356
|
|
|
|
|
|
|
$HELP{'stream'}=[<<'END']; |
3357
|
|
|
|
|
|
|
usage: stream [ --input-file|:f [filename] | |
3358
|
|
|
|
|
|
|
--input-pipe|:p [filename] | |
3359
|
|
|
|
|
|
|
--input-string|:s [expression]] |
3360
|
|
|
|
|
|
|
[ --output-file|:F [filename] | |
3361
|
|
|
|
|
|
|
--output-pipe|:P [filename] | |
3362
|
|
|
|
|
|
|
--output-string|:S [$variable] | |
3363
|
|
|
|
|
|
|
--no-output|:N ] |
3364
|
|
|
|
|
|
|
select [xpath] [block] |
3365
|
|
|
|
|
|
|
[ select [xpath] [block] ... ] |
3366
|
|
|
|
|
|
|
|
3367
|
|
|
|
|
|
|
description: |
3368
|
|
|
|
|
|
|
EXPERIMENTAL! This command provides a memory efficient (though |
3369
|
|
|
|
|
|
|
slower) way to process selected parts of an XML document with |
3370
|
|
|
|
|
|
|
XSH2. A streaming XML parser (SAX parser) is used to parse the |
3371
|
|
|
|
|
|
|
input. The parser has two states which will be referred to as |
3372
|
|
|
|
|
|
|
A and B below. The initial state of the parser is A. |
3373
|
|
|
|
|
|
|
|
3374
|
|
|
|
|
|
|
In the state A, only a limited vertical portion of the DOM |
3375
|
|
|
|
|
|
|
tree is built. All XML data coming from the input stream other |
3376
|
|
|
|
|
|
|
than start-tags are immediately copied to the output stream. |
3377
|
|
|
|
|
|
|
If a new start-tag of an element arrives, a new node is |
3378
|
|
|
|
|
|
|
created in the tree. All siblings of the newly created node |
3379
|
|
|
|
|
|
|
are removed. Thus, in the state A, there is exactly one node |
3380
|
|
|
|
|
|
|
on every level of the tree. After a node is added to the tree, |
3381
|
|
|
|
|
|
|
all the [xpath] expressions following the 'select' keyword are |
3382
|
|
|
|
|
|
|
checked. If none matches, the parser remains in state A and |
3383
|
|
|
|
|
|
|
copies the start-tag to the output stream. Otherwise, the |
3384
|
|
|
|
|
|
|
first expression that matches is remembered and the parser |
3385
|
|
|
|
|
|
|
changes its state to B. |
3386
|
|
|
|
|
|
|
|
3387
|
|
|
|
|
|
|
In state B the parser builds a complete DOM subtree of the |
3388
|
|
|
|
|
|
|
element that was last added to the tree before the parser |
3389
|
|
|
|
|
|
|
changed its state from A to B. No data are sent to the output |
3390
|
|
|
|
|
|
|
at this stage. When the subtree is complete (i.e. the |
3391
|
|
|
|
|
|
|
corresponding end-tag for its topmost element is encountered), |
3392
|
|
|
|
|
|
|
the [block] of instructions following the [xpath] expression |
3393
|
|
|
|
|
|
|
that matched is invoked with the root element of the subtree |
3394
|
|
|
|
|
|
|
as the current context node. The commands in [block] are |
3395
|
|
|
|
|
|
|
allowed to transform the whole element subtree or even to |
3396
|
|
|
|
|
|
|
replace it with a different DOM subtree or subtrees. They |
3397
|
|
|
|
|
|
|
must, however, leave intact all ancestor nodes of the subtree. |
3398
|
|
|
|
|
|
|
Failing to do so can result in an error or unpredictable |
3399
|
|
|
|
|
|
|
results. |
3400
|
|
|
|
|
|
|
|
3401
|
|
|
|
|
|
|
After the subtree processing [block] returns, all subtrees |
3402
|
|
|
|
|
|
|
that now appear in the DOM tree in the place of the original |
3403
|
|
|
|
|
|
|
subtree are serialized to the output stream. After that, they |
3404
|
|
|
|
|
|
|
are deleted and the parser returns to state A. |
3405
|
|
|
|
|
|
|
|
3406
|
|
|
|
|
|
|
Note that this type of processing highly limits the amount of |
3407
|
|
|
|
|
|
|
information the selecting XPath expressions can use. The first |
3408
|
|
|
|
|
|
|
notable fact is, that elements can not be selected by their |
3409
|
|
|
|
|
|
|
content. The only information present in the tree at the time |
3410
|
|
|
|
|
|
|
of the XPath evaluation is the element's name and attributes |
3411
|
|
|
|
|
|
|
plus the same information for all its ancestors (there is no |
3412
|
|
|
|
|
|
|
information at all about its possible child nodes nor of the |
3413
|
|
|
|
|
|
|
node's position within the list of its siblings). |
3414
|
|
|
|
|
|
|
|
3415
|
|
|
|
|
|
|
The input parameters below are mutually exclusive. If non is |
3416
|
|
|
|
|
|
|
given, standard input is processed. |
3417
|
|
|
|
|
|
|
|
3418
|
|
|
|
|
|
|
'--input-file' or ':f' instructs the processor to stream from |
3419
|
|
|
|
|
|
|
a given file. |
3420
|
|
|
|
|
|
|
|
3421
|
|
|
|
|
|
|
'--input-pipe' or ':p' instructs the processor to stream the |
3422
|
|
|
|
|
|
|
output of a given a command. |
3423
|
|
|
|
|
|
|
|
3424
|
|
|
|
|
|
|
'--input-string' or ':s' instructs the processor to use the |
3425
|
|
|
|
|
|
|
result of a given expression as the input to be processed. |
3426
|
|
|
|
|
|
|
|
3427
|
|
|
|
|
|
|
The output parameters below are mutually exclusive. If none is |
3428
|
|
|
|
|
|
|
given, standard output is used. |
3429
|
|
|
|
|
|
|
|
3430
|
|
|
|
|
|
|
'--output-file' or ':F' instructs the processor to save the |
3431
|
|
|
|
|
|
|
output to a given file. |
3432
|
|
|
|
|
|
|
|
3433
|
|
|
|
|
|
|
'--output-pipe' or ':P' instructs the processor to pipe the |
3434
|
|
|
|
|
|
|
output to a given command. |
3435
|
|
|
|
|
|
|
|
3436
|
|
|
|
|
|
|
'--output-string' or ':S' followed by a variable name |
3437
|
|
|
|
|
|
|
instructs the processor to store the result in the given |
3438
|
|
|
|
|
|
|
variable. |
3439
|
|
|
|
|
|
|
|
3440
|
|
|
|
|
|
|
'--no-output' or ':N' instructs the processor to throw the |
3441
|
|
|
|
|
|
|
result away. |
3442
|
|
|
|
|
|
|
|
3443
|
|
|
|
|
|
|
END |
3444
|
|
|
|
|
|
|
|
3445
|
|
|
|
|
|
|
|
3446
|
|
|
|
|
|
|
$HELP{'namespaces'}=[<<'END']; |
3447
|
|
|
|
|
|
|
usage: namespaces [--registered|:r] [[expression]] |
3448
|
|
|
|
|
|
|
|
3449
|
|
|
|
|
|
|
description: |
3450
|
|
|
|
|
|
|
For each node in a given node-list lists all namespaces that |
3451
|
|
|
|
|
|
|
are valid the scope of the node. Namespaces are listed in the |
3452
|
|
|
|
|
|
|
form of 'xmlns:prefix="uri"' declarations, preceded by a |
3453
|
|
|
|
|
|
|
canonical xpath of the corresponding node on a separate line. |
3454
|
|
|
|
|
|
|
|
3455
|
|
|
|
|
|
|
If '--registered' or ':r' flag is used, list also namespaces |
3456
|
|
|
|
|
|
|
registered with the [register-namespace] command in XSH |
3457
|
|
|
|
|
|
|
syntax. |
3458
|
|
|
|
|
|
|
|
3459
|
|
|
|
|
|
|
If called without the '--registered' flag and no [xpath] is |
3460
|
|
|
|
|
|
|
given, lists namespaces in the scope of the current node. |
3461
|
|
|
|
|
|
|
|
3462
|
|
|
|
|
|
|
END |
3463
|
|
|
|
|
|
|
|
3464
|
|
|
|
|
|
|
|
3465
|
|
|
|
|
|
|
$HELP{'xpath-completion'}=[<<'END']; |
3466
|
|
|
|
|
|
|
usage: xpath-completion [expression] |
3467
|
|
|
|
|
|
|
|
3468
|
|
|
|
|
|
|
aliases: xpath_completion |
3469
|
|
|
|
|
|
|
|
3470
|
|
|
|
|
|
|
description: |
3471
|
|
|
|
|
|
|
If the [expression] is non-zero, enable the TAB completion for |
3472
|
|
|
|
|
|
|
[xpath] expansions in the interactive shell mode, disable it |
3473
|
|
|
|
|
|
|
otherwise. Defaults to on. |
3474
|
|
|
|
|
|
|
|
3475
|
|
|
|
|
|
|
This command is equivalent to setting the '$XPATH_COMPLETION' |
3476
|
|
|
|
|
|
|
variable. |
3477
|
|
|
|
|
|
|
|
3478
|
|
|
|
|
|
|
END |
3479
|
|
|
|
|
|
|
|
3480
|
|
|
|
|
|
|
$HELP{'xpath_completion'}=$HELP{'xpath-completion'}; |
3481
|
|
|
|
|
|
|
|
3482
|
|
|
|
|
|
|
$HELP{'xpath-axis-completion'}=[<<'END']; |
3483
|
|
|
|
|
|
|
usage: xpath-axis-completion [expression] |
3484
|
|
|
|
|
|
|
|
3485
|
|
|
|
|
|
|
aliases: xpath_axis_completion |
3486
|
|
|
|
|
|
|
|
3487
|
|
|
|
|
|
|
description: |
3488
|
|
|
|
|
|
|
The following values are allowed: 'always', 'never', |
3489
|
|
|
|
|
|
|
'when-empty'. Note, that all other values (including 1) work |
3490
|
|
|
|
|
|
|
as 'never'! |
3491
|
|
|
|
|
|
|
|
3492
|
|
|
|
|
|
|
If the [expression] evaluates to 'always', TAB completion for |
3493
|
|
|
|
|
|
|
XPath expressions always includes axis names. |
3494
|
|
|
|
|
|
|
|
3495
|
|
|
|
|
|
|
If the [expression] evaluates to 'when-empty', the TAB |
3496
|
|
|
|
|
|
|
completion list for XPath expressions includes axis names only |
3497
|
|
|
|
|
|
|
if no element name matches the completion. |
3498
|
|
|
|
|
|
|
|
3499
|
|
|
|
|
|
|
If the [expression] evaluates to 'never', the TAB completion |
3500
|
|
|
|
|
|
|
list for XPath expressions never includes axis names. |
3501
|
|
|
|
|
|
|
|
3502
|
|
|
|
|
|
|
The default value for this option is 'always'. |
3503
|
|
|
|
|
|
|
|
3504
|
|
|
|
|
|
|
This command is equivalent to setting the |
3505
|
|
|
|
|
|
|
'$XPATH_AXIS_COMPLETION' variable. |
3506
|
|
|
|
|
|
|
|
3507
|
|
|
|
|
|
|
END |
3508
|
|
|
|
|
|
|
|
3509
|
|
|
|
|
|
|
$HELP{'xpath_axis_completion'}=$HELP{'xpath-axis-completion'}; |
3510
|
|
|
|
|
|
|
|
3511
|
|
|
|
|
|
|
$HELP{'doc-info'}=[<<'END']; |
3512
|
|
|
|
|
|
|
usage: doc-info [[document]] |
3513
|
|
|
|
|
|
|
|
3514
|
|
|
|
|
|
|
aliases: doc_info |
3515
|
|
|
|
|
|
|
|
3516
|
|
|
|
|
|
|
description: |
3517
|
|
|
|
|
|
|
In the present implementation, this command displays |
3518
|
|
|
|
|
|
|
information provided in the '' declaration of a |
3519
|
|
|
|
|
|
|
document: 'version, encoding, standalone', plus information |
3520
|
|
|
|
|
|
|
about level of 'gzip' compression of the original XML file and |
3521
|
|
|
|
|
|
|
the original XML file URI. |
3522
|
|
|
|
|
|
|
|
3523
|
|
|
|
|
|
|
see also: set-enc set-standalone |
3524
|
|
|
|
|
|
|
|
3525
|
|
|
|
|
|
|
END |
3526
|
|
|
|
|
|
|
|
3527
|
|
|
|
|
|
|
$HELP{'doc_info'}=$HELP{'doc-info'}; |
3528
|
|
|
|
|
|
|
|
3529
|
|
|
|
|
|
|
$HELP{'xpath-extensions'}=[<<'END']; |
3530
|
|
|
|
|
|
|
usage: xpath-extensions [[expression]] |
3531
|
|
|
|
|
|
|
|
3532
|
|
|
|
|
|
|
aliases: xpath_extensions |
3533
|
|
|
|
|
|
|
|
3534
|
|
|
|
|
|
|
description: |
3535
|
|
|
|
|
|
|
'xpath-extensions' remaps all extra XPath extension functions |
3536
|
|
|
|
|
|
|
provided by XSH2 (which by default belong to the namespace |
3537
|
|
|
|
|
|
|
'http://xsh.sourceforge.net/xsh/') to a new namespace given by |
3538
|
|
|
|
|
|
|
[expression]. If the argument is omitted, the functions are |
3539
|
|
|
|
|
|
|
re-registered without any namespace, so that they may be |
3540
|
|
|
|
|
|
|
called without a namespace prefix, just by their function |
3541
|
|
|
|
|
|
|
names. This quite convenient. |
3542
|
|
|
|
|
|
|
|
3543
|
|
|
|
|
|
|
Example: |
3544
|
|
|
|
|
|
|
xpath-extensions; |
3545
|
|
|
|
|
|
|
ls grep(//word,"^.*tion$"); |
3546
|
|
|
|
|
|
|
|
3547
|
|
|
|
|
|
|
see also: set-enc set-standalone |
3548
|
|
|
|
|
|
|
|
3549
|
|
|
|
|
|
|
END |
3550
|
|
|
|
|
|
|
|
3551
|
|
|
|
|
|
|
$HELP{'xpath_extensions'}=$HELP{'xpath-extensions'}; |
3552
|
|
|
|
|
|
|
|
3553
|
|
|
|
|
|
|
$HELP{'lineno'}=[<<'END']; |
3554
|
|
|
|
|
|
|
usage: lineno [[expression]] |
3555
|
|
|
|
|
|
|
|
3556
|
|
|
|
|
|
|
description: |
3557
|
|
|
|
|
|
|
'lineno' command prints line numbers of all nodes in a given |
3558
|
|
|
|
|
|
|
node-list. Note however, that 'libxml2' only stores line |
3559
|
|
|
|
|
|
|
number information for element nodes. |
3560
|
|
|
|
|
|
|
|
3561
|
|
|
|
|
|
|
see also: locate |
3562
|
|
|
|
|
|
|
|
3563
|
|
|
|
|
|
|
END |
3564
|
|
|
|
|
|
|
|
3565
|
|
|
|
|
|
|
|
3566
|
|
|
|
|
|
|
$HELP{'edit-string'}=[<<'END']; |
3567
|
|
|
|
|
|
|
usage: edit-string [--editor|:E [filename]] |
3568
|
|
|
|
|
|
|
[--encoding|:e [encoding]] |
3569
|
|
|
|
|
|
|
[--allow-empty|:0] [expression] |
3570
|
|
|
|
|
|
|
|
3571
|
|
|
|
|
|
|
description: |
3572
|
|
|
|
|
|
|
Evaluating given [expression] to a string, save it in a |
3573
|
|
|
|
|
|
|
temporary file, open the file an external editor as a plain |
3574
|
|
|
|
|
|
|
text, and when the editor exits, read and return the result. |
3575
|
|
|
|
|
|
|
The '--editor' (':E') parameter can be used to provide an |
3576
|
|
|
|
|
|
|
editor command, whereas '--encoding' (':e') can be used to |
3577
|
|
|
|
|
|
|
specify character encoding used for communication with the |
3578
|
|
|
|
|
|
|
editor. If the result is empty, the interactive XSH2 shell |
3579
|
|
|
|
|
|
|
asks user for confirmation before returning the result in |
3580
|
|
|
|
|
|
|
order to prevent data loss due to some unexpected error. To |
3581
|
|
|
|
|
|
|
suppress this feature, use '--allow-empty' or ':0' flag. |
3582
|
|
|
|
|
|
|
|
3583
|
|
|
|
|
|
|
END |
3584
|
|
|
|
|
|
|
|
3585
|
|
|
|
|
|
|
|
3586
|
|
|
|
|
|
|
$HELP{'edit'}=[<<'END']; |
3587
|
|
|
|
|
|
|
usage: edit [--editor|:E [filename]] |
3588
|
|
|
|
|
|
|
[--all|:A] [--noindent|:n] [--recover|:r] [--keep-blanks|:k] |
3589
|
|
|
|
|
|
|
[--allow-empty|:0] [--no-coment|:q] [--encoding|:e [encoding]] [expression] |
3590
|
|
|
|
|
|
|
|
3591
|
|
|
|
|
|
|
description: |
3592
|
|
|
|
|
|
|
This command may be used to interactively edit parts of a XML |
3593
|
|
|
|
|
|
|
document directly in your favorite editor. |
3594
|
|
|
|
|
|
|
|
3595
|
|
|
|
|
|
|
A given [expression] is evaluated to a node-list and the first |
3596
|
|
|
|
|
|
|
the first resulting node is opened in an external editor as a |
3597
|
|
|
|
|
|
|
XML fragment. When the editor exits, the (possibly modified) |
3598
|
|
|
|
|
|
|
fragment is parsed and returned to the original document. |
3599
|
|
|
|
|
|
|
Unless '--no-comment' (':q') flag is used, the XML fragment is |
3600
|
|
|
|
|
|
|
preceded with a XML comment specifying canonical XPath of the |
3601
|
|
|
|
|
|
|
node being edited. |
3602
|
|
|
|
|
|
|
|
3603
|
|
|
|
|
|
|
The command returns a node-list consisting of nodes that |
3604
|
|
|
|
|
|
|
resulted from parsing the individual edits. |
3605
|
|
|
|
|
|
|
|
3606
|
|
|
|
|
|
|
'--editor' or ':E' option may be used to specify external |
3607
|
|
|
|
|
|
|
editor command. If not specified, environment variables |
3608
|
|
|
|
|
|
|
'EDITOR' and 'VISUAL' are tried first, then 'vi' editor is |
3609
|
|
|
|
|
|
|
used as a fallback. |
3610
|
|
|
|
|
|
|
|
3611
|
|
|
|
|
|
|
If '--all' or ':A' flag is present, all nodes from the |
3612
|
|
|
|
|
|
|
node-list are opened in the editor, one at a time. |
3613
|
|
|
|
|
|
|
|
3614
|
|
|
|
|
|
|
If '--recover' or ':r' is specified, the parser tries to |
3615
|
|
|
|
|
|
|
recover from possible syntax errors when parsing the resulting |
3616
|
|
|
|
|
|
|
XML. |
3617
|
|
|
|
|
|
|
|
3618
|
|
|
|
|
|
|
'--keep-blanks' or ':b' option may be used to force the parser |
3619
|
|
|
|
|
|
|
to include ignorable white space. |
3620
|
|
|
|
|
|
|
|
3621
|
|
|
|
|
|
|
If the result saved by the editor is empty, the interactive |
3622
|
|
|
|
|
|
|
XSH2 shell asks user to confirm this was correct. This |
3623
|
|
|
|
|
|
|
confirmation can be suppressed using '--allow-empty' or ':0' |
3624
|
|
|
|
|
|
|
(zero) options. |
3625
|
|
|
|
|
|
|
|
3626
|
|
|
|
|
|
|
The '--encoding' or ':e' parameter can be used to specify |
3627
|
|
|
|
|
|
|
character encoding to use when communicating with the external |
3628
|
|
|
|
|
|
|
editor. |
3629
|
|
|
|
|
|
|
|
3630
|
|
|
|
|
|
|
Example: Edit all chapter elements (one by one) with emacs |
3631
|
|
|
|
|
|
|
|
3632
|
|
|
|
|
|
|
edit --editor 'emacs -nw' --encoding iso-8859-1 --all //chapter |
3633
|
|
|
|
|
|
|
|
3634
|
|
|
|
|
|
|
END |
3635
|
|
|
|
|
|
|
|
3636
|
|
|
|
|
|
|
|
3637
|
|
|
|
|
|
|
$HELP{'xsh:doc'}=[<<'END']; |
3638
|
|
|
|
|
|
|
usage: node-set xsh:doc(node-set) |
3639
|
|
|
|
|
|
|
|
3640
|
|
|
|
|
|
|
description: |
3641
|
|
|
|
|
|
|
Returns a node-set consisting of the owner document nodes of |
3642
|
|
|
|
|
|
|
all nodes in the given node-set. |
3643
|
|
|
|
|
|
|
|
3644
|
|
|
|
|
|
|
END |
3645
|
|
|
|
|
|
|
|
3646
|
|
|
|
|
|
|
|
3647
|
|
|
|
|
|
|
$HELP{'xsh:document-uri'}=[<<'END']; |
3648
|
|
|
|
|
|
|
usage: string xsh:document-uri(node-set?) |
3649
|
|
|
|
|
|
|
|
3650
|
|
|
|
|
|
|
description: |
3651
|
|
|
|
|
|
|
Returns URI of the document containing the first node in the |
3652
|
|
|
|
|
|
|
given node-set. If called without arguments, or if the |
3653
|
|
|
|
|
|
|
node-set is empty, returns filename of the document containing |
3654
|
|
|
|
|
|
|
the current node. |
3655
|
|
|
|
|
|
|
|
3656
|
|
|
|
|
|
|
END |
3657
|
|
|
|
|
|
|
|
3658
|
|
|
|
|
|
|
|
3659
|
|
|
|
|
|
|
$HELP{'xsh:filename'}=[<<'END']; |
3660
|
|
|
|
|
|
|
usage: string xsh:filename(node-set?) |
3661
|
|
|
|
|
|
|
|
3662
|
|
|
|
|
|
|
description: |
3663
|
|
|
|
|
|
|
Same as xsh:document-uri(); |
3664
|
|
|
|
|
|
|
|
3665
|
|
|
|
|
|
|
END |
3666
|
|
|
|
|
|
|
|
3667
|
|
|
|
|
|
|
|
3668
|
|
|
|
|
|
|
$HELP{'xsh:base-uri'}=[<<'END']; |
3669
|
|
|
|
|
|
|
usage: string xsh:base-uri(node-set?) |
3670
|
|
|
|
|
|
|
|
3671
|
|
|
|
|
|
|
description: |
3672
|
|
|
|
|
|
|
Returns base URI of the first node in the node-set (or the |
3673
|
|
|
|
|
|
|
current node). The function should work on both XML and HTML |
3674
|
|
|
|
|
|
|
documents even if base mechanisms for these are completely |
3675
|
|
|
|
|
|
|
different. It returns the base as defined in RFC 2396 sections |
3676
|
|
|
|
|
|
|
"5.1.1. Base URI within Document Content" and "5.1.2. Base URI |
3677
|
|
|
|
|
|
|
from the Encapsulating Entity". However it does not return the |
3678
|
|
|
|
|
|
|
document base (5.1.3), use document-uri() for this. |
3679
|
|
|
|
|
|
|
|
3680
|
|
|
|
|
|
|
END |
3681
|
|
|
|
|
|
|
|
3682
|
|
|
|
|
|
|
|
3683
|
|
|
|
|
|
|
$HELP{'xsh:resolve-uri'}=[<<'END']; |
3684
|
|
|
|
|
|
|
usage: string xsh:resolve-uri(string, string?) |
3685
|
|
|
|
|
|
|
|
3686
|
|
|
|
|
|
|
description: |
3687
|
|
|
|
|
|
|
This function takes one or two arguments: a relative URI and |
3688
|
|
|
|
|
|
|
an optional base URI. If the first argument is a relative URI |
3689
|
|
|
|
|
|
|
reference, this function resolves it against either the given |
3690
|
|
|
|
|
|
|
base URI, if given (which is assumed to be an absolute URI) |
3691
|
|
|
|
|
|
|
or, if base URI not given, against the URI of the current |
3692
|
|
|
|
|
|
|
working directory. If the first argument is an absolute URI |
3693
|
|
|
|
|
|
|
reference, it is returned unchanged. |
3694
|
|
|
|
|
|
|
|
3695
|
|
|
|
|
|
|
If the first argument is the zero-length string, returns the |
3696
|
|
|
|
|
|
|
base URI if given and the URI of the current working directory |
3697
|
|
|
|
|
|
|
otherwise. |
3698
|
|
|
|
|
|
|
|
3699
|
|
|
|
|
|
|
Note: Resolving a URI does not dereference it (download the |
3700
|
|
|
|
|
|
|
referenced content); it is merely a syntactic operation on two |
3701
|
|
|
|
|
|
|
character strings. |
3702
|
|
|
|
|
|
|
|
3703
|
|
|
|
|
|
|
END |
3704
|
|
|
|
|
|
|
|
3705
|
|
|
|
|
|
|
|
3706
|
|
|
|
|
|
|
$HELP{'xsh:lineno'}=[<<'END']; |
3707
|
|
|
|
|
|
|
usage: node-set xsh:lineno(node-set) |
3708
|
|
|
|
|
|
|
|
3709
|
|
|
|
|
|
|
description: |
3710
|
|
|
|
|
|
|
Returns line number of the occurrence of the first node in the |
3711
|
|
|
|
|
|
|
given node-set in its original XML document (if available). |
3712
|
|
|
|
|
|
|
|
3713
|
|
|
|
|
|
|
END |
3714
|
|
|
|
|
|
|
|
3715
|
|
|
|
|
|
|
|
3716
|
|
|
|
|
|
|
$HELP{'xsh:var'}=[<<'END']; |
3717
|
|
|
|
|
|
|
usage: node-set xsh:var(string NAME) |
3718
|
|
|
|
|
|
|
|
3719
|
|
|
|
|
|
|
description: |
3720
|
|
|
|
|
|
|
Returns a node-set consisting of nodes stored in a XSH2 |
3721
|
|
|
|
|
|
|
node-list variable named 'NAME'. |
3722
|
|
|
|
|
|
|
|
3723
|
|
|
|
|
|
|
END |
3724
|
|
|
|
|
|
|
|
3725
|
|
|
|
|
|
|
|
3726
|
|
|
|
|
|
|
$HELP{'xsh:matches'}=[<<'END']; |
3727
|
|
|
|
|
|
|
usage: boolean xsh:matches(string STR,string PATTERN) |
3728
|
|
|
|
|
|
|
|
3729
|
|
|
|
|
|
|
description: |
3730
|
|
|
|
|
|
|
Returns 'true' if 'STR' matches the regular expression |
3731
|
|
|
|
|
|
|
'PATTERN'. Otherwise returns 'false'. |
3732
|
|
|
|
|
|
|
|
3733
|
|
|
|
|
|
|
END |
3734
|
|
|
|
|
|
|
|
3735
|
|
|
|
|
|
|
|
3736
|
|
|
|
|
|
|
$HELP{'xsh:match'}=[<<'END']; |
3737
|
|
|
|
|
|
|
usage: node-set xsh:match(string STR,string PATTERN,string OPTIONS) |
3738
|
|
|
|
|
|
|
|
3739
|
|
|
|
|
|
|
description: |
3740
|
|
|
|
|
|
|
Searches a given string for a pattern match specified by a |
3741
|
|
|
|
|
|
|
regular expression 'PATTERN' and returns a node-set consisting |
3742
|
|
|
|
|
|
|
of '' elements containing portions of the string |
3743
|
|
|
|
|
|
|
matched by the pattern subexpressions enclosed in parentheses. |
3744
|
|
|
|
|
|
|
The OPTIONS string may contain the following flags: 'c' - do |
3745
|
|
|
|
|
|
|
not reset search position on a failed match when /g is in |
3746
|
|
|
|
|
|
|
effect; 'g' - match globally, i.e. find all occurrences; 'i' - |
3747
|
|
|
|
|
|
|
do case insensitive search; 'm' - treat string as multiple |
3748
|
|
|
|
|
|
|
lines (change "^" and "$" from matching the start or end of |
3749
|
|
|
|
|
|
|
the string to matching the start or end of any line anywhere |
3750
|
|
|
|
|
|
|
within the string) 'o' - compile pattern only once; 's' - |
3751
|
|
|
|
|
|
|
treat string as single line (change "." to match any character |
3752
|
|
|
|
|
|
|
whatsoever, even a newline, which normally it would not |
3753
|
|
|
|
|
|
|
match); 'x' - extend your pattern's legibility by permitting |
3754
|
|
|
|
|
|
|
whitespace and comments. |
3755
|
|
|
|
|
|
|
|
3756
|
|
|
|
|
|
|
END |
3757
|
|
|
|
|
|
|
|
3758
|
|
|
|
|
|
|
|
3759
|
|
|
|
|
|
|
$HELP{'xsh:grep'}=[<<'END']; |
3760
|
|
|
|
|
|
|
usage: node-set xsh:grep(node-set NODES, string PATTERN) |
3761
|
|
|
|
|
|
|
|
3762
|
|
|
|
|
|
|
description: |
3763
|
|
|
|
|
|
|
Returns a node set consisting of those nodes of 'NODES' whose |
3764
|
|
|
|
|
|
|
content (as returned by the built-in XPath function |
3765
|
|
|
|
|
|
|
'string()') matches the regular expression 'PATTERN'. |
3766
|
|
|
|
|
|
|
|
3767
|
|
|
|
|
|
|
END |
3768
|
|
|
|
|
|
|
|
3769
|
|
|
|
|
|
|
|
3770
|
|
|
|
|
|
|
$HELP{'xsh:substr'}=[<<'END']; |
3771
|
|
|
|
|
|
|
usage: string xsh:substr(string STR,float OFFSET,[float LENGTH]) |
3772
|
|
|
|
|
|
|
|
3773
|
|
|
|
|
|
|
description: |
3774
|
|
|
|
|
|
|
Extracts a substring out of 'STR' and returns it. First |
3775
|
|
|
|
|
|
|
character is at offset 0. |
3776
|
|
|
|
|
|
|
|
3777
|
|
|
|
|
|
|
If 'OFFSET' is negative, starts that far from the end of the |
3778
|
|
|
|
|
|
|
string. |
3779
|
|
|
|
|
|
|
|
3780
|
|
|
|
|
|
|
If 'LENGTH' is omitted, returns everything to the end of the |
3781
|
|
|
|
|
|
|
string. If 'LENGTH' is negative, leaves that many characters |
3782
|
|
|
|
|
|
|
off the end of the string. |
3783
|
|
|
|
|
|
|
|
3784
|
|
|
|
|
|
|
If 'OFFSET' and 'LENGTH' specify a substring that is partly |
3785
|
|
|
|
|
|
|
outside the string, only the part within the string is |
3786
|
|
|
|
|
|
|
returned. If the substring is beyond either end of the string, |
3787
|
|
|
|
|
|
|
substr() returns empty string and produces a warning. |
3788
|
|
|
|
|
|
|
|
3789
|
|
|
|
|
|
|
END |
3790
|
|
|
|
|
|
|
|
3791
|
|
|
|
|
|
|
|
3792
|
|
|
|
|
|
|
$HELP{'xsh:reverse'}=[<<'END']; |
3793
|
|
|
|
|
|
|
usage: string xsh:reverse(string STR) |
3794
|
|
|
|
|
|
|
|
3795
|
|
|
|
|
|
|
description: |
3796
|
|
|
|
|
|
|
Returns a string value same as 'STR' but with all characters |
3797
|
|
|
|
|
|
|
in the opposite order. |
3798
|
|
|
|
|
|
|
|
3799
|
|
|
|
|
|
|
END |
3800
|
|
|
|
|
|
|
|
3801
|
|
|
|
|
|
|
|
3802
|
|
|
|
|
|
|
$HELP{'xsh:lc'}=[<<'END']; |
3803
|
|
|
|
|
|
|
usage: string xsh:lc(string STR) |
3804
|
|
|
|
|
|
|
|
3805
|
|
|
|
|
|
|
description: |
3806
|
|
|
|
|
|
|
Returns a lowercased version of 'STR'. |
3807
|
|
|
|
|
|
|
|
3808
|
|
|
|
|
|
|
END |
3809
|
|
|
|
|
|
|
|
3810
|
|
|
|
|
|
|
|
3811
|
|
|
|
|
|
|
$HELP{'xsh:uc'}=[<<'END']; |
3812
|
|
|
|
|
|
|
usage: string xsh:uc(string STR) |
3813
|
|
|
|
|
|
|
|
3814
|
|
|
|
|
|
|
description: |
3815
|
|
|
|
|
|
|
Returns a uppercased version of 'STR'. |
3816
|
|
|
|
|
|
|
|
3817
|
|
|
|
|
|
|
END |
3818
|
|
|
|
|
|
|
|
3819
|
|
|
|
|
|
|
|
3820
|
|
|
|
|
|
|
$HELP{'xsh:lcfirst'}=[<<'END']; |
3821
|
|
|
|
|
|
|
usage: string xsh:lcfirst(string STR) |
3822
|
|
|
|
|
|
|
|
3823
|
|
|
|
|
|
|
description: |
3824
|
|
|
|
|
|
|
Returns the value of 'STR' with the first character |
3825
|
|
|
|
|
|
|
lowercased. |
3826
|
|
|
|
|
|
|
|
3827
|
|
|
|
|
|
|
END |
3828
|
|
|
|
|
|
|
|
3829
|
|
|
|
|
|
|
|
3830
|
|
|
|
|
|
|
$HELP{'xsh:ucfirst'}=[<<'END']; |
3831
|
|
|
|
|
|
|
usage: string xsh:ucfirst(string STR) |
3832
|
|
|
|
|
|
|
|
3833
|
|
|
|
|
|
|
description: |
3834
|
|
|
|
|
|
|
Returns the value of 'STR' with the first character |
3835
|
|
|
|
|
|
|
uppercased. |
3836
|
|
|
|
|
|
|
|
3837
|
|
|
|
|
|
|
END |
3838
|
|
|
|
|
|
|
|
3839
|
|
|
|
|
|
|
|
3840
|
|
|
|
|
|
|
$HELP{'xsh:same'}=[<<'END']; |
3841
|
|
|
|
|
|
|
usage: bool xsh:same(node-set N1, node-set N2) |
3842
|
|
|
|
|
|
|
|
3843
|
|
|
|
|
|
|
description: |
3844
|
|
|
|
|
|
|
Returns 'true' if the given node sets both contain the same |
3845
|
|
|
|
|
|
|
node (in XPath, this can also be expressed as |
3846
|
|
|
|
|
|
|
'count(N1|N2)+count(N1)+count(N2)=3'). |
3847
|
|
|
|
|
|
|
|
3848
|
|
|
|
|
|
|
END |
3849
|
|
|
|
|
|
|
|
3850
|
|
|
|
|
|
|
|
3851
|
|
|
|
|
|
|
$HELP{'xsh:max'}=[<<'END']; |
3852
|
|
|
|
|
|
|
usage: float xsh:max(object EXPRESSION, ...) |
3853
|
|
|
|
|
|
|
|
3854
|
|
|
|
|
|
|
description: |
3855
|
|
|
|
|
|
|
Returns the maximum of numeric values computed from given |
3856
|
|
|
|
|
|
|
'EXPRESSION'(s). If 'EXPRESSION' evaluates to a node-set, |
3857
|
|
|
|
|
|
|
string values of individual nodes are used. |
3858
|
|
|
|
|
|
|
|
3859
|
|
|
|
|
|
|
END |
3860
|
|
|
|
|
|
|
|
3861
|
|
|
|
|
|
|
|
3862
|
|
|
|
|
|
|
$HELP{'xsh:min'}=[<<'END']; |
3863
|
|
|
|
|
|
|
usage: float xsh:min(object EXPRESSION, ...) |
3864
|
|
|
|
|
|
|
|
3865
|
|
|
|
|
|
|
description: |
3866
|
|
|
|
|
|
|
Returns the minimum of numeric values computed from given |
3867
|
|
|
|
|
|
|
'EXPRESSION'(s). If 'EXPRESSION' evaluates to a node-set, |
3868
|
|
|
|
|
|
|
string values of individual nodes are used. |
3869
|
|
|
|
|
|
|
|
3870
|
|
|
|
|
|
|
END |
3871
|
|
|
|
|
|
|
|
3872
|
|
|
|
|
|
|
|
3873
|
|
|
|
|
|
|
$HELP{'xsh:strmax'}=[<<'END']; |
3874
|
|
|
|
|
|
|
usage: string xsh:strmax(object EXPRESSION, ...) |
3875
|
|
|
|
|
|
|
|
3876
|
|
|
|
|
|
|
description: |
3877
|
|
|
|
|
|
|
Returns a string value computed as the maximum (in |
3878
|
|
|
|
|
|
|
lexicographical order) of all string values computed from |
3879
|
|
|
|
|
|
|
given 'EXPRESSION'(s). If 'EXPRESSION' evaluates to a |
3880
|
|
|
|
|
|
|
node-set, string values of individual nodes are used. |
3881
|
|
|
|
|
|
|
|
3882
|
|
|
|
|
|
|
END |
3883
|
|
|
|
|
|
|
|
3884
|
|
|
|
|
|
|
|
3885
|
|
|
|
|
|
|
$HELP{'xsh:strmin'}=[<<'END']; |
3886
|
|
|
|
|
|
|
usage: string xsh:strmin(object EXPRESSION, ...) |
3887
|
|
|
|
|
|
|
|
3888
|
|
|
|
|
|
|
description: |
3889
|
|
|
|
|
|
|
Returns a string value computed as the minimum (in |
3890
|
|
|
|
|
|
|
lexicographical order) of all string values computed from |
3891
|
|
|
|
|
|
|
given 'EXPRESSION'(s). If 'EXPRESSION' evaluates to a |
3892
|
|
|
|
|
|
|
node-set, string values of individual nodes are used. |
3893
|
|
|
|
|
|
|
|
3894
|
|
|
|
|
|
|
END |
3895
|
|
|
|
|
|
|
|
3896
|
|
|
|
|
|
|
|
3897
|
|
|
|
|
|
|
$HELP{'xsh:sum'}=[<<'END']; |
3898
|
|
|
|
|
|
|
usage: float xsh:sum(object EXPRESSION, ...) |
3899
|
|
|
|
|
|
|
|
3900
|
|
|
|
|
|
|
description: |
3901
|
|
|
|
|
|
|
Returns the sum of numerical value computed from given |
3902
|
|
|
|
|
|
|
'EXPRESSION'(s). If 'EXPRESSION' evaluates to a node-set, |
3903
|
|
|
|
|
|
|
string values of individual nodes are used. |
3904
|
|
|
|
|
|
|
|
3905
|
|
|
|
|
|
|
END |
3906
|
|
|
|
|
|
|
|
3907
|
|
|
|
|
|
|
|
3908
|
|
|
|
|
|
|
$HELP{'xsh:join'}=[<<'END']; |
3909
|
|
|
|
|
|
|
usage: string xsh:join(string DELIM, object EXPRESSION,...) |
3910
|
|
|
|
|
|
|
|
3911
|
|
|
|
|
|
|
description: |
3912
|
|
|
|
|
|
|
Joins the separate string values computed from 'EXPRESSION'(s) |
3913
|
|
|
|
|
|
|
into a single string with fields separated by the value of |
3914
|
|
|
|
|
|
|
'DELIM', and returns that new string. If 'EXPRESSION' |
3915
|
|
|
|
|
|
|
evaluates to a node-set, joins string values of individual |
3916
|
|
|
|
|
|
|
nodes. |
3917
|
|
|
|
|
|
|
|
3918
|
|
|
|
|
|
|
END |
3919
|
|
|
|
|
|
|
|
3920
|
|
|
|
|
|
|
|
3921
|
|
|
|
|
|
|
$HELP{'xsh:subst'}=[<<'END']; |
3922
|
|
|
|
|
|
|
usage: string xsh:subst(string STR,string REGEXP,string |
3923
|
|
|
|
|
|
|
REPLACEMENT, [string OPTIONS]) |
3924
|
|
|
|
|
|
|
|
3925
|
|
|
|
|
|
|
description: |
3926
|
|
|
|
|
|
|
Acts in the very same way as perl substitution operation |
3927
|
|
|
|
|
|
|
'STRING =~ s/REGEXP/REPLACEMENT/OPTIONS', returning the |
3928
|
|
|
|
|
|
|
resulting string. Searches a string for a pattern, and if |
3929
|
|
|
|
|
|
|
found, replaces that pattern with the replacement text. If the |
3930
|
|
|
|
|
|
|
'REPLACEMENT' string contains a '$' that looks like a |
3931
|
|
|
|
|
|
|
variable, the variable will be interpolated into the |
3932
|
|
|
|
|
|
|
|
3933
|
|
|
|
|
|
|
'REPLACEMENT' at run-time. Options are: |
3934
|
|
|
|
|
|
|
|
3935
|
|
|
|
|
|
|
'e' - evaluate 'REPLACEMENT' as a Perl expression, |
3936
|
|
|
|
|
|
|
|
3937
|
|
|
|
|
|
|
'g' - replace globally, i.e., all occurrences, |
3938
|
|
|
|
|
|
|
|
3939
|
|
|
|
|
|
|
'i' - do case-insensitive pattern matching, |
3940
|
|
|
|
|
|
|
|
3941
|
|
|
|
|
|
|
'm' - treat string as multiple lines, that is, change '^' and |
3942
|
|
|
|
|
|
|
'$' from matching the start or end of the string to matching |
3943
|
|
|
|
|
|
|
the start or end of any line anywhere within the string, |
3944
|
|
|
|
|
|
|
|
3945
|
|
|
|
|
|
|
's' - treat string as single line, that is, change '.' to |
3946
|
|
|
|
|
|
|
match any character whatsoever, even a newline, which normally |
3947
|
|
|
|
|
|
|
it would not match, |
3948
|
|
|
|
|
|
|
|
3949
|
|
|
|
|
|
|
'x' - use extended regular expressions. |
3950
|
|
|
|
|
|
|
|
3951
|
|
|
|
|
|
|
END |
3952
|
|
|
|
|
|
|
|
3953
|
|
|
|
|
|
|
|
3954
|
|
|
|
|
|
|
$HELP{'xsh:sprintf'}=[<<'END']; |
3955
|
|
|
|
|
|
|
usage: string xsh:sprintf(string FORMAT,object EXPRESSION,...) |
3956
|
|
|
|
|
|
|
|
3957
|
|
|
|
|
|
|
description: |
3958
|
|
|
|
|
|
|
Returns a string formatted by the usual 'printf' conventions |
3959
|
|
|
|
|
|
|
of the C library function 'sprintf' and 'sprintf' Perl |
3960
|
|
|
|
|
|
|
function. |
3961
|
|
|
|
|
|
|
|
3962
|
|
|
|
|
|
|
See C documentation for an explanation of the general |
3963
|
|
|
|
|
|
|
principles and Perl documentation for a list of supported |
3964
|
|
|
|
|
|
|
formatting conversions. |
3965
|
|
|
|
|
|
|
|
3966
|
|
|
|
|
|
|
END |
3967
|
|
|
|
|
|
|
|
3968
|
|
|
|
|
|
|
|
3969
|
|
|
|
|
|
|
$HELP{'xsh:serialize'}=[<<'END']; |
3970
|
|
|
|
|
|
|
usage: string xsh:serialize(node-set N,...) |
3971
|
|
|
|
|
|
|
|
3972
|
|
|
|
|
|
|
description: |
3973
|
|
|
|
|
|
|
Serializes nodes of given node-set(s) into XML strings and |
3974
|
|
|
|
|
|
|
returns concatenation of those strings. |
3975
|
|
|
|
|
|
|
|
3976
|
|
|
|
|
|
|
END |
3977
|
|
|
|
|
|
|
|
3978
|
|
|
|
|
|
|
|
3979
|
|
|
|
|
|
|
$HELP{'xsh:parse'}=[<<'END']; |
3980
|
|
|
|
|
|
|
usage: node-set xsh:parse(string XML-STRING) |
3981
|
|
|
|
|
|
|
|
3982
|
|
|
|
|
|
|
description: |
3983
|
|
|
|
|
|
|
This function runs XML parser on 'XML-STRING' and returns a |
3984
|
|
|
|
|
|
|
node-set consisting of the top-level nodes of the resulting |
3985
|
|
|
|
|
|
|
document node. |
3986
|
|
|
|
|
|
|
|
3987
|
|
|
|
|
|
|
END |
3988
|
|
|
|
|
|
|
|
3989
|
|
|
|
|
|
|
|
3990
|
|
|
|
|
|
|
$HELP{'xsh:current'}=[<<'END']; |
3991
|
|
|
|
|
|
|
usage: node-set xsh:current() |
3992
|
|
|
|
|
|
|
|
3993
|
|
|
|
|
|
|
description: |
3994
|
|
|
|
|
|
|
This function (very similar to XSLT 'current()' extension |
3995
|
|
|
|
|
|
|
function) returns a node-set having the current node as its |
3996
|
|
|
|
|
|
|
only member. |
3997
|
|
|
|
|
|
|
|
3998
|
|
|
|
|
|
|
END |
3999
|
|
|
|
|
|
|
|
4000
|
|
|
|
|
|
|
|
4001
|
|
|
|
|
|
|
$HELP{'xsh:path'}=[<<'END']; |
4002
|
|
|
|
|
|
|
usage: string xsh:path(node-set NODE) |
4003
|
|
|
|
|
|
|
|
4004
|
|
|
|
|
|
|
description: |
4005
|
|
|
|
|
|
|
This function returns a string containing canonical XPath |
4006
|
|
|
|
|
|
|
leading to 'NODE'. |
4007
|
|
|
|
|
|
|
|
4008
|
|
|
|
|
|
|
see also: pwd |
4009
|
|
|
|
|
|
|
|
4010
|
|
|
|
|
|
|
END |
4011
|
|
|
|
|
|
|
|
4012
|
|
|
|
|
|
|
|
4013
|
|
|
|
|
|
|
$HELP{'xsh:if'}=[<<'END']; |
4014
|
|
|
|
|
|
|
usage: object xsh:if(object CONDITION, object YES, object NO) |
4015
|
|
|
|
|
|
|
|
4016
|
|
|
|
|
|
|
description: |
4017
|
|
|
|
|
|
|
This function returns the 'YES' object if 'CONDITION' is an |
4018
|
|
|
|
|
|
|
non-empty node-set or a string, boolean or integer evaluating |
4019
|
|
|
|
|
|
|
to non-zero boolean. Otherwise the 'NO' object is returned. |
4020
|
|
|
|
|
|
|
|
4021
|
|
|
|
|
|
|
END |
4022
|
|
|
|
|
|
|
|
4023
|
|
|
|
|
|
|
|
4024
|
|
|
|
|
|
|
$HELP{'xsh:new-attribute'}=[<<'END']; |
4025
|
|
|
|
|
|
|
usage: node-set xsh:new-attribute(string NAME1,string |
4026
|
|
|
|
|
|
|
VALUE1,[string NAME2, string VALUE2, ...]) |
4027
|
|
|
|
|
|
|
|
4028
|
|
|
|
|
|
|
description: |
4029
|
|
|
|
|
|
|
Return a node-set consisting of newly created attribute nodes |
4030
|
|
|
|
|
|
|
with given names and respective values. |
4031
|
|
|
|
|
|
|
|
4032
|
|
|
|
|
|
|
END |
4033
|
|
|
|
|
|
|
|
4034
|
|
|
|
|
|
|
|
4035
|
|
|
|
|
|
|
$HELP{'xsh:new-element'}=[<<'END']; |
4036
|
|
|
|
|
|
|
usage: node-set xsh:new-element(string NAME,[string ATTR1-NAME1, |
4037
|
|
|
|
|
|
|
string ATTR-VALUE1, ...]) |
4038
|
|
|
|
|
|
|
|
4039
|
|
|
|
|
|
|
description: |
4040
|
|
|
|
|
|
|
Create a new element node with given 'NAME' and optionally |
4041
|
|
|
|
|
|
|
attributes with given names and values and return a node-set |
4042
|
|
|
|
|
|
|
containing the new node as its only member. |
4043
|
|
|
|
|
|
|
|
4044
|
|
|
|
|
|
|
END |
4045
|
|
|
|
|
|
|
|
4046
|
|
|
|
|
|
|
|
4047
|
|
|
|
|
|
|
$HELP{'xsh:new-element-ns'}=[<<'END']; |
4048
|
|
|
|
|
|
|
usage: node-set xsh:new-element-ns(string NAME,string NS,[string ATTR1-NAME1, |
4049
|
|
|
|
|
|
|
string ATTR-VALUE1, ...]) |
4050
|
|
|
|
|
|
|
|
4051
|
|
|
|
|
|
|
description: |
4052
|
|
|
|
|
|
|
Create a new element node with given 'NAME' and namespace-uri |
4053
|
|
|
|
|
|
|
'NS' and optionally attributes with given names and values and |
4054
|
|
|
|
|
|
|
return a node-set containing the new node as its only member. |
4055
|
|
|
|
|
|
|
|
4056
|
|
|
|
|
|
|
END |
4057
|
|
|
|
|
|
|
|
4058
|
|
|
|
|
|
|
|
4059
|
|
|
|
|
|
|
$HELP{'xsh:new-text'}=[<<'END']; |
4060
|
|
|
|
|
|
|
usage: node-set xsh:new-text(string DATA) |
4061
|
|
|
|
|
|
|
|
4062
|
|
|
|
|
|
|
description: |
4063
|
|
|
|
|
|
|
Create a new text node containing given 'DATA' and return a |
4064
|
|
|
|
|
|
|
node-set containing the new node as its only member. |
4065
|
|
|
|
|
|
|
|
4066
|
|
|
|
|
|
|
END |
4067
|
|
|
|
|
|
|
|
4068
|
|
|
|
|
|
|
|
4069
|
|
|
|
|
|
|
$HELP{'xsh:new-comment'}=[<<'END']; |
4070
|
|
|
|
|
|
|
usage: node-set xsh:new-comment(string DATA) |
4071
|
|
|
|
|
|
|
|
4072
|
|
|
|
|
|
|
description: |
4073
|
|
|
|
|
|
|
Create a new comment node containing given 'DATA' and return a |
4074
|
|
|
|
|
|
|
node-set containing the new node as its only member. |
4075
|
|
|
|
|
|
|
|
4076
|
|
|
|
|
|
|
END |
4077
|
|
|
|
|
|
|
|
4078
|
|
|
|
|
|
|
|
4079
|
|
|
|
|
|
|
$HELP{'xsh:new-pi'}=[<<'END']; |
4080
|
|
|
|
|
|
|
usage: node-set xsh:new-pi(string NAME, [string DATA]) |
4081
|
|
|
|
|
|
|
|
4082
|
|
|
|
|
|
|
description: |
4083
|
|
|
|
|
|
|
Create a new processing instruction node node with given |
4084
|
|
|
|
|
|
|
'NAME' and (optionally) given 'DATA' and return a node-set |
4085
|
|
|
|
|
|
|
containing the new node as its only member. |
4086
|
|
|
|
|
|
|
|
4087
|
|
|
|
|
|
|
END |
4088
|
|
|
|
|
|
|
|
4089
|
|
|
|
|
|
|
|
4090
|
|
|
|
|
|
|
$HELP{'xsh:new-cdata'}=[<<'END']; |
4091
|
|
|
|
|
|
|
usage: node-set xsh:new-cdata(string DATA) |
4092
|
|
|
|
|
|
|
|
4093
|
|
|
|
|
|
|
description: |
4094
|
|
|
|
|
|
|
Create a new cdata section node node filled with given 'DATA' |
4095
|
|
|
|
|
|
|
and return a node-set containing the new node as its only |
4096
|
|
|
|
|
|
|
member. |
4097
|
|
|
|
|
|
|
|
4098
|
|
|
|
|
|
|
END |
4099
|
|
|
|
|
|
|
|
4100
|
|
|
|
|
|
|
|
4101
|
|
|
|
|
|
|
$HELP{'xsh:new-chunk'}=[<<'END']; |
4102
|
|
|
|
|
|
|
usage: node-set xsh:new-chunk(string XML) |
4103
|
|
|
|
|
|
|
|
4104
|
|
|
|
|
|
|
description: |
4105
|
|
|
|
|
|
|
This is just an alias for [xsh:parse]. It parses given piece |
4106
|
|
|
|
|
|
|
of XML and returns a node-set consisting of the top-level |
4107
|
|
|
|
|
|
|
element within the parsed tree. |
4108
|
|
|
|
|
|
|
|
4109
|
|
|
|
|
|
|
END |
4110
|
|
|
|
|
|
|
|
4111
|
|
|
|
|
|
|
|
4112
|
|
|
|
|
|
|
$HELP{'xsh:map'}=[<<'END']; |
4113
|
|
|
|
|
|
|
usage: node-set xsh:map(node-set NODE, string XPATH) |
4114
|
|
|
|
|
|
|
|
4115
|
|
|
|
|
|
|
description: |
4116
|
|
|
|
|
|
|
This function is very similar to EXSLT 'dynamic:map' function. |
4117
|
|
|
|
|
|
|
The description below is almost literally taken from the EXSLT |
4118
|
|
|
|
|
|
|
specification. |
4119
|
|
|
|
|
|
|
|
4120
|
|
|
|
|
|
|
The 'xsh:map' function evaluates the expression passed as the |
4121
|
|
|
|
|
|
|
second argument for each of the nodes passed as the first |
4122
|
|
|
|
|
|
|
argument, and returns a node-set of those values. |
4123
|
|
|
|
|
|
|
|
4124
|
|
|
|
|
|
|
The expressions are evaluated relative to the nodes passed as |
4125
|
|
|
|
|
|
|
the first argument. In other words, the value for each node is |
4126
|
|
|
|
|
|
|
calculated by evaluating the XPath expression with all context |
4127
|
|
|
|
|
|
|
information being the same as that for the call to the |
4128
|
|
|
|
|
|
|
'xsh:map' function itself, except for the following: |
4129
|
|
|
|
|
|
|
|
4130
|
|
|
|
|
|
|
1) the context node is the node whose value is being |
4131
|
|
|
|
|
|
|
calculated, 2) the context position is the position of the |
4132
|
|
|
|
|
|
|
node within the node set passed as the first argument to the |
4133
|
|
|
|
|
|
|
'xsh:map' function, arranged in document order, and 3) the |
4134
|
|
|
|
|
|
|
context size is the number of nodes passed as the first |
4135
|
|
|
|
|
|
|
argument to the dyn:map function. |
4136
|
|
|
|
|
|
|
|
4137
|
|
|
|
|
|
|
If the expression string passed as the second argument is an |
4138
|
|
|
|
|
|
|
invalid XPath expression (including an empty string), this |
4139
|
|
|
|
|
|
|
function returns an empty node set. |
4140
|
|
|
|
|
|
|
|
4141
|
|
|
|
|
|
|
If 'XPATH' evaluates as a node set, the 'xsh:map' function |
4142
|
|
|
|
|
|
|
returns the union of the node sets returned by evaluating the |
4143
|
|
|
|
|
|
|
expression for each of the nodes in the first argument. Note |
4144
|
|
|
|
|
|
|
that this may mean that the node set resulting from the call |
4145
|
|
|
|
|
|
|
to the 'xsh:map' function contains a different number of nodes |
4146
|
|
|
|
|
|
|
from the number in the node set passed as the first argument |
4147
|
|
|
|
|
|
|
to the function. |
4148
|
|
|
|
|
|
|
|
4149
|
|
|
|
|
|
|
If 'XPATH' evaluates as a number, the 'xsh:map' function |
4150
|
|
|
|
|
|
|
returns a node set containing one 'xsh:number' element |
4151
|
|
|
|
|
|
|
(namespace 'http://xsh.sourceforge.net/xsh/') for each node in |
4152
|
|
|
|
|
|
|
the node set passed as the first argument to the dyn:map |
4153
|
|
|
|
|
|
|
function, in document order. The string value of each |
4154
|
|
|
|
|
|
|
'xsh:number' element is the same as the result of converting |
4155
|
|
|
|
|
|
|
the number resulting from evaluating the expression to a |
4156
|
|
|
|
|
|
|
string as with the number function, with the exception that |
4157
|
|
|
|
|
|
|
Infinity results in an 'xsh:number' holding the highest number |
4158
|
|
|
|
|
|
|
the implementation can store, and -Infinity results in an |
4159
|
|
|
|
|
|
|
'xsh:number' holding the lowest number the implementation can |
4160
|
|
|
|
|
|
|
store. |
4161
|
|
|
|
|
|
|
|
4162
|
|
|
|
|
|
|
If 'XPATH' evaluates as a boolean, the 'xsh:map' function |
4163
|
|
|
|
|
|
|
returns a node set containing one 'xsh:boolean' element |
4164
|
|
|
|
|
|
|
(namespace 'http://xsh.sourceforge.net/xsh/') for each node in |
4165
|
|
|
|
|
|
|
the node set passed as the first argument to the 'xsh:map' |
4166
|
|
|
|
|
|
|
function, in document order. The string value of each |
4167
|
|
|
|
|
|
|
'xsh:boolean' element is 'true' if the expression evaluates as |
4168
|
|
|
|
|
|
|
true for the node, and is empty if the expression evaluates as |
4169
|
|
|
|
|
|
|
false. |
4170
|
|
|
|
|
|
|
|
4171
|
|
|
|
|
|
|
Otherwise, the 'xsh:map' function returns a node set |
4172
|
|
|
|
|
|
|
containing one 'xsh:string' element (namespace |
4173
|
|
|
|
|
|
|
'http://xsh.sourceforge.net/xsh/') for each node in the node |
4174
|
|
|
|
|
|
|
set passed as the first argument to the 'xsh:map' function, in |
4175
|
|
|
|
|
|
|
document order. The string value of each 'xsh:string' element |
4176
|
|
|
|
|
|
|
is the same as the result of converting the result of |
4177
|
|
|
|
|
|
|
evaluating the expression for the relevant node to a string as |
4178
|
|
|
|
|
|
|
with the string function. |
4179
|
|
|
|
|
|
|
|
4180
|
|
|
|
|
|
|
see also: xsh:evaluate |
4181
|
|
|
|
|
|
|
|
4182
|
|
|
|
|
|
|
END |
4183
|
|
|
|
|
|
|
|
4184
|
|
|
|
|
|
|
|
4185
|
|
|
|
|
|
|
$HELP{'xsh:evaluate'}=[<<'END']; |
4186
|
|
|
|
|
|
|
usage: node-set xsh:evaluate(string XPATH) |
4187
|
|
|
|
|
|
|
|
4188
|
|
|
|
|
|
|
description: |
4189
|
|
|
|
|
|
|
This function is very similar to EXSLT 'dynamic:evaluate' |
4190
|
|
|
|
|
|
|
function. The description below is almost literally taken from |
4191
|
|
|
|
|
|
|
the EXSLT specification. |
4192
|
|
|
|
|
|
|
|
4193
|
|
|
|
|
|
|
The 'xsh:evaluate' function evaluates a string as an XPath |
4194
|
|
|
|
|
|
|
expression and returns the resulting value, which might be a |
4195
|
|
|
|
|
|
|
boolean, number, string, node set, result tree fragment or |
4196
|
|
|
|
|
|
|
external object. The sole argument is the string to be |
4197
|
|
|
|
|
|
|
evaluated. |
4198
|
|
|
|
|
|
|
|
4199
|
|
|
|
|
|
|
The string is always evaluated exactly as if it had been |
4200
|
|
|
|
|
|
|
literally included in place of the call to the 'xsh:evaluate' |
4201
|
|
|
|
|
|
|
function. |
4202
|
|
|
|
|
|
|
|
4203
|
|
|
|
|
|
|
In other words, the context information used when evaluating |
4204
|
|
|
|
|
|
|
the XPath expression passed as the argument to the |
4205
|
|
|
|
|
|
|
'xsh:evaluate' function is exactly the same as the context |
4206
|
|
|
|
|
|
|
information used when evaluating the 'xsh:evaluate' function. |
4207
|
|
|
|
|
|
|
This context information includes: |
4208
|
|
|
|
|
|
|
|
4209
|
|
|
|
|
|
|
1. the context node, such that paths are evaluated relative |
4210
|
|
|
|
|
|
|
to the context node at the point where the 'xsh:evaluate' |
4211
|
|
|
|
|
|
|
function is called |
4212
|
|
|
|
|
|
|
|
4213
|
|
|
|
|
|
|
2. the context position, such that the expression can |
4214
|
|
|
|
|
|
|
contain calls to the position function |
4215
|
|
|
|
|
|
|
|
4216
|
|
|
|
|
|
|
3. the context size, such that the expression can contain |
4217
|
|
|
|
|
|
|
calls to the last function |
4218
|
|
|
|
|
|
|
|
4219
|
|
|
|
|
|
|
4. variable bindings, such that the expression can contain |
4220
|
|
|
|
|
|
|
variable references |
4221
|
|
|
|
|
|
|
|
4222
|
|
|
|
|
|
|
5. function library, such that the expression can contain |
4223
|
|
|
|
|
|
|
calls to extension functions |
4224
|
|
|
|
|
|
|
|
4225
|
|
|
|
|
|
|
6. namespace declarations, such that paths can contain |
4226
|
|
|
|
|
|
|
prefixes the current node, such that the expression can |
4227
|
|
|
|
|
|
|
contain calls to the current function |
4228
|
|
|
|
|
|
|
|
4229
|
|
|
|
|
|
|
If the expression string passed as the second argument is an |
4230
|
|
|
|
|
|
|
invalid XPath expression (including an empty string), this |
4231
|
|
|
|
|
|
|
function returns an empty node set. |
4232
|
|
|
|
|
|
|
|
4233
|
|
|
|
|
|
|
You should only use this function if the expression must be |
4234
|
|
|
|
|
|
|
constructed dynamically - otherwise it is much more efficient |
4235
|
|
|
|
|
|
|
to use the expression literally. For expressions that simply |
4236
|
|
|
|
|
|
|
give an element or attribute's name (to select a child element |
4237
|
|
|
|
|
|
|
or attribute), it is more efficient to use an expression in |
4238
|
|
|
|
|
|
|
the style: |
4239
|
|
|
|
|
|
|
|
4240
|
|
|
|
|
|
|
*[name() = $expression] |
4241
|
|
|
|
|
|
|
see also: xsh:map |
4242
|
|
|
|
|
|
|
|
4243
|
|
|
|
|
|
|
END |
4244
|
|
|
|
|
|
|
|
4245
|
|
|
|
|
|
|
|
4246
|
|
|
|
|
|
|
$HELP{'xsh:split'}=[<<'END']; |
4247
|
|
|
|
|
|
|
usage: node-set xsh:split(string PATTERN, string STRING) |
4248
|
|
|
|
|
|
|
|
4249
|
|
|
|
|
|
|
description: |
4250
|
|
|
|
|
|
|
This function provides direct access to the very powerful Perl |
4251
|
|
|
|
|
|
|
function 'split'. It splits 'STRING' to a list of fields. |
4252
|
|
|
|
|
|
|
'PATTERN' is a regular expression specifying strings |
4253
|
|
|
|
|
|
|
delimiting individual fields of 'STRING'. If 'PATTERN' is |
4254
|
|
|
|
|
|
|
empty, 'STRING' is split to individual characters. If the |
4255
|
|
|
|
|
|
|
regular expression in 'PATTERN' is enclosed in brackets, then |
4256
|
|
|
|
|
|
|
strings matching 'PATTERN' are also included in the resulting |
4257
|
|
|
|
|
|
|
list. |
4258
|
|
|
|
|
|
|
|
4259
|
|
|
|
|
|
|
The function returns a node-set consisting of newly created |
4260
|
|
|
|
|
|
|
'' elements containing individual strings of the |
4261
|
|
|
|
|
|
|
resulting list as their only text child nodes. |
4262
|
|
|
|
|
|
|
|
4263
|
|
|
|
|
|
|
END |
4264
|
|
|
|
|
|
|
|
4265
|
|
|
|
|
|
|
|
4266
|
|
|
|
|
|
|
$HELP{'xsh:times'}=[<<'END']; |
4267
|
|
|
|
|
|
|
usage: node-set xsh:times(string STRING, float COUNT) |
4268
|
|
|
|
|
|
|
|
4269
|
|
|
|
|
|
|
description: |
4270
|
|
|
|
|
|
|
This function returns a string resulting from concatenation of |
4271
|
|
|
|
|
|
|
'COUNT' copies of 'STRING'. 'COUNT' must be a non-negative |
4272
|
|
|
|
|
|
|
integer value. |
4273
|
|
|
|
|
|
|
|
4274
|
|
|
|
|
|
|
END |
4275
|
|
|
|
|
|
|
|
4276
|
|
|
|
|
|
|
|
4277
|
|
|
|
|
|
|
$HELP{'xsh:id2'}=[<<'END']; |
4278
|
|
|
|
|
|
|
usage: node-set xsh:id2(node-set DOC, string IDs) |
4279
|
|
|
|
|
|
|
|
4280
|
|
|
|
|
|
|
description: |
4281
|
|
|
|
|
|
|
This function is like XPath built-in 'id(IDs)' function, |
4282
|
|
|
|
|
|
|
except that it operates on the document specified in the first |
4283
|
|
|
|
|
|
|
argument. It returns a node-set consisting of nodes that |
4284
|
|
|
|
|
|
|
belong to the document DOC and whose ID belongs to the list of |
4285
|
|
|
|
|
|
|
space separated IDs specified in the second argument. |
4286
|
|
|
|
|
|
|
|
4287
|
|
|
|
|
|
|
END |
4288
|
|
|
|
|
|
|
|
4289
|
|
|
|
|
|
|
|
4290
|
|
|
|
|
|
|
$HELP{'xsh:lookup'}=[<<'END']; |
4291
|
|
|
|
|
|
|
usage: node-set xsh:lookup(string VARNAME, string KEY) |
4292
|
|
|
|
|
|
|
|
4293
|
|
|
|
|
|
|
description: |
4294
|
|
|
|
|
|
|
This function is similar to XSLT 'key()' function. It returns |
4295
|
|
|
|
|
|
|
a node-set stored in a hash VARNAME under the key KEY. The |
4296
|
|
|
|
|
|
|
VARNAME must be a name of a lexical or global XSH variable |
4297
|
|
|
|
|
|
|
containing a Perl hash reference. |
4298
|
|
|
|
|
|
|
|
4299
|
|
|
|
|
|
|
see also: hash |
4300
|
|
|
|
|
|
|
|
4301
|
|
|
|
|
|
|
END |
4302
|
|
|
|
|
|
|
|
4303
|
|
|
|
|
|
|
|
4304
|
|
|
|
|
|
|
$HELP{'xsh:document'}=[<<'END']; |
4305
|
|
|
|
|
|
|
usage: node-set xsh:document(string URL) |
4306
|
|
|
|
|
|
|
|
4307
|
|
|
|
|
|
|
description: |
4308
|
|
|
|
|
|
|
Looks up among the currently open document the one whose |
4309
|
|
|
|
|
|
|
filename is same as the given URL and returns the |
4310
|
|
|
|
|
|
|
corresponding document node. If no document's filename matches |
4311
|
|
|
|
|
|
|
exactly the given URL, then several heuristic matches are |
4312
|
|
|
|
|
|
|
tried: if the URI is a relative filename, it is tilde-expanded |
4313
|
|
|
|
|
|
|
and resolved (using the current working directory as a base) |
4314
|
|
|
|
|
|
|
and the lookup is restarted with the absolute filename; |
4315
|
|
|
|
|
|
|
finally, a lookup identifying filenames with URLs of the |
4316
|
|
|
|
|
|
|
file:// protocol is attempted. If the lookup fails completely, |
4317
|
|
|
|
|
|
|
an empty node set is returned. |
4318
|
|
|
|
|
|
|
|
4319
|
|
|
|
|
|
|
see also: hash |
4320
|
|
|
|
|
|
|
|
4321
|
|
|
|
|
|
|
END |
4322
|
|
|
|
|
|
|
|
4323
|
|
|
|
|
|
|
|
4324
|
|
|
|
|
|
|
$HELP{'xsh:documents'}=[<<'END']; |
4325
|
|
|
|
|
|
|
usage: node-set xsh:documents() |
4326
|
|
|
|
|
|
|
|
4327
|
|
|
|
|
|
|
description: |
4328
|
|
|
|
|
|
|
Returns a node-set consisting of the document nodes of all |
4329
|
|
|
|
|
|
|
currently open documents. |
4330
|
|
|
|
|
|
|
|
4331
|
|
|
|
|
|
|
see also: hash |
4332
|
|
|
|
|
|
|
|
4333
|
|
|
|
|
|
|
END |
4334
|
|
|
|
|
|
|
|
4335
|
|
|
|
|
|
|
|
4336
|
|
|
|
|
|
|
$HELP{'xsh:span'}=[<<'END']; |
4337
|
|
|
|
|
|
|
usage: node-set xsh:span(node-set START,node-set END) |
4338
|
|
|
|
|
|
|
|
4339
|
|
|
|
|
|
|
description: |
4340
|
|
|
|
|
|
|
Returns a node-set which forms a span of sibling nodes |
4341
|
|
|
|
|
|
|
starting at START node and ending at END node (only the first |
4342
|
|
|
|
|
|
|
node of each of the nodesets is used). It is an error if the |
4343
|
|
|
|
|
|
|
START node and END node are not siblings. |
4344
|
|
|
|
|
|
|
|
4345
|
|
|
|
|
|
|
END |
4346
|
|
|
|
|
|
|
|
4347
|
|
|
|
|
|
|
|
4348
|
|
|
|
|
|
|
$HELP{'xsh:context'}=[<<'END']; |
4349
|
|
|
|
|
|
|
usage: node-set xsh:context(node-set NODE, float BEFORE, float AFTER) |
4350
|
|
|
|
|
|
|
|
4351
|
|
|
|
|
|
|
description: |
4352
|
|
|
|
|
|
|
Returns a node-set of sibling nodes surrounding NODE. The span |
4353
|
|
|
|
|
|
|
consists of (up to) BEFORE-many nodes immediately preceding |
4354
|
|
|
|
|
|
|
NODE, the NODE itself, and (up to) AFTER-many nodes |
4355
|
|
|
|
|
|
|
immediately following NODE. If the AFTER is not given, AFTER |
4356
|
|
|
|
|
|
|
is set equal to BEFORE. |
4357
|
|
|
|
|
|
|
|
4358
|
|
|
|
|
|
|
END |
4359
|
|
|
|
|
|
|
|
4360
|
|
|
|
|
|
|
|
4361
|
|
|
|
|
|
|
$HELP{'call'}=[<<'END']; |
4362
|
|
|
|
|
|
|
usage: call [expression] [[expression] ...] |
4363
|
|
|
|
|
|
|
|
4364
|
|
|
|
|
|
|
description: |
4365
|
|
|
|
|
|
|
Call a subroutine whose name is computed by evaluating the |
4366
|
|
|
|
|
|
|
first argument [expression]. All other expressions are |
4367
|
|
|
|
|
|
|
evaluated too and the results are passed to the subroutine as |
4368
|
|
|
|
|
|
|
arguments. |
4369
|
|
|
|
|
|
|
|
4370
|
|
|
|
|
|
|
This command should only be used if the name of the subroutine |
4371
|
|
|
|
|
|
|
isn't known at the compile time. Otherwise it is recommended |
4372
|
|
|
|
|
|
|
to use a direct subroutine call of the form: |
4373
|
|
|
|
|
|
|
|
4374
|
|
|
|
|
|
|
subroutine-name [argument1 argument2 ...] |
4375
|
|
|
|
|
|
|
Example: |
4376
|
|
|
|
|
|
|
def a $arg { echo "A says" $arg } |
4377
|
|
|
|
|
|
|
def b $arg { echo "B says" $arg } |
4378
|
|
|
|
|
|
|
a "hallo!"; # call subroutine a |
4379
|
|
|
|
|
|
|
b "hallo!"; # call subroutine b |
4380
|
|
|
|
|
|
|
call { chr(ord("a")+rand(2)) } "surprise!"; # call a or b randomly |
4381
|
|
|
|
|
|
|
|
4382
|
|
|
|
|
|
|
see also: def return |
4383
|
|
|
|
|
|
|
|
4384
|
|
|
|
|
|
|
END |
4385
|
|
|
|
|
|
|
|
4386
|
|
|
|
|
|
|
|
4387
|
|
|
|
|
|
|
$HELP{'Documents'}=[<<'END']; |
4388
|
|
|
|
|
|
|
Files/Documents |
4389
|
|
|
|
|
|
|
--------------- |
4390
|
|
|
|
|
|
|
|
4391
|
|
|
|
|
|
|
XSH2 is designed as an environment for querying and manipulating XML and |
4392
|
|
|
|
|
|
|
HTML documents. Use [open] or [create] commands to load an XML or HTML |
4393
|
|
|
|
|
|
|
document from a local file, external URL (such as http:// or ftp://), |
4394
|
|
|
|
|
|
|
string or pipe. XSH2 can optionally validate the document during parse |
4395
|
|
|
|
|
|
|
process (see [validation] and [load-ext-dtd]). Parsed documents are |
4396
|
|
|
|
|
|
|
stored in memory as DOM trees, that can be [navigated] and [manipulated] |
4397
|
|
|
|
|
|
|
with XSH2 commands and XPath language, whose names and syntax make |
4398
|
|
|
|
|
|
|
working with the DOM tree a flavor of working in a UNIX filesystem. |
4399
|
|
|
|
|
|
|
|
4400
|
|
|
|
|
|
|
A parsed document is usually stored in a variable. XSH2 shares variables |
4401
|
|
|
|
|
|
|
with the XPath engine, so if e.g. '$doc' is a XSH2 variable holding a |
4402
|
|
|
|
|
|
|
document (or, more generally any node-set), then '$doc//section/title' is |
4403
|
|
|
|
|
|
|
an XPath expression selecting all 'title' subelements of all 'section' |
4404
|
|
|
|
|
|
|
elements within the (sub)tree of $doc. |
4405
|
|
|
|
|
|
|
|
4406
|
|
|
|
|
|
|
Although XSH2 is able to parse remote documents via 'http://' or |
4407
|
|
|
|
|
|
|
'ftp://', it is only able to save them locally. To upload a document to a |
4408
|
|
|
|
|
|
|
remote server (e.g. using FTP) or to store it into a database, use [save] |
4409
|
|
|
|
|
|
|
command with a '--pipe' parameter, in connection with an external program |
4410
|
|
|
|
|
|
|
able to store its standard input (XML) to the desired location. You can |
4411
|
|
|
|
|
|
|
also use similar parameter with [open] in order to parse documents from |
4412
|
|
|
|
|
|
|
standard output of some external program. |
4413
|
|
|
|
|
|
|
|
4414
|
|
|
|
|
|
|
Example: Store a XSH2 document on a remote machine using the Secure Shell |
4415
|
|
|
|
|
|
|
|
4416
|
|
|
|
|
|
|
xsh> save --pipe "ssh my.remote.org 'cat > test.xml'" $doc |
4417
|
|
|
|
|
|
|
|
4418
|
|
|
|
|
|
|
|
4419
|
|
|
|
|
|
|
Related help items: |
4420
|
|
|
|
|
|
|
backups, catalog, clone, close, create, documents, index, nobackups, |
4421
|
|
|
|
|
|
|
open, process-xinclude, save, set_filename, stream, |
4422
|
|
|
|
|
|
|
switch-to-new-documents |
4423
|
|
|
|
|
|
|
|
4424
|
|
|
|
|
|
|
END |
4425
|
|
|
|
|
|
|
|
4426
|
|
|
|
|
|
|
$HELP{'Navigation'}=[<<'END']; |
4427
|
|
|
|
|
|
|
Tree navigation |
4428
|
|
|
|
|
|
|
--------------- |
4429
|
|
|
|
|
|
|
|
4430
|
|
|
|
|
|
|
With XSH2, it is possible to browse a [document tree] (XML data |
4431
|
|
|
|
|
|
|
represented as a DOM-tree) as if it was a local filesystem, except that |
4432
|
|
|
|
|
|
|
[XPath] expressions are used instead of ordinary directory paths. |
4433
|
|
|
|
|
|
|
|
4434
|
|
|
|
|
|
|
To mimic the filesystem navigation as closely as possible, XSH2 contains |
4435
|
|
|
|
|
|
|
several commands named by analogy of UNIX filesystem commands, such as |
4436
|
|
|
|
|
|
|
[cd], [ls] and [pwd]. |
4437
|
|
|
|
|
|
|
|
4438
|
|
|
|
|
|
|
The current position in the document tree is called the current node. |
4439
|
|
|
|
|
|
|
Current node's XPath may be queried with [pwd] command. In the |
4440
|
|
|
|
|
|
|
interactive shell, current node is also displayed in the command line |
4441
|
|
|
|
|
|
|
prompt. (Since there may be multiple document trees open at the same |
4442
|
|
|
|
|
|
|
time, XSH2 tries to locate a variable holding the current document and |
4443
|
|
|
|
|
|
|
use it to fully qualify current node's XPath in the XSH2 prompt.) |
4444
|
|
|
|
|
|
|
Remember, that beside [cd] command, current node (and document) is also |
4445
|
|
|
|
|
|
|
silently changed by [open] command, [create] command and temporarily also |
4446
|
|
|
|
|
|
|
by the node-list variant of the [foreach] loop without a loop variable. |
4447
|
|
|
|
|
|
|
|
4448
|
|
|
|
|
|
|
XPath expressions are always evaluated in context of the current node. |
4449
|
|
|
|
|
|
|
Different documents can be accessed through variables: '$doc/foo[1]/bar'. |
4450
|
|
|
|
|
|
|
|
4451
|
|
|
|
|
|
|
Example: XSH2 shell |
4452
|
|
|
|
|
|
|
|
4453
|
|
|
|
|
|
|
$scratch:/> $docA := open "testA.xml" |
4454
|
|
|
|
|
|
|
$docA/> $docB := open "testB.xml" |
4455
|
|
|
|
|
|
|
$docB/> pwd |
4456
|
|
|
|
|
|
|
/ |
4457
|
|
|
|
|
|
|
$docB/> cd $docA/article/chapter[title='Conclusion'] |
4458
|
|
|
|
|
|
|
$docA/article/chapter[5]> pwd |
4459
|
|
|
|
|
|
|
/article/chapter[5] |
4460
|
|
|
|
|
|
|
$docA/article/chapter[5]> cd previous-sibling::chapter |
4461
|
|
|
|
|
|
|
$docA/article/chapter[4]> cd .. |
4462
|
|
|
|
|
|
|
$docA/article> cd $docB |
4463
|
|
|
|
|
|
|
$docB:/> ls |
4464
|
|
|
|
|
|
|
|
4465
|
|
|
|
|
|
|
... |
4466
|
|
|
|
|
|
|
|
4467
|
|
|
|
|
|
|
|
4468
|
|
|
|
|
|
|
Related help items: |
4469
|
|
|
|
|
|
|
canonical, cd, fold, locate, ls, pwd, register-function, unfold, |
4470
|
|
|
|
|
|
|
unregister-function |
4471
|
|
|
|
|
|
|
|
4472
|
|
|
|
|
|
|
END |
4473
|
|
|
|
|
|
|
|
4474
|
|
|
|
|
|
|
$HELP{'Manipulation'}=[<<'END']; |
4475
|
|
|
|
|
|
|
Tree modification |
4476
|
|
|
|
|
|
|
----------------- |
4477
|
|
|
|
|
|
|
|
4478
|
|
|
|
|
|
|
XSH2 not only provides ways to browse and inspect the DOM tree but also |
4479
|
|
|
|
|
|
|
many commands to modify its content by various operations, such as |
4480
|
|
|
|
|
|
|
copying, moving, and deleting its nodes as well as creating completely |
4481
|
|
|
|
|
|
|
new nodes or XML fragments and attaching them to it. It is quite easy to |
4482
|
|
|
|
|
|
|
learn these commands since their names or aliases mimic their well-known |
4483
|
|
|
|
|
|
|
filesystem analogies. On the other hand, many of these commands have two |
4484
|
|
|
|
|
|
|
versions one of which is prefixed with a letter "x". This "x" stands for |
4485
|
|
|
|
|
|
|
"cross", thus e.g. [xcopy] should be read as "cross copy". Let's explain |
4486
|
|
|
|
|
|
|
the difference on the example of [xcopy]. |
4487
|
|
|
|
|
|
|
|
4488
|
|
|
|
|
|
|
In a copy operation, you have to specify what nodes are to be copied and |
4489
|
|
|
|
|
|
|
where to, in other words, you have to specify the source and the target. |
4490
|
|
|
|
|
|
|
XSH2 is very much XPath-based so, XPath is used here to specify both of |
4491
|
|
|
|
|
|
|
them. However, there might be more than one node that satisfies an XPath |
4492
|
|
|
|
|
|
|
expression. So, the rule of thumb is that the "cross" variant of a |
4493
|
|
|
|
|
|
|
command places one and every of the source nodes to the location of one |
4494
|
|
|
|
|
|
|
and every destination node, while the plain variant works one-by-one, |
4495
|
|
|
|
|
|
|
placing the first source node to the first destination, the second source |
4496
|
|
|
|
|
|
|
node to the second destination, and so on (as long as there are both |
4497
|
|
|
|
|
|
|
source nodes and destinations left). |
4498
|
|
|
|
|
|
|
|
4499
|
|
|
|
|
|
|
Example: |
4500
|
|
|
|
|
|
|
$scratch/> $a := create ""; |
4501
|
|
|
|
|
|
|
$a/> $b := create ""; |
4502
|
|
|
|
|
|
|
$b/> xcopy $a//A replace $b//B; |
4503
|
|
|
|
|
|
|
$b/> copy $b//C before $a//A; |
4504
|
|
|
|
|
|
|
$b/> ls $a; |
4505
|
|
|
|
|
|
|
|
4506
|
|
|
|
|
|
|
|
4507
|
|
|
|
|
|
|
|
4508
|
|
|
|
|
|
|
$b/> ls $b; |
4509
|
|
|
|
|
|
|
|
4510
|
|
|
|
|
|
|
|
4511
|
|
|
|
|
|
|
|
4512
|
|
|
|
|
|
|
As already indicated by the example, another issue of tree modification |
4513
|
|
|
|
|
|
|
is the way in which the destination node determines the target location. |
4514
|
|
|
|
|
|
|
Should the source node be placed before, after, or somewhere among the |
4515
|
|
|
|
|
|
|
children of the resulting node? Or maybe, should it replace it |
4516
|
|
|
|
|
|
|
completely? This information has to be given in the [location] argument |
4517
|
|
|
|
|
|
|
that usually precedes the destination XPath. |
4518
|
|
|
|
|
|
|
|
4519
|
|
|
|
|
|
|
Now, what happens if source and destination nodes are of incompatible |
4520
|
|
|
|
|
|
|
types? XSH2 tries to avoid this by implicitly converting between node |
4521
|
|
|
|
|
|
|
types when necessary. For example, if a text, comment, and attribute node |
4522
|
|
|
|
|
|
|
is copied into, before or after an attribute node, the original value of |
4523
|
|
|
|
|
|
|
the attribute is replaced, prepended or appended respectively with the |
4524
|
|
|
|
|
|
|
textual content of the source node. Note however, that element nodes are |
4525
|
|
|
|
|
|
|
never converted into text, attribute or any other textual node. There are |
4526
|
|
|
|
|
|
|
many combinations here, so try yourself and see the results. |
4527
|
|
|
|
|
|
|
|
4528
|
|
|
|
|
|
|
You may even use some more sophisticated way to convert between node |
4529
|
|
|
|
|
|
|
types, as shown in the following example, where an element is first |
4530
|
|
|
|
|
|
|
commented out and than again uncommented. Note, that the particular |
4531
|
|
|
|
|
|
|
approach used for resurrecting the commented XML material works only for |
4532
|
|
|
|
|
|
|
well-balanced chunks of XML. |
4533
|
|
|
|
|
|
|
|
4534
|
|
|
|
|
|
|
Example: Using string variables to convert between different types of nodes |
4535
|
|
|
|
|
|
|
|
4536
|
|
|
|
|
|
|
$doc := create <
|
4537
|
|
|
|
|
|
|
|
4538
|
|
|
|
|
|
|
|
4539
|
|
|
|
|
|
|
|
4540
|
|
|
|
|
|
|
Intro |
4541
|
|
|
|
|
|
|
|
4542
|
|
|
|
|
|
|
|
4543
|
|
|
|
|
|
|
Rest |
4544
|
|
|
|
|
|
|
|
4545
|
|
|
|
|
|
|
|
4546
|
|
|
|
|
|
|
EOF |
4547
|
|
|
|
|
|
|
|
4548
|
|
|
|
|
|
|
# comment out the first chapter |
4549
|
|
|
|
|
|
|
ls //chapter[1] |> $chapter_xml; |
4550
|
|
|
|
|
|
|
insert comment $chapter_xml replace //chapter[1]; |
4551
|
|
|
|
|
|
|
ls / 0; |
4552
|
|
|
|
|
|
|
# OUTPUT: |
4553
|
|
|
|
|
|
|
|
4554
|
|
|
|
|
|
|
|
4555
|
|
|
|
|
|
|
|
4559
|
|
|
|
|
|
|
|
4560
|
|
|
|
|
|
|
Rest |
4561
|
|
|
|
|
|
|
|
4562
|
|
|
|
|
|
|
|
4563
|
|
|
|
|
|
|
|
4564
|
|
|
|
|
|
|
|
4565
|
|
|
|
|
|
|
# un-comment the chapter |
4566
|
|
|
|
|
|
|
$comment = string(//comment()[1]); |
4567
|
|
|
|
|
|
|
insert chunk $comment replace //comment()[1]; |
4568
|
|
|
|
|
|
|
ls / 0; |
4569
|
|
|
|
|
|
|
# OUTPUT: |
4570
|
|
|
|
|
|
|
|
4571
|
|
|
|
|
|
|
|
4572
|
|
|
|
|
|
|
|
4573
|
|
|
|
|
|
|
Intro |
4574
|
|
|
|
|
|
|
|
4575
|
|
|
|
|
|
|
|
4576
|
|
|
|
|
|
|
|
4577
|
|
|
|
|
|
|
Rest |
4578
|
|
|
|
|
|
|
|
4579
|
|
|
|
|
|
|
|
4580
|
|
|
|
|
|
|
|
4581
|
|
|
|
|
|
|
|
4582
|
|
|
|
|
|
|
Related help items: |
4583
|
|
|
|
|
|
|
change-ns-prefix, change-ns-uri, clone, copy, declare-ns, edit, |
4584
|
|
|
|
|
|
|
edit-string, hash, insert, map, move, normalize, process-xinclude, |
4585
|
|
|
|
|
|
|
remove, rename, set, set-dtd, set-enc, set-ns, set-standalone, sort, |
4586
|
|
|
|
|
|
|
strip-whitespace, wrap, wrap-span, xcopy, xinsert, xmove, xslt, xupdate |
4587
|
|
|
|
|
|
|
|
4588
|
|
|
|
|
|
|
END |
4589
|
|
|
|
|
|
|
|
4590
|
|
|
|
|
|
|
$HELP{'Flow'}=[<<'END']; |
4591
|
|
|
|
|
|
|
Flow control |
4592
|
|
|
|
|
|
|
------------ |
4593
|
|
|
|
|
|
|
|
4594
|
|
|
|
|
|
|
As almost every scripting language, XSH2 supports subroutines, various |
4595
|
|
|
|
|
|
|
conditional statements, loops and even exceptions. |
4596
|
|
|
|
|
|
|
|
4597
|
|
|
|
|
|
|
|
4598
|
|
|
|
|
|
|
Related help items: |
4599
|
|
|
|
|
|
|
call, def, do, eval, exit, foreach, if, ifinclude, include, iterate, |
4600
|
|
|
|
|
|
|
last, next, prev, redo, return, run-mode, stream, test-mode, throw, try, |
4601
|
|
|
|
|
|
|
undef, unless, while |
4602
|
|
|
|
|
|
|
|
4603
|
|
|
|
|
|
|
END |
4604
|
|
|
|
|
|
|
|
4605
|
|
|
|
|
|
|
$HELP{'Information'}=[<<'END']; |
4606
|
|
|
|
|
|
|
Retrieving more information |
4607
|
|
|
|
|
|
|
--------------------------- |
4608
|
|
|
|
|
|
|
|
4609
|
|
|
|
|
|
|
Beside the possibility to browse the DOM tree and list some parts of it |
4610
|
|
|
|
|
|
|
(as described in [Navigation]), XSH2 provides commands to obtain other |
4611
|
|
|
|
|
|
|
information related to open documents as well as the XSH2 interpreter |
4612
|
|
|
|
|
|
|
itself. These commands are listed bellow. |
4613
|
|
|
|
|
|
|
|
4614
|
|
|
|
|
|
|
|
4615
|
|
|
|
|
|
|
Related help items: |
4616
|
|
|
|
|
|
|
apropos, canonical, count, defs, doc-info, documents, dtd, enc, get, |
4617
|
|
|
|
|
|
|
help, lineno, locate, ls, namespaces, print, pwd, settings, validate, |
4618
|
|
|
|
|
|
|
variables, version |
4619
|
|
|
|
|
|
|
|
4620
|
|
|
|
|
|
|
END |
4621
|
|
|
|
|
|
|
|
4622
|
|
|
|
|
|
|
$HELP{'Namespaces'}=[<<'END']; |
4623
|
|
|
|
|
|
|
Namespaces in XML and XPath |
4624
|
|
|
|
|
|
|
--------------------------- |
4625
|
|
|
|
|
|
|
|
4626
|
|
|
|
|
|
|
Namespaces provide a simple method for qualifying element and attribute |
4627
|
|
|
|
|
|
|
names in XML documents. Namespaces are represented by a namespace URI |
4628
|
|
|
|
|
|
|
but, since the URI can be very long, element and attribute names are |
4629
|
|
|
|
|
|
|
associated with a namespace using a namespace prefix (see the W3C |
4630
|
|
|
|
|
|
|
recommendation for details). In an XML document, a prefix can be |
4631
|
|
|
|
|
|
|
associated with a namespace URI using a declaration which takes form of |
4632
|
|
|
|
|
|
|
special attribute of the form 'xmlns:prefix="namespace uri"' on an |
4633
|
|
|
|
|
|
|
element. The scope of the namespace declaration is then the subtree of |
4634
|
|
|
|
|
|
|
the element carrying the special 'xmlns:prefix' attribute (and includes |
4635
|
|
|
|
|
|
|
attributes of the element). Moreover, a default namespace can be declared |
4636
|
|
|
|
|
|
|
using just 'xmlns="namespace uri"'. In that case all unprefixed element |
4637
|
|
|
|
|
|
|
names in the scope of such a declaration belong to the namespace. An |
4638
|
|
|
|
|
|
|
unprefixed element which is not in scope of a default namespace |
4639
|
|
|
|
|
|
|
declaration does not belong to any namespace. It is recommended not to |
4640
|
|
|
|
|
|
|
combine namespaced elements and non-namespaced elements in a single |
4641
|
|
|
|
|
|
|
document. Note that regardless of default namespace declarations, |
4642
|
|
|
|
|
|
|
unprefixed attributes do not belong to any namespace (because they are |
4643
|
|
|
|
|
|
|
uniquely determined by their name and the namespace and name of the the |
4644
|
|
|
|
|
|
|
element which carries them). |
4645
|
|
|
|
|
|
|
|
4646
|
|
|
|
|
|
|
XSH2 tries to deal namespace declarations transparently (creating them if |
4647
|
|
|
|
|
|
|
necessary when nodes are copied between different documents or scopes of |
4648
|
|
|
|
|
|
|
namespace declarations). Most commands which create new elements or |
4649
|
|
|
|
|
|
|
attributes provide means to indicate a namespace. In addition, XSH2 |
4650
|
|
|
|
|
|
|
provides commands [declare-ns], [set-ns], [change-ns-uri], and |
4651
|
|
|
|
|
|
|
[change-ns-prefix] to directly manipulate XML namespace declarations on |
4652
|
|
|
|
|
|
|
the current node. |
4653
|
|
|
|
|
|
|
|
4654
|
|
|
|
|
|
|
Since XSH2 is heavily XPath-based, it is important to remember that XPath |
4655
|
|
|
|
|
|
|
1.0 maps prefixes to namespaces independently of the declarations in the |
4656
|
|
|
|
|
|
|
current document. The mapping is instead provided via so called XPath |
4657
|
|
|
|
|
|
|
context. Namespaces can be tested in XPath either using the built-in |
4658
|
|
|
|
|
|
|
'namespace-uri()' function, but it is more convenient to use namespace |
4659
|
|
|
|
|
|
|
prefixes associated with namespace URIs in the XPath context. This |
4660
|
|
|
|
|
|
|
association is independent of the documents to which the XPath expression |
4661
|
|
|
|
|
|
|
is applied and can be established using the command [register-namespace]. |
4662
|
|
|
|
|
|
|
Additional, XSH2 automatically propagates the namespace association in |
4663
|
|
|
|
|
|
|
the scope of the current node to the XPath context, so that per-document |
4664
|
|
|
|
|
|
|
prefixes in the current scope can also be used. |
4665
|
|
|
|
|
|
|
|
4666
|
|
|
|
|
|
|
IMPORTANT: XPath 1.0 has no concept of a default namespace. Unprefixed |
4667
|
|
|
|
|
|
|
names in XPath only match names which have no namespace. So, if the |
4668
|
|
|
|
|
|
|
document uses a default namespace, it is required to associate a |
4669
|
|
|
|
|
|
|
non-empty prefix with the default namespace via [register-namespace] and |
4670
|
|
|
|
|
|
|
add that prefix to names in XPath expressions intended to match nodes in |
4671
|
|
|
|
|
|
|
the default namespace. |
4672
|
|
|
|
|
|
|
|
4673
|
|
|
|
|
|
|
Example: Manipulating nodes in XHTML documents |
4674
|
|
|
|
|
|
|
|
4675
|
|
|
|
|
|
|
open "index.xhtml"; |
4676
|
|
|
|
|
|
|
$xhtmlns = "http://www.w3.org/1999/xhtml"; |
4677
|
|
|
|
|
|
|
register-namespace x $xhtmlns; |
4678
|
|
|
|
|
|
|
wrap --namespace $xhtmlns '' //x:a[@href]; |
4679
|
|
|
|
|
|
|
# or |
4680
|
|
|
|
|
|
|
wrap '' //x:a[@href]; |
4681
|
|
|
|
|
|
|
|
4682
|
|
|
|
|
|
|
In the preceding example we associate the (typically default) namespace |
4683
|
|
|
|
|
|
|
of XHTML documents with the prefix 'x'. We than use this prefix to match |
4684
|
|
|
|
|
|
|
all links ('a' elements) in the document. Note that we do not write |
4685
|
|
|
|
|
|
|
'@x:href' to match the '@href' attribute because unprefixed attributes do |
4686
|
|
|
|
|
|
|
not belong to the default namespace. The [wrap] command is used to create |
4687
|
|
|
|
|
|
|
new containing elements for the nodes matched by the XPath expression. We |
4688
|
|
|
|
|
|
|
may either specify the namespace of the containing element explicitly, |
4689
|
|
|
|
|
|
|
using '--namespace' option, or implicitly, by using a prefix associated |
4690
|
|
|
|
|
|
|
with the namespace in the XPath context. In the latter case, XSH2 chooses |
4691
|
|
|
|
|
|
|
a suitable prefix declared for the namespace in the document scope (in |
4692
|
|
|
|
|
|
|
this case the default, i.e. no, prefix), adding a new namespace |
4693
|
|
|
|
|
|
|
declaration if necessary. |
4694
|
|
|
|
|
|
|
|
4695
|
|
|
|
|
|
|
|
4696
|
|
|
|
|
|
|
Related help items: |
4697
|
|
|
|
|
|
|
change-ns-prefix, change-ns-uri, declare-ns, namespaces, |
4698
|
|
|
|
|
|
|
register-namespace, register-xhtml-namespace, register-xsh-namespace, |
4699
|
|
|
|
|
|
|
set-ns, unregister-namespace |
4700
|
|
|
|
|
|
|
|
4701
|
|
|
|
|
|
|
END |
4702
|
|
|
|
|
|
|
|
4703
|
|
|
|
|
|
|
$HELP{'Argtypes'}=[<<'END']; |
4704
|
|
|
|
|
|
|
Argument Types |
4705
|
|
|
|
|
|
|
-------------- |
4706
|
|
|
|
|
|
|
|
4707
|
|
|
|
|
|
|
XSH2 commands accept arguments of various types, usually expressed as |
4708
|
|
|
|
|
|
|
Perl or XPath [expression]s. Unlike in most languages, individual XSH2 |
4709
|
|
|
|
|
|
|
commands may evaluate the same expression differently, usually to enforce |
4710
|
|
|
|
|
|
|
a result of a certain type (such as a node-list, a string, a number, a |
4711
|
|
|
|
|
|
|
filename, a node name, etc.). See [expression] and individual argument |
4712
|
|
|
|
|
|
|
types for more information. |
4713
|
|
|
|
|
|
|
|
4714
|
|
|
|
|
|
|
END |
4715
|
|
|
|
|
|
|
|
4716
|
|
|
|
|
|
|
$HELP{'Variables'}=[<<'END']; |
4717
|
|
|
|
|
|
|
Variables |
4718
|
|
|
|
|
|
|
--------- |
4719
|
|
|
|
|
|
|
|
4720
|
|
|
|
|
|
|
In XSH2, like in Perl and XPath, [variable names] are are prefixed with a |
4721
|
|
|
|
|
|
|
dollar sign ($). Variables can contain arbitrary Perl Scalar (string, |
4722
|
|
|
|
|
|
|
number, array reference, hash reference or an object reference). XPath |
4723
|
|
|
|
|
|
|
objects are transparently mapped to Perl objects via XML::LibXML objects. |
4724
|
|
|
|
|
|
|
Values can be assigned to variables either by simple [assignments] of the |
4725
|
|
|
|
|
|
|
form '$variable = [expression]', where the right hand side is an |
4726
|
|
|
|
|
|
|
expression, or by command [assignments] of the form '$variable := |
4727
|
|
|
|
|
|
|
[command]', where the right hand side is a XSH2 command, or by capturing |
4728
|
|
|
|
|
|
|
the output of some command with a variable redirection of the following |
4729
|
|
|
|
|
|
|
form: |
4730
|
|
|
|
|
|
|
|
4731
|
|
|
|
|
|
|
command |> $variable; |
4732
|
|
|
|
|
|
|
XSH2 expressions are evaluated either by XPath engine or by Perl (the |
4733
|
|
|
|
|
|
|
latter only happens if the entire expression is enclosed with braces |
4734
|
|
|
|
|
|
|
'{...}'), and both Perl and XPath can access all XSH2 variables |
4735
|
|
|
|
|
|
|
transparently (Perl expressions may even assign to them). |
4736
|
|
|
|
|
|
|
|
4737
|
|
|
|
|
|
|
A simple simple expression consisting of a variable name (e.g. |
4738
|
|
|
|
|
|
|
'$variable') is always evaluated by the XPath engine and the result is |
4739
|
|
|
|
|
|
|
the content of the variable as it appears to the XPath data model. Since |
4740
|
|
|
|
|
|
|
in XPath object cannot be void (undefined), XPath engine complains, if |
4741
|
|
|
|
|
|
|
the value of the variable is undefined. On the other hand, expressions |
4742
|
|
|
|
|
|
|
like '{$variable}' are evaluated by Perl, which results in the value of |
4743
|
|
|
|
|
|
|
the variable as seen by Perl. |
4744
|
|
|
|
|
|
|
|
4745
|
|
|
|
|
|
|
Variables can also be used as macros for complicated XPath expressions. |
4746
|
|
|
|
|
|
|
Any occurrence of a substring of the form '${variable}' in an XPath |
4747
|
|
|
|
|
|
|
expression is interpolated to the value of '$variable' (if '$variable' |
4748
|
|
|
|
|
|
|
contains an object rather than a string or number, then the object is |
4749
|
|
|
|
|
|
|
cast to string first) before the entire expression is evaluated. So, for |
4750
|
|
|
|
|
|
|
example, if '${variable}' contains string "'chapter[title]'" (without the |
4751
|
|
|
|
|
|
|
quotes), then the XPath expression '//sect1/${variable}/para' |
4752
|
|
|
|
|
|
|
interpolates to '//sect1/chapter[title]/para' prior to evaluation. |
4753
|
|
|
|
|
|
|
|
4754
|
|
|
|
|
|
|
To display the current value of a variable, use either [print] or (in |
4755
|
|
|
|
|
|
|
case of a global variables - the distinction is discussed below) the |
4756
|
|
|
|
|
|
|
command [variables]: |
4757
|
|
|
|
|
|
|
|
4758
|
|
|
|
|
|
|
Example: |
4759
|
|
|
|
|
|
|
xsh> $b="my_document"; |
4760
|
|
|
|
|
|
|
xsh> $file="${b}s.xml"; |
4761
|
|
|
|
|
|
|
xsh> $f := open $file; |
4762
|
|
|
|
|
|
|
xsh> ls //$b[count(descendant::para)>10] |
4763
|
|
|
|
|
|
|
xsh> print $b |
4764
|
|
|
|
|
|
|
my_document |
4765
|
|
|
|
|
|
|
xsh> variables |
4766
|
|
|
|
|
|
|
... |
4767
|
|
|
|
|
|
|
$b='my_document'; |
4768
|
|
|
|
|
|
|
... |
4769
|
|
|
|
|
|
|
$file='my_documents.xml'; |
4770
|
|
|
|
|
|
|
... |
4771
|
|
|
|
|
|
|
|
4772
|
|
|
|
|
|
|
Variables can also serve as containers for documents and can be used to |
4773
|
|
|
|
|
|
|
store lists of nodes that result from evaluating an XPath expression |
4774
|
|
|
|
|
|
|
(a.k.a. XPath node-sets). This is especially useful when a sequence of |
4775
|
|
|
|
|
|
|
commands is to be performed on some fixed set of nodes and repetitive |
4776
|
|
|
|
|
|
|
evaluation of the same XPath expression would be lengthy. XPath node-sets |
4777
|
|
|
|
|
|
|
are represented by 'XML::LibXML::NodeList' Perl objects (which is simply |
4778
|
|
|
|
|
|
|
a array reference blessed to the above class, which provides some simple |
4779
|
|
|
|
|
|
|
operator overloading). In XPath, by a node-set by definition can only |
4780
|
|
|
|
|
|
|
contain a single copy of each node and the nodes within a node-set are |
4781
|
|
|
|
|
|
|
processed in the same order as they appear in the XML document. Having |
4782
|
|
|
|
|
|
|
XPath node-sets represented by a list gives us the advantage of having |
4783
|
|
|
|
|
|
|
the possibility to process the list in a different order than the one |
4784
|
|
|
|
|
|
|
implied by the document (which is what happens if a variable containing a |
4785
|
|
|
|
|
|
|
node-list is evaluated by Perl rather than XPath), see an example below. |
4786
|
|
|
|
|
|
|
|
4787
|
|
|
|
|
|
|
Example: |
4788
|
|
|
|
|
|
|
xsh> $creatures = //creature[@status='alive'] |
4789
|
|
|
|
|
|
|
# process creatures in the document order: |
4790
|
|
|
|
|
|
|
xsh> foreach $creature print @name; |
4791
|
|
|
|
|
|
|
# process creatures in the reverse document order: |
4792
|
|
|
|
|
|
|
xsh> foreach { reverse @$creature } print @name; |
4793
|
|
|
|
|
|
|
# append some more nodes to a node-list (using a variant of |
4794
|
|
|
|
|
|
|
# a simple assignment) |
4795
|
|
|
|
|
|
|
xsh> $creatures += //creature[@status='dead']; |
4796
|
|
|
|
|
|
|
# again, we can process creatures in order implied by the document: |
4797
|
|
|
|
|
|
|
xsh> foreach $creature print @name; |
4798
|
|
|
|
|
|
|
# but we can also process first living and then dead creatures, |
4799
|
|
|
|
|
|
|
# since this is how they are listed in $creature |
4800
|
|
|
|
|
|
|
xsh> foreach {$creature} print @name; |
4801
|
|
|
|
|
|
|
# same as the above is |
4802
|
|
|
|
|
|
|
xsh> foreach {@$creature} print @name; |
4803
|
|
|
|
|
|
|
|
4804
|
|
|
|
|
|
|
XSH2 variables are either globally or lexically scoped. Global variables |
4805
|
|
|
|
|
|
|
need not to be declared (they can be directly assigned to), whereas |
4806
|
|
|
|
|
|
|
lexical variables must be declared using the command [my]. Global |
4807
|
|
|
|
|
|
|
variable assignment may also be made temporal for the enclosing block, |
4808
|
|
|
|
|
|
|
using [local]. |
4809
|
|
|
|
|
|
|
|
4810
|
|
|
|
|
|
|
Example: |
4811
|
|
|
|
|
|
|
$var1 = "foo"; # a global variable requires no declaration |
4812
|
|
|
|
|
|
|
local $var1 $var2 $var3; # localizes global variables |
4813
|
|
|
|
|
|
|
$var1 = "bar"; # assignment to a localized variable is temporary |
4814
|
|
|
|
|
|
|
local $var4 = "foo"; # localized assignment |
4815
|
|
|
|
|
|
|
my $var1 $var $var3; # declares lexical variables |
4816
|
|
|
|
|
|
|
my $var1 = "foo"; # lexical variable declaration with assignment |
4817
|
|
|
|
|
|
|
|
4818
|
|
|
|
|
|
|
Lexical variables are only defined in the scope of current block or |
4819
|
|
|
|
|
|
|
subroutine. There is no way to refer to a lexical variable form outside |
4820
|
|
|
|
|
|
|
of the block it was declared in, nor from within a nested subroutine |
4821
|
|
|
|
|
|
|
call. Of course, lexical variables can be referred to from nested blocks |
4822
|
|
|
|
|
|
|
or Perl expressions (where they behave just like Perl's lexical |
4823
|
|
|
|
|
|
|
variables). |
4824
|
|
|
|
|
|
|
|
4825
|
|
|
|
|
|
|
On the other hand, global or localized XSH2 variables are just Perl |
4826
|
|
|
|
|
|
|
Scalar variables belonging to the 'XML::XSH2::Map' namespace, which is |
4827
|
|
|
|
|
|
|
also the default namespace for any Perl code evaluated from XSH2 (so |
4828
|
|
|
|
|
|
|
there's no need to use this prefix explicitly in Perl expressions, unless |
4829
|
|
|
|
|
|
|
of course there is a lexical variable in the current scope with the |
4830
|
|
|
|
|
|
|
same). |
4831
|
|
|
|
|
|
|
|
4832
|
|
|
|
|
|
|
Localizing a variable using the 'local' keyword makes all assignments to |
4833
|
|
|
|
|
|
|
it occurring in the enclosing block temporary. The variable itself |
4834
|
|
|
|
|
|
|
remains global, only its original value is restored at the end of the |
4835
|
|
|
|
|
|
|
block that localized it. |
4836
|
|
|
|
|
|
|
|
4837
|
|
|
|
|
|
|
In all above cases, it is possible to arbitrarily intermix XSH2 and Perl |
4838
|
|
|
|
|
|
|
assignments: |
4839
|
|
|
|
|
|
|
|
4840
|
|
|
|
|
|
|
Example: |
4841
|
|
|
|
|
|
|
xsh> ls //chapter[1]/title |
4842
|
|
|
|
|
|
|
Introduction |
4843
|
|
|
|
|
|
|
xsh> $a=string(//chapter[1]/title) |
4844
|
|
|
|
|
|
|
xsh> perl { $b="CHAPTER 1: ".uc($a); } |
4845
|
|
|
|
|
|
|
xsh> print $b |
4846
|
|
|
|
|
|
|
CHAPTER 1: INTRODUCTION |
4847
|
|
|
|
|
|
|
|
4848
|
|
|
|
|
|
|
Although all XSH2 variables are in fact Perl Scalars, it is still |
4849
|
|
|
|
|
|
|
possible to store Perl Array or Hash value to a XSH2 variable via |
4850
|
|
|
|
|
|
|
reference. The following example demonstrates using Perl Hashes to |
4851
|
|
|
|
|
|
|
collect and print some simple racial statistics about the population of |
4852
|
|
|
|
|
|
|
Middle-Earth: |
4853
|
|
|
|
|
|
|
|
4854
|
|
|
|
|
|
|
Example: |
4855
|
|
|
|
|
|
|
my $races; |
4856
|
|
|
|
|
|
|
foreach a:/middle-earth/creature { |
4857
|
|
|
|
|
|
|
my $race=string(@race); |
4858
|
|
|
|
|
|
|
perl { $races->{$race}++ }; |
4859
|
|
|
|
|
|
|
} |
4860
|
|
|
|
|
|
|
print "Middle-Earth Population (race/number of creatures)" |
4861
|
|
|
|
|
|
|
print { map "$_/$races->{$_}\n" keys(%$races); }; |
4862
|
|
|
|
|
|
|
|
4863
|
|
|
|
|
|
|
|
4864
|
|
|
|
|
|
|
Related help items: |
4865
|
|
|
|
|
|
|
assign, local |
4866
|
|
|
|
|
|
|
|
4867
|
|
|
|
|
|
|
END |
4868
|
|
|
|
|
|
|
|
4869
|
|
|
|
|
|
|
$HELP{'Redirection'}=[<<'END']; |
4870
|
|
|
|
|
|
|
Command output redirection |
4871
|
|
|
|
|
|
|
-------------------------- |
4872
|
|
|
|
|
|
|
|
4873
|
|
|
|
|
|
|
WARNING: XSH2 redirection syntax is not yet finished. It is currently the |
4874
|
|
|
|
|
|
|
same as in XSH1 but this may be changed in the future releases. |
4875
|
|
|
|
|
|
|
|
4876
|
|
|
|
|
|
|
Output redirection can be used to pipe output of some XSH [command] to |
4877
|
|
|
|
|
|
|
some external program, or to capture it to a variable. Redirection of |
4878
|
|
|
|
|
|
|
output of more than one XSH command can be achieved using the [do] |
4879
|
|
|
|
|
|
|
command. |
4880
|
|
|
|
|
|
|
|
4881
|
|
|
|
|
|
|
Redirect output to an external program |
4882
|
|
|
|
|
|
|
-------------------------------------- |
4883
|
|
|
|
|
|
|
|
4884
|
|
|
|
|
|
|
The syntax for redirecting the output of a XSH command to an external |
4885
|
|
|
|
|
|
|
program, is 'xsh-command | shell-command ;', where 'xsh-command' is any |
4886
|
|
|
|
|
|
|
XSH2 command and 'shell-command' is any command (or code) recognized by |
4887
|
|
|
|
|
|
|
the default shell interpreter of the operating system (i.e. on UNIX |
4888
|
|
|
|
|
|
|
systems by '/bin/sh' or '/bin/csh', on Windows systems by 'cmd'). The |
4889
|
|
|
|
|
|
|
shell command may contain further redirections (as supported by the |
4890
|
|
|
|
|
|
|
system shell interpreter), but should not contain semicolons, except |
4891
|
|
|
|
|
|
|
when the whole shell command is enclosed in brackets. |
4892
|
|
|
|
|
|
|
|
4893
|
|
|
|
|
|
|
Example: Use well-known UNIX commands to filter XPath-based XML listing |
4894
|
|
|
|
|
|
|
from a document and count the results |
4895
|
|
|
|
|
|
|
|
4896
|
|
|
|
|
|
|
xsh> ls //something/* | grep foo | wc |
4897
|
|
|
|
|
|
|
|
4898
|
|
|
|
|
|
|
Capture output to a variable |
4899
|
|
|
|
|
|
|
---------------------------- |
4900
|
|
|
|
|
|
|
|
4901
|
|
|
|
|
|
|
The syntax for capturing the output of an XSH command to a variable is |
4902
|
|
|
|
|
|
|
'xsh-command |> $variable', where 'xsh-command' is any XSH [command] |
4903
|
|
|
|
|
|
|
and '$variable' is any valid name for a [variable]. |
4904
|
|
|
|
|
|
|
|
4905
|
|
|
|
|
|
|
Example: Store the number of all words in a variable named count. |
4906
|
|
|
|
|
|
|
|
4907
|
|
|
|
|
|
|
xsh> count //words |> $count |
4908
|
|
|
|
|
|
|
|
4909
|
|
|
|
|
|
|
END |
4910
|
|
|
|
|
|
|
|
4911
|
|
|
|
|
|
|
$HELP{'Configuration'}=[<<'END']; |
4912
|
|
|
|
|
|
|
Global settings |
4913
|
|
|
|
|
|
|
--------------- |
4914
|
|
|
|
|
|
|
|
4915
|
|
|
|
|
|
|
The commands listed below can be used to modify the default behavior of |
4916
|
|
|
|
|
|
|
the XML parser or XSH2 itself. Some of the commands switch between two |
4917
|
|
|
|
|
|
|
different modes according to a given expression (which is expected to |
4918
|
|
|
|
|
|
|
result either in zero or non-zero value). Other commands also working as |
4919
|
|
|
|
|
|
|
a flip-flop have their own explicit counterparts (e.g. [verbose] and |
4920
|
|
|
|
|
|
|
[quiet] or [debug] and [nodebug]). This inconsistency is due to |
4921
|
|
|
|
|
|
|
historical reasons. |
4922
|
|
|
|
|
|
|
|
4923
|
|
|
|
|
|
|
The [encoding] and [query-encoding] settings allow to specify character |
4924
|
|
|
|
|
|
|
encodings of user's input and XSH2's own output. This is particularly |
4925
|
|
|
|
|
|
|
useful when you work with UTF-8 encoded documents on a console which only |
4926
|
|
|
|
|
|
|
supports 8-bit characters. |
4927
|
|
|
|
|
|
|
|
4928
|
|
|
|
|
|
|
The [settings] command displays current settings by means of XSH2 |
4929
|
|
|
|
|
|
|
commands. Thus it can not only be used to review current values, but also |
4930
|
|
|
|
|
|
|
to store them for future use, e.g. in ~/.xsh2rc file. |
4931
|
|
|
|
|
|
|
|
4932
|
|
|
|
|
|
|
Example: |
4933
|
|
|
|
|
|
|
xsh> settings | cat > ~/.xsh2rc |
4934
|
|
|
|
|
|
|
|
4935
|
|
|
|
|
|
|
|
4936
|
|
|
|
|
|
|
Related help items: |
4937
|
|
|
|
|
|
|
backups, debug, empty-tags, encoding, indent, keep-blanks, load-ext-dtd, |
4938
|
|
|
|
|
|
|
nobackups, nodebug, parser-completes-attributes, parser-expands-entities, |
4939
|
|
|
|
|
|
|
parser-expands-xinclude, pedantic-parser, query-encoding, quiet, |
4940
|
|
|
|
|
|
|
recovering, register-function, register-namespace, |
4941
|
|
|
|
|
|
|
register-xhtml-namespace, register-xsh-namespace, run-mode, settings, |
4942
|
|
|
|
|
|
|
skip-dtd, switch-to-new-documents, test-mode, unregister-function, |
4943
|
|
|
|
|
|
|
unregister-namespace, validation, verbose, xpath-axis-completion, |
4944
|
|
|
|
|
|
|
xpath-completion, xpath-extensions |
4945
|
|
|
|
|
|
|
|
4946
|
|
|
|
|
|
|
END |
4947
|
|
|
|
|
|
|
|
4948
|
|
|
|
|
|
|
$HELP{'Perl_shell'}=[<<'END']; |
4949
|
|
|
|
|
|
|
Interacting with Perl and Shell |
4950
|
|
|
|
|
|
|
------------------------------- |
4951
|
|
|
|
|
|
|
|
4952
|
|
|
|
|
|
|
Along with XPath, Perl is one of two XSH2 expression languages, and |
4953
|
|
|
|
|
|
|
borrows XSH2 its great expressive power. Perl is a language optimized for |
4954
|
|
|
|
|
|
|
scanning arbitrary text files, extracting information from those text |
4955
|
|
|
|
|
|
|
files, and printing reports based on that information. It has built-in |
4956
|
|
|
|
|
|
|
regular expressions and powerful yet easy to learn data structures |
4957
|
|
|
|
|
|
|
(scalars, arrays, hash tables). It's also a good language for many system |
4958
|
|
|
|
|
|
|
management tasks. XSH2 itself is written in Perl (except for the XML |
4959
|
|
|
|
|
|
|
engine, which uses libxml2 library written in C by Daniel Veillard). |
4960
|
|
|
|
|
|
|
|
4961
|
|
|
|
|
|
|
Calling Perl |
4962
|
|
|
|
|
|
|
------------ |
4963
|
|
|
|
|
|
|
|
4964
|
|
|
|
|
|
|
Perl [expressions or blocks of code] can either be used as arguments to |
4965
|
|
|
|
|
|
|
any XSH2 command. One of them is [perl] command which simply evaluates |
4966
|
|
|
|
|
|
|
the given Perl block. Other commands, such as [map], even require Perl |
4967
|
|
|
|
|
|
|
expression argument and allow quickly change DOM node content. Perl |
4968
|
|
|
|
|
|
|
expressions may also provide lists of strings to iterate over with a |
4969
|
|
|
|
|
|
|
[foreach] loop, or serve as conditions for [if], [unless], and [while] |
4970
|
|
|
|
|
|
|
statements. |
4971
|
|
|
|
|
|
|
|
4972
|
|
|
|
|
|
|
To prevent conflict between XSH2 internals and the evaluated Perl code, |
4973
|
|
|
|
|
|
|
XSH2 runs such code in the context of a special namespace |
4974
|
|
|
|
|
|
|
'XML::XSH2::Map'. As described in the section [Variables], XSH2 string |
4975
|
|
|
|
|
|
|
variables may be accessed and possibly assigned from Perl code in the |
4976
|
|
|
|
|
|
|
most obvious way, since they actually are Perl variables defined in the |
4977
|
|
|
|
|
|
|
'XML::XSH2::Map' namespace. |
4978
|
|
|
|
|
|
|
|
4979
|
|
|
|
|
|
|
The interaction between XSH2 and Perl actually works the other way |
4980
|
|
|
|
|
|
|
round as well, so that you may call back XSH2 from the evaluated Perl |
4981
|
|
|
|
|
|
|
code. For this, Perl function 'xsh' is defined in the 'XML::XSH2::Map' |
4982
|
|
|
|
|
|
|
namespace. All parameters passed to this function are interpreted as |
4983
|
|
|
|
|
|
|
XSH2 commands. |
4984
|
|
|
|
|
|
|
|
4985
|
|
|
|
|
|
|
Moreover, the following Perl helper functions are defined: |
4986
|
|
|
|
|
|
|
|
4987
|
|
|
|
|
|
|
'xsh(string,....)' - evaluates given string(s) as XSH2 commands. |
4988
|
|
|
|
|
|
|
|
4989
|
|
|
|
|
|
|
'call(name)' - call a given XSH2 subroutine. |
4990
|
|
|
|
|
|
|
|
4991
|
|
|
|
|
|
|
'count(string)' - evaluates given string as an XPath expression and |
4992
|
|
|
|
|
|
|
returns either literal value of the result (in case of boolean, string |
4993
|
|
|
|
|
|
|
and float result type) or number of nodes in a returned node-set. |
4994
|
|
|
|
|
|
|
|
4995
|
|
|
|
|
|
|
'literal(string|object)' - if passed a string, evaluates it as a XSH2 |
4996
|
|
|
|
|
|
|
expression and returns the literal value of the result; if passed an |
4997
|
|
|
|
|
|
|
object, returns literal value of the object. For example, |
4998
|
|
|
|
|
|
|
'literal('$doc/expression')' returns the same value as |
4999
|
|
|
|
|
|
|
'count('string($doc/expression)')'. |
5000
|
|
|
|
|
|
|
|
5001
|
|
|
|
|
|
|
'serialize(string|object)' - if passed a string, it first evaluates the |
5002
|
|
|
|
|
|
|
string as a XSH2 expression to obtain a node-list object. Then it |
5003
|
|
|
|
|
|
|
serializes the object into XML. The resulting string is equal to the |
5004
|
|
|
|
|
|
|
output of the XSH2 command [ls] applied on the same expression or |
5005
|
|
|
|
|
|
|
object expression only without indentation and folding. |
5006
|
|
|
|
|
|
|
|
5007
|
|
|
|
|
|
|
'type(string|object)' - if passed a string, it first evaluates the |
5008
|
|
|
|
|
|
|
string as XSH2 expression to obtain a node-list object. It returns a |
5009
|
|
|
|
|
|
|
list of strings representing the types of nodes in the node-list |
5010
|
|
|
|
|
|
|
(ordered in the canonical document order). The returned type strings |
5011
|
|
|
|
|
|
|
are: 'element', 'attribute', 'text', 'cdata', 'pi', 'entity_reference', |
5012
|
|
|
|
|
|
|
'document', 'chunk', 'comment', 'namespace', 'unknown'. |
5013
|
|
|
|
|
|
|
|
5014
|
|
|
|
|
|
|
'nodelist(string|object,...)' - converts its arguments to objects if |
5015
|
|
|
|
|
|
|
necessary and returns a node-list consisting of the objects. |
5016
|
|
|
|
|
|
|
|
5017
|
|
|
|
|
|
|
'xpath(string, node?)' - evaluates a given string as an XPath |
5018
|
|
|
|
|
|
|
expression in the context of a given node and returns the result. |
5019
|
|
|
|
|
|
|
|
5020
|
|
|
|
|
|
|
'echo(string,...)' - prints given strings on XSH2 output. Note, that in |
5021
|
|
|
|
|
|
|
the interactive mode, XSH2 redirects all output to a specific terminal |
5022
|
|
|
|
|
|
|
file handle stored in the variable '$OUT'. So, if you for example mean |
5023
|
|
|
|
|
|
|
to pipe the result to a shell command, you should avoid using STDOUT |
5024
|
|
|
|
|
|
|
filehandle directly. You may either use the usual 'print' without a |
5025
|
|
|
|
|
|
|
filehandle, use the 'echo' function, or use '$OUT' as a filehandle. |
5026
|
|
|
|
|
|
|
|
5027
|
|
|
|
|
|
|
In the following examples we use Perl to populate the Middle-Earth with |
5028
|
|
|
|
|
|
|
Hobbits whose names are read from a text file called 'hobbits.txt', |
5029
|
|
|
|
|
|
|
unless there are some Hobbits in Middle-Earth already. |
5030
|
|
|
|
|
|
|
|
5031
|
|
|
|
|
|
|
Example: Use Perl to read text files |
5032
|
|
|
|
|
|
|
|
5033
|
|
|
|
|
|
|
unless (//creature[@race='hobbit']) { |
5034
|
|
|
|
|
|
|
perl { |
5035
|
|
|
|
|
|
|
open my $fh, "hobbits.txt" }; |
5036
|
|
|
|
|
|
|
@hobbits=<$file>; |
5037
|
|
|
|
|
|
|
close $fh; |
5038
|
|
|
|
|
|
|
} |
5039
|
|
|
|
|
|
|
foreach { @hobbits } { |
5040
|
|
|
|
|
|
|
copy xsh:new-element("creature","name",.,"race","hobbit") |
5041
|
|
|
|
|
|
|
into m:/middle-earth/creatures; |
5042
|
|
|
|
|
|
|
} |
5043
|
|
|
|
|
|
|
} |
5044
|
|
|
|
|
|
|
|
5045
|
|
|
|
|
|
|
Example: The same code as a single Perl block |
5046
|
|
|
|
|
|
|
|
5047
|
|
|
|
|
|
|
perl { |
5048
|
|
|
|
|
|
|
unless (count(//creature[@race='hobbit'])) { |
5049
|
|
|
|
|
|
|
open my $file, "hobbits.txt"; |
5050
|
|
|
|
|
|
|
foreach (<$file>) { |
5051
|
|
|
|
|
|
|
xsh(qq{insert element "" |
5052
|
|
|
|
|
|
|
into m:/middle-earth/creatures}); |
5053
|
|
|
|
|
|
|
} |
5054
|
|
|
|
|
|
|
close $file; |
5055
|
|
|
|
|
|
|
} |
5056
|
|
|
|
|
|
|
}; |
5057
|
|
|
|
|
|
|
|
5058
|
|
|
|
|
|
|
Writing your own XPath extension functions in Perl |
5059
|
|
|
|
|
|
|
-------------------------------------------------- |
5060
|
|
|
|
|
|
|
|
5061
|
|
|
|
|
|
|
XSH2 allows users to extend the set of XPath functions by providing |
5062
|
|
|
|
|
|
|
extension functions written in Perl. This can be achieved using the |
5063
|
|
|
|
|
|
|
[register-function] command. The perl code implementing an extension |
5064
|
|
|
|
|
|
|
function works as a usual perl routine accepting its arguments in '@_' |
5065
|
|
|
|
|
|
|
and returning the result. The following conventions are used: |
5066
|
|
|
|
|
|
|
|
5067
|
|
|
|
|
|
|
The arguments passed to the perl implementation by the XPath engine are |
5068
|
|
|
|
|
|
|
simple scalars for string, boolean and float argument types and |
5069
|
|
|
|
|
|
|
'XML::LibXML::NodeList' objects for node-set argument types. The |
5070
|
|
|
|
|
|
|
implementation is responsible for checking the argument number and |
5071
|
|
|
|
|
|
|
types. The implementation may use general Perl functions as well as |
5072
|
|
|
|
|
|
|
'XML::LibXML' methods to process the arguments and return the result. |
5073
|
|
|
|
|
|
|
Documentation for the 'XML::LibXML' Perl module can be found for |
5074
|
|
|
|
|
|
|
example at http://search.cpan.org/~pajas/XML-LibXML/. |
5075
|
|
|
|
|
|
|
|
5076
|
|
|
|
|
|
|
Extension functions SHOULD NOT MODIFY the document DOM tree. Doing so |
5077
|
|
|
|
|
|
|
could not only confuse the XPath engine but possibly even result in an |
5078
|
|
|
|
|
|
|
critical error (such as segmentation fault). Calling XSH2 commands from |
5079
|
|
|
|
|
|
|
extension function implementations is also dangerous and isn't |
5080
|
|
|
|
|
|
|
generally recommended. |
5081
|
|
|
|
|
|
|
|
5082
|
|
|
|
|
|
|
The extension function implementation must return a single value, which |
5083
|
|
|
|
|
|
|
can be of one of the following types: simple scalar (a number or |
5084
|
|
|
|
|
|
|
string), 'XML::LibXML::Boolean' object reference (result is a boolean |
5085
|
|
|
|
|
|
|
value), 'XML::LibXML::Literal' object reference (result is a string), |
5086
|
|
|
|
|
|
|
'XML::LibXML::Number' object reference (result is a float), |
5087
|
|
|
|
|
|
|
'XML::LibXML::Node' (or derived) object reference (result is a node-set |
5088
|
|
|
|
|
|
|
consisting of a single node), or 'XML::LibXML::NodeList' (result is a |
5089
|
|
|
|
|
|
|
node-set). For convenience, simple (non-blessed) array references |
5090
|
|
|
|
|
|
|
consisting of 'XML::LibXML::Node' objects can also be used for a |
5091
|
|
|
|
|
|
|
node-set result instead of a 'XML::LibXML::NodeList'. |
5092
|
|
|
|
|
|
|
|
5093
|
|
|
|
|
|
|
Calling the System Shell |
5094
|
|
|
|
|
|
|
------------------------ |
5095
|
|
|
|
|
|
|
|
5096
|
|
|
|
|
|
|
In the interactive mode, XSH2 interprets all lines starting with the |
5097
|
|
|
|
|
|
|
exclamation mark ('!') as shell commands and invokes the system shell |
5098
|
|
|
|
|
|
|
to interpret the line (this is to mimic FTP and similar command-line |
5099
|
|
|
|
|
|
|
interpreters). |
5100
|
|
|
|
|
|
|
|
5101
|
|
|
|
|
|
|
Example: |
5102
|
|
|
|
|
|
|
xsh> !ls -l |
5103
|
|
|
|
|
|
|
-rw-rw-r-- 1 pajas pajas 6355 Mar 14 17:08 Artistic |
5104
|
|
|
|
|
|
|
drwxrwxr-x 2 pajas users 128 Sep 1 10:09 CVS |
5105
|
|
|
|
|
|
|
-rw-r--r-- 1 pajas pajas 14859 Aug 26 15:19 ChangeLog |
5106
|
|
|
|
|
|
|
-rw-r--r-- 1 pajas pajas 2220 Mar 14 17:03 INSTALL |
5107
|
|
|
|
|
|
|
-rw-r--r-- 1 pajas pajas 18009 Jul 15 17:35 LICENSE |
5108
|
|
|
|
|
|
|
-rw-rw-r-- 1 pajas pajas 417 May 9 15:16 MANIFEST |
5109
|
|
|
|
|
|
|
-rw-rw-r-- 1 pajas pajas 126 May 9 15:16 MANIFEST.SKIP |
5110
|
|
|
|
|
|
|
-rw-r--r-- 1 pajas pajas 20424 Sep 1 11:04 Makefile |
5111
|
|
|
|
|
|
|
-rw-r--r-- 1 pajas pajas 914 Aug 26 14:32 Makefile.PL |
5112
|
|
|
|
|
|
|
-rw-r--r-- 1 pajas pajas 1910 Mar 14 17:17 README |
5113
|
|
|
|
|
|
|
-rw-r--r-- 1 pajas pajas 438 Aug 27 13:51 TODO |
5114
|
|
|
|
|
|
|
drwxrwxr-x 5 pajas users 120 Jun 15 10:35 blib |
5115
|
|
|
|
|
|
|
drwxrwxr-x 3 pajas users 1160 Sep 1 10:09 examples |
5116
|
|
|
|
|
|
|
drwxrwxr-x 4 pajas users 96 Jun 15 10:35 lib |
5117
|
|
|
|
|
|
|
-rw-rw-r-- 1 pajas pajas 0 Sep 1 16:23 pm_to_blib |
5118
|
|
|
|
|
|
|
drwxrwxr-x 4 pajas users 584 Sep 1 21:18 src |
5119
|
|
|
|
|
|
|
drwxrwxr-x 3 pajas users 136 Sep 1 10:09 t |
5120
|
|
|
|
|
|
|
-rw-rw-r-- 1 pajas pajas 50 Jun 16 00:06 test |
5121
|
|
|
|
|
|
|
drwxrwxr-x 3 pajas users 496 Sep 1 20:18 tools |
5122
|
|
|
|
|
|
|
-rwxr-xr-x 1 pajas pajas 5104 Aug 30 17:08 xsh |
5123
|
|
|
|
|
|
|
|
5124
|
|
|
|
|
|
|
To invoke a system shell command or program from the non-interactive |
5125
|
|
|
|
|
|
|
mode or from a complex XSH2 construction, use the [exec] command. |
5126
|
|
|
|
|
|
|
|
5127
|
|
|
|
|
|
|
Since UNIX shell commands are very powerful tool for processing textual |
5128
|
|
|
|
|
|
|
data, XSH2 supports direct redirection of XSH2 commands output to |
5129
|
|
|
|
|
|
|
system shell command. This is very similarly to the redirection known |
5130
|
|
|
|
|
|
|
from UNIX shells, except that here, of course, the first command in the |
5131
|
|
|
|
|
|
|
pipe-line colone is an XSH2 [command]. Since semicolon (';') is used in |
5132
|
|
|
|
|
|
|
XSH2 to separate commands, it has to be prefixed with a backslash if it |
5133
|
|
|
|
|
|
|
should be used for other purposes. |
5134
|
|
|
|
|
|
|
|
5135
|
|
|
|
|
|
|
Example: Use grep and less to display context of `funny' |
5136
|
|
|
|
|
|
|
|
5137
|
|
|
|
|
|
|
xsh> ls //chapter[5]/para | grep funny | less |
5138
|
|
|
|
|
|
|
|
5139
|
|
|
|
|
|
|
Example: The same on Windows 2000/XP systems |
5140
|
|
|
|
|
|
|
|
5141
|
|
|
|
|
|
|
xsh> ls //chapter[5]/para | find "funny" | more |
5142
|
|
|
|
|
|
|
|
5143
|
|
|
|
|
|
|
|
5144
|
|
|
|
|
|
|
Related help items: |
5145
|
|
|
|
|
|
|
exec, hash, lcd, map, perl, rename |
5146
|
|
|
|
|
|
|
|
5147
|
|
|
|
|
|
|
END |
5148
|
|
|
|
|
|
|
|
5149
|
|
|
|
|
|
|
$HELP{'Prompt'}=[<<'END']; |
5150
|
|
|
|
|
|
|
Prompt in the interactive shell |
5151
|
|
|
|
|
|
|
------------------------------- |
5152
|
|
|
|
|
|
|
|
5153
|
|
|
|
|
|
|
Like many other shells, XSH2 provides means for customizing the format of |
5154
|
|
|
|
|
|
|
its interactive shell prompt. The prompt is displayed according to the |
5155
|
|
|
|
|
|
|
content of the variable '$PROMPT' on which the following substitutions |
5156
|
|
|
|
|
|
|
and interpolations are performed (in this order): |
5157
|
|
|
|
|
|
|
|
5158
|
|
|
|
|
|
|
1. Prompt-string replacements |
5159
|
|
|
|
|
|
|
|
5160
|
|
|
|
|
|
|
%% - percent sign |
5161
|
|
|
|
|
|
|
%p - XPath location of the current node |
5162
|
|
|
|
|
|
|
%P - like %p but without an initial document variable |
5163
|
|
|
|
|
|
|
%l - XPath location of the current node with ID-shortcuts |
5164
|
|
|
|
|
|
|
%L - like %l but without an initial document variable |
5165
|
|
|
|
|
|
|
%n - name of the current node |
5166
|
|
|
|
|
|
|
%N - local name of the current node |
5167
|
|
|
|
|
|
|
%c - canonical XPath name of the current node |
5168
|
|
|
|
|
|
|
%y - type of the current node (element,attribute,...) |
5169
|
|
|
|
|
|
|
%i - ID of the current node |
5170
|
|
|
|
|
|
|
%d - current document variable |
5171
|
|
|
|
|
|
|
%h - the hostname up to the first '.' |
5172
|
|
|
|
|
|
|
%H - the hostname |
5173
|
|
|
|
|
|
|
%s - XSH shell name (basename of $0) |
5174
|
|
|
|
|
|
|
%t - the current time in 24-hour HH:MM:SS format |
5175
|
|
|
|
|
|
|
%T - the current time in 12-hour HH:MM:SS format |
5176
|
|
|
|
|
|
|
%@ - the current time in 12-hour am/pm format |
5177
|
|
|
|
|
|
|
%A - the current time in 24-hour HH:MM format |
5178
|
|
|
|
|
|
|
%u - the username of the current user |
5179
|
|
|
|
|
|
|
%v - the version of XSH2 (e.g., 2.1.0) |
5180
|
|
|
|
|
|
|
%V - the revision number of XML::XSH2::Functions (e.g. 2.40) |
5181
|
|
|
|
|
|
|
%w - current working directory (on the local filesystem) |
5182
|
|
|
|
|
|
|
%W - basename of %w |
5183
|
|
|
|
|
|
|
2. Variable, XPath and Perl interpolations |
5184
|
|
|
|
|
|
|
|
5185
|
|
|
|
|
|
|
Substrings of the forms '${variable}', '${{...perl...}}' and |
5186
|
|
|
|
|
|
|
'${(...xpath...)}' are interpolated as in XSH2 [expressions]. |
5187
|
|
|
|
|
|
|
|
5188
|
|
|
|
|
|
|
3. Special character substitution |
5189
|
|
|
|
|
|
|
|
5190
|
|
|
|
|
|
|
\n - newline character |
5191
|
|
|
|
|
|
|
\r - line-feed character |
5192
|
|
|
|
|
|
|
\t - tab character |
5193
|
|
|
|
|
|
|
\a - bell character |
5194
|
|
|
|
|
|
|
\b - backspace character |
5195
|
|
|
|
|
|
|
\f - form feed character |
5196
|
|
|
|
|
|
|
\e - escape character (\033) |
5197
|
|
|
|
|
|
|
\\ - backslash character |
5198
|
|
|
|
|
|
|
\nnn - the character corresponding to the octal number nnn |
5199
|
|
|
|
|
|
|
(useful for non-printable terminal control characters) |
5200
|
|
|
|
|
|
|
The default value of '$PROMPT' is '"%p>"'. |
5201
|
|
|
|
|
|
|
|
5202
|
|
|
|
|
|
|
Note that you must escape '${...}' interpolators like '\${...}' if you |
5203
|
|
|
|
|
|
|
want them to be evaluated at each prompt rather than at the time of the |
5204
|
|
|
|
|
|
|
assignment to '$PROMPT'. For example: |
5205
|
|
|
|
|
|
|
|
5206
|
|
|
|
|
|
|
Example: Let `uname` be computed once, `date` at every prompt |
5207
|
|
|
|
|
|
|
|
5208
|
|
|
|
|
|
|
$PROMPT="[${{ chomp($u=`uname`);$u }} \${{ chomp($d=`date`);$d }}] %p>" |
5209
|
|
|
|
|
|
|
|
5210
|
|
|
|
|
|
|
END |
5211
|
|
|
|
|
|
|
|
5212
|
|
|
|
|
|
|
$HELP{'xsh2delta'}=[<<'END']; |
5213
|
|
|
|
|
|
|
Changes since XSH 1.x |
5214
|
|
|
|
|
|
|
--------------------- |
5215
|
|
|
|
|
|
|
|
5216
|
|
|
|
|
|
|
This section briefly describes differences between XSH2 and previous XSH |
5217
|
|
|
|
|
|
|
1.x releases. The list should not be considered complete. Some syntax |
5218
|
|
|
|
|
|
|
variations or amendments in the semantics of various commands may not be |
5219
|
|
|
|
|
|
|
documented in this section, neither are various improvements in the XSH |
5220
|
|
|
|
|
|
|
interpreter. |
5221
|
|
|
|
|
|
|
|
5222
|
|
|
|
|
|
|
Changes in XSH2 |
5223
|
|
|
|
|
|
|
--------------- |
5224
|
|
|
|
|
|
|
|
5225
|
|
|
|
|
|
|
1. In XSH2, subroutines can be called without a [call]. They can be |
5226
|
|
|
|
|
|
|
[redefined] and [undefined]. The command [call] can still be used, |
5227
|
|
|
|
|
|
|
but it's use only makes sense in indirect calls, where subroutine's |
5228
|
|
|
|
|
|
|
name is computed from an expression. |
5229
|
|
|
|
|
|
|
|
5230
|
|
|
|
|
|
|
def foo $param1 $param2 { |
5231
|
|
|
|
|
|
|
# param1 and $param2 are lexical (a.k.a. my) |
5232
|
|
|
|
|
|
|
ls $param1; |
5233
|
|
|
|
|
|
|
echo $param2 |
5234
|
|
|
|
|
|
|
} |
5235
|
|
|
|
|
|
|
foo (//chapter)[1] (//chapter)[1]/title |
5236
|
|
|
|
|
|
|
|
5237
|
|
|
|
|
|
|
def inc $param1 { return ($param1 + 1) } |
5238
|
|
|
|
|
|
|
$two := inc 1; |
5239
|
|
|
|
|
|
|
2. XSH2 uses variables of the form [$variable] for all kinds of |
5240
|
|
|
|
|
|
|
objects, including node-sets (which, if evaluated as Perl |
5241
|
|
|
|
|
|
|
expressions, preserve node order). Node-list variables of XSH 1.x |
5242
|
|
|
|
|
|
|
have been deprecated. |
5243
|
|
|
|
|
|
|
|
5244
|
|
|
|
|
|
|
$var = //foo/bar; # node set |
5245
|
|
|
|
|
|
|
$var = "hallo world"; # string |
5246
|
|
|
|
|
|
|
$var = xsh:new-element("foo"); # node object |
5247
|
|
|
|
|
|
|
$var = { ['a','b','c'] }; # Perl array reference |
5248
|
|
|
|
|
|
|
$var = {{ 'a'=>'A', 'b'=>'B' }}; # Perl hash reference |
5249
|
|
|
|
|
|
|
3. XSH2 allows variables to be used in XPath just as they are used in |
5250
|
|
|
|
|
|
|
XSLT: |
5251
|
|
|
|
|
|
|
|
5252
|
|
|
|
|
|
|
$var = //foo/bar; |
5253
|
|
|
|
|
|
|
ls //baz[ . = $var[@test=1]/any ] |
5254
|
|
|
|
|
|
|
Variable interpolation is still available in XSH2 via ${var}, but |
5255
|
|
|
|
|
|
|
it's importance is diminished compared to XSH 1.x, because the XPath |
5256
|
|
|
|
|
|
|
engine now evaluates variables directly. Interpolation can still be |
5257
|
|
|
|
|
|
|
used for things like "XPath-macros": |
5258
|
|
|
|
|
|
|
|
5259
|
|
|
|
|
|
|
$filter = "[ . = $var[@test=1]/any ]"; |
5260
|
|
|
|
|
|
|
ls //baz${filter}; |
5261
|
|
|
|
|
|
|
4. XSH2 equally supports XPath and Perl [expressions] (written in |
5262
|
|
|
|
|
|
|
braces { ... }). Unfortunately, Perl expressions can't be embedded in |
5263
|
|
|
|
|
|
|
XPath [expressions], but one can still use variables as an agent: |
5264
|
|
|
|
|
|
|
|
5265
|
|
|
|
|
|
|
perl { use MIME::Base64 }; |
5266
|
|
|
|
|
|
|
my $encoded = { encode_base64('open sesame') } |
5267
|
|
|
|
|
|
|
ls //secret-cave[string(password) = $encoded] |
5268
|
|
|
|
|
|
|
We can, however, use Perl-only expressions complemented with |
5269
|
|
|
|
|
|
|
auto-conversion to do things like: |
5270
|
|
|
|
|
|
|
|
5271
|
|
|
|
|
|
|
copy { encode_base64('Pe do mellon a minno!') } replace //secret-cave/password/text(); |
5272
|
|
|
|
|
|
|
5. Commands return values (see [:= assignment], or [&{ } |
5273
|
|
|
|
|
|
|
expressions]). |
5274
|
|
|
|
|
|
|
|
5275
|
|
|
|
|
|
|
$moved_paras := xmove //para replace .; |
5276
|
|
|
|
|
|
|
$chapter := wrap chapter $moved_paras; |
5277
|
|
|
|
|
|
|
ls $chapter; |
5278
|
|
|
|
|
|
|
|
5279
|
|
|
|
|
|
|
# or just |
5280
|
|
|
|
|
|
|
|
5281
|
|
|
|
|
|
|
ls &{ wrap chapter &{ xmove //para replace . } }; |
5282
|
|
|
|
|
|
|
6. XSH2 deprecates "string" expressions of XSH 1.x. However, for |
5283
|
|
|
|
|
|
|
convenience, some XSH2 commands interpret name-like XPath expressions |
5284
|
|
|
|
|
|
|
on certain argument positions as strings (mostly commands that expect |
5285
|
|
|
|
|
|
|
file-name or node-name arguments): |
5286
|
|
|
|
|
|
|
|
5287
|
|
|
|
|
|
|
insert element my_document into .; |
5288
|
|
|
|
|
|
|
insert text "foo" into my_document; |
5289
|
|
|
|
|
|
|
|
5290
|
|
|
|
|
|
|
$doc := open my_document; # opens file named "my_document" |
5291
|
|
|
|
|
|
|
$doc := open "my_document"; # same |
5292
|
|
|
|
|
|
|
$doc := open (my_document); # opens file named "foo" |
5293
|
|
|
|
|
|
|
$doc := open string(my_document); # same |
5294
|
|
|
|
|
|
|
7. In XSH2, XML documents have no ID. They are referred to using |
5295
|
|
|
|
|
|
|
variables (which fits in well with the unified variable concept): |
5296
|
|
|
|
|
|
|
|
5297
|
|
|
|
|
|
|
$doc1 := open "foo1.xml"; |
5298
|
|
|
|
|
|
|
$doc2 := open "foo2.xml"; |
5299
|
|
|
|
|
|
|
ls ($doc1//para|$doc2//para); |
5300
|
|
|
|
|
|
|
cd $doc1; |
5301
|
|
|
|
|
|
|
ls id('intro'); # finds ID intro in the current document ($doc1) |
5302
|
|
|
|
|
|
|
ls xsh:id2($doc2, 'intro'); # finds ID intro in $doc2 |
5303
|
|
|
|
|
|
|
8. XSH2 commands have options and flags instead of many optional |
5304
|
|
|
|
|
|
|
(positional) arguments. Options/flags usually have both long forms |
5305
|
|
|
|
|
|
|
(like --flag) and equivalent short forms (like :f) (colon is borrowed |
5306
|
|
|
|
|
|
|
from Scheme, because dash is reserved for XPath minus). |
5307
|
|
|
|
|
|
|
|
5308
|
|
|
|
|
|
|
$doc := open --format html "version1.html"; |
5309
|
|
|
|
|
|
|
save --file "version2.xml" $doc; |
5310
|
|
|
|
|
|
|
|
5311
|
|
|
|
|
|
|
ls --fold /; |
5312
|
|
|
|
|
|
|
ls :f /; |
5313
|
|
|
|
|
|
|
ls --depth 1 /; |
5314
|
|
|
|
|
|
|
ls :d 1 /; |
5315
|
|
|
|
|
|
|
|
5316
|
|
|
|
|
|
|
# all the same: |
5317
|
|
|
|
|
|
|
$sorted = sort --key @name --locale --descending //user; |
5318
|
|
|
|
|
|
|
$sorted = sort :l:d:k@name //user; |
5319
|
|
|
|
|
|
|
$sorted = sort --key @name --compare { use locale; $b cmp $a } //user; |
5320
|
|
|
|
|
|
|
|
5321
|
|
|
|
|
|
|
validate --relaxng --file "test.rng" $mydoc; |
5322
|
|
|
|
|
|
|
validate --public "-//OASIS//DTD DocBook XML V4.1.2//EN" $mydoc; |
5323
|
|
|
|
|
|
|
validate --yesno $mydoc; |
5324
|
|
|
|
|
|
|
9. Finally, [eval] is no longer an alias for [perl] in XSH2, but |
5325
|
|
|
|
|
|
|
instead evaluates strings containing XSH2 commands (so 'eval $string' |
5326
|
|
|
|
|
|
|
now practically works like old ugly 'perl { xsh($string) }'). See the |
5327
|
|
|
|
|
|
|
documentation for [eval] for a handy usage example (no more PHP, XSTL |
5328
|
|
|
|
|
|
|
and XPathScript :-)). |
5329
|
|
|
|
|
|
|
|
5330
|
|
|
|
|
|
|
Examples |
5331
|
|
|
|
|
|
|
-------- |
5332
|
|
|
|
|
|
|
|
5333
|
|
|
|
|
|
|
Example: Open command has changed. |
5334
|
|
|
|
|
|
|
|
5335
|
|
|
|
|
|
|
XSH1: |
5336
|
|
|
|
|
|
|
foo = file.xml; |
5337
|
|
|
|
|
|
|
or |
5338
|
|
|
|
|
|
|
foo = "file.xml"; |
5339
|
|
|
|
|
|
|
XSH2: |
5340
|
|
|
|
|
|
|
$foo := open file.xml; # file.xml is a bareword in file-name context |
5341
|
|
|
|
|
|
|
or |
5342
|
|
|
|
|
|
|
$foo := open "file.xml"; # "file.xml" is a XPath string |
5343
|
|
|
|
|
|
|
or |
5344
|
|
|
|
|
|
|
$foo := open {"file.xml"}; # "file.xml" is a Perl string |
5345
|
|
|
|
|
|
|
or |
5346
|
|
|
|
|
|
|
$foo = xsh:open("file.xml"); # righthand side is an XPath extension function |
5347
|
|
|
|
|
|
|
|
5348
|
|
|
|
|
|
|
Example: XSH2 commands have options |
5349
|
|
|
|
|
|
|
|
5350
|
|
|
|
|
|
|
XSH1: |
5351
|
|
|
|
|
|
|
open HTML FILE foo2 = "file.html"; |
5352
|
|
|
|
|
|
|
XSH2: |
5353
|
|
|
|
|
|
|
$foo2 := open --format html "file.html"; |
5354
|
|
|
|
|
|
|
|
5355
|
|
|
|
|
|
|
Example: documents |
5356
|
|
|
|
|
|
|
|
5357
|
|
|
|
|
|
|
XSH1: |
5358
|
|
|
|
|
|
|
foo = file.xml; |
5359
|
|
|
|
|
|
|
ls foo:(//bar|//baz); |
5360
|
|
|
|
|
|
|
XSH2: |
5361
|
|
|
|
|
|
|
$foo := open file.xml; |
5362
|
|
|
|
|
|
|
ls ($foo//bar|$foo//baz); |
5363
|
|
|
|
|
|
|
|
5364
|
|
|
|
|
|
|
Example: variable interpretation |
5365
|
|
|
|
|
|
|
|
5366
|
|
|
|
|
|
|
XSH1: |
5367
|
|
|
|
|
|
|
$family = "Arial"; |
5368
|
|
|
|
|
|
|
ls //font[@family="$family"]; # interpolation |
5369
|
|
|
|
|
|
|
or |
5370
|
|
|
|
|
|
|
ls //font[@family="${family}"]; # interpolation |
5371
|
|
|
|
|
|
|
XSH2: |
5372
|
|
|
|
|
|
|
$family = "Arial"; |
5373
|
|
|
|
|
|
|
ls //font[@family=$family]; # evaluation by XPath engine |
5374
|
|
|
|
|
|
|
or |
5375
|
|
|
|
|
|
|
ls //font[@family="${family}"]; # interpolation |
5376
|
|
|
|
|
|
|
|
5377
|
|
|
|
|
|
|
Example: adding new nodes |
5378
|
|
|
|
|
|
|
|
5379
|
|
|
|
|
|
|
XSH1: |
5380
|
|
|
|
|
|
|
insert attribute "foo=bar" into /scratch; |
5381
|
|
|
|
|
|
|
XSH2: |
5382
|
|
|
|
|
|
|
insert attribute "foo=bar" into /scratch; |
5383
|
|
|
|
|
|
|
or |
5384
|
|
|
|
|
|
|
copy xsh:new-attribute("foo","bar") into /scratch; |
5385
|
|
|
|
|
|
|
|
5386
|
|
|
|
|
|
|
Example: foreach with perl expression |
5387
|
|
|
|
|
|
|
|
5388
|
|
|
|
|
|
|
XSH1: |
5389
|
|
|
|
|
|
|
foreach { glob('*.xml') } { |
5390
|
|
|
|
|
|
|
open doc = $__; |
5391
|
|
|
|
|
|
|
... |
5392
|
|
|
|
|
|
|
} |
5393
|
|
|
|
|
|
|
XSH2: |
5394
|
|
|
|
|
|
|
foreach { glob('*.xml') } { |
5395
|
|
|
|
|
|
|
my $doc := open .; |
5396
|
|
|
|
|
|
|
... |
5397
|
|
|
|
|
|
|
} |
5398
|
|
|
|
|
|
|
|
5399
|
|
|
|
|
|
|
Example: foreach (perl expression) with variable |
5400
|
|
|
|
|
|
|
|
5401
|
|
|
|
|
|
|
XSH2: |
5402
|
|
|
|
|
|
|
foreach my $filename in { glob('*.xml') } { |
5403
|
|
|
|
|
|
|
my $doc := open $filename; |
5404
|
|
|
|
|
|
|
... |
5405
|
|
|
|
|
|
|
} |
5406
|
|
|
|
|
|
|
|
5407
|
|
|
|
|
|
|
Example: sorting nodes |
5408
|
|
|
|
|
|
|
|
5409
|
|
|
|
|
|
|
XSH1: |
5410
|
|
|
|
|
|
|
%list = //player; |
5411
|
|
|
|
|
|
|
sort @best_score { $a <=> $b } %list; |
5412
|
|
|
|
|
|
|
copy %list into .; |
5413
|
|
|
|
|
|
|
XSH2: |
5414
|
|
|
|
|
|
|
$list := sort --numeric --key @best_score //player; |
5415
|
|
|
|
|
|
|
copy { $list } into .; |
5416
|
|
|
|
|
|
|
or |
5417
|
|
|
|
|
|
|
copy &{ sort --numeric --key @best_score //player } into .; |
5418
|
|
|
|
|
|
|
or (using short options) |
5419
|
|
|
|
|
|
|
copy &{ sort :n :k @best_score //player } into .; |
5420
|
|
|
|
|
|
|
|
5421
|
|
|
|
|
|
|
END |
5422
|
|
|
|
|
|
|
|
5423
|
|
|
|
|
|
|
$HELP{'commands'}=$HELP{'command'}; |
5424
|
|
|
|
|
|
|
$Apropos = { |
5425
|
|
|
|
|
|
|
'quiet' => 'turn off many XSH2 messages', |
5426
|
|
|
|
|
|
|
'location' => 'relative destination specification (such as after, before, etc.)', |
5427
|
|
|
|
|
|
|
'edit-string' => 'Edit a string or variable in a text editor.', |
5428
|
|
|
|
|
|
|
'perl' => 'evaluate in-line Perl code', |
5429
|
|
|
|
|
|
|
'xsh:join' => undef, |
5430
|
|
|
|
|
|
|
'xpath' => 'XPath expression', |
5431
|
|
|
|
|
|
|
'try' => 'try/catch statement', |
5432
|
|
|
|
|
|
|
'xsh:strmax' => undef, |
5433
|
|
|
|
|
|
|
'print' => 'print stuff on standard or standard error output', |
5434
|
|
|
|
|
|
|
'nodebug' => 'turn off debugging messages', |
5435
|
|
|
|
|
|
|
'register-xsh-namespace' => 'register a prefix for the XSH2 namespace', |
5436
|
|
|
|
|
|
|
'move' => 'move nodes (in the one-to-one mode)', |
5437
|
|
|
|
|
|
|
'xsh:lookup' => undef, |
5438
|
|
|
|
|
|
|
'xsh:times' => undef, |
5439
|
|
|
|
|
|
|
'xpath-completion' => 'turn on/off TAB completion for xpath expressions in the interactive mode', |
5440
|
|
|
|
|
|
|
'dtd' => 'show document\'s DTD', |
5441
|
|
|
|
|
|
|
'xsh:current' => undef, |
5442
|
|
|
|
|
|
|
'declare-ns' => 'create a special attribute declaring an XML namespace (EXPERIMENTAL)', |
5443
|
|
|
|
|
|
|
'xsh:min' => undef, |
5444
|
|
|
|
|
|
|
'nobackups' => 'turn off backup file creation', |
5445
|
|
|
|
|
|
|
'xsh:max' => undef, |
5446
|
|
|
|
|
|
|
'clone' => 'clone a given document', |
5447
|
|
|
|
|
|
|
'wrap' => 'wrap given nodes into elements', |
5448
|
|
|
|
|
|
|
'xsh:base-uri' => undef, |
5449
|
|
|
|
|
|
|
'xinsert' => 'create nodes on all target locations', |
5450
|
|
|
|
|
|
|
'xsh:new-pi' => undef, |
5451
|
|
|
|
|
|
|
'edit' => 'Edit parts of a XML document in a text editor.', |
5452
|
|
|
|
|
|
|
'xsh:new-cdata' => undef, |
5453
|
|
|
|
|
|
|
'enc' => 'show document\'s original character encoding', |
5454
|
|
|
|
|
|
|
'count' => 'calculate a [expression] and enumerate node-lists', |
5455
|
|
|
|
|
|
|
'xsh:if' => undef, |
5456
|
|
|
|
|
|
|
'xsh:lineno' => undef, |
5457
|
|
|
|
|
|
|
'xsh:reverse' => undef, |
5458
|
|
|
|
|
|
|
'query-encoding' => 'declare the charset of XSH2 source files and terminal input', |
5459
|
|
|
|
|
|
|
'prev' => 'restart an iteration on a previous node', |
5460
|
|
|
|
|
|
|
'xsh:new-text' => undef, |
5461
|
|
|
|
|
|
|
'set-standalone' => 'set document\'s standalone flag', |
5462
|
|
|
|
|
|
|
'xsh:var' => undef, |
5463
|
|
|
|
|
|
|
'change-ns-uri' => 'change namespace URI (EXPERIMENTAL)', |
5464
|
|
|
|
|
|
|
'xsh:path' => undef, |
5465
|
|
|
|
|
|
|
'xsh:ucfirst' => undef, |
5466
|
|
|
|
|
|
|
'eval' => 'evaluate given expression as XSH commands', |
5467
|
|
|
|
|
|
|
'backups' => 'turn on backup file creation', |
5468
|
|
|
|
|
|
|
'create' => 'make a new document from a given XML fragment', |
5469
|
|
|
|
|
|
|
'xsh:map' => undef, |
5470
|
|
|
|
|
|
|
'get' => 'calculate a given expression and return the result.', |
5471
|
|
|
|
|
|
|
'xsh:new-element-ns' => undef, |
5472
|
|
|
|
|
|
|
'pedantic-parser' => 'make the parser more pedantic', |
5473
|
|
|
|
|
|
|
'cd' => 'change current context node', |
5474
|
|
|
|
|
|
|
'recovering' => 'turn on/off parser\'s ability to fix broken XML', |
5475
|
|
|
|
|
|
|
'while' => 'simple while loop', |
5476
|
|
|
|
|
|
|
'parser-completes-attributes' => 'turn on/off parser\'s ability to fill default attribute values', |
5477
|
|
|
|
|
|
|
'unregister-function' => 'undefine extension function (EXPERIMENTAL)', |
5478
|
|
|
|
|
|
|
'next' => 'start the next iteration of an enclosing loop', |
5479
|
|
|
|
|
|
|
'xsh:id2' => undef, |
5480
|
|
|
|
|
|
|
'help' => 'on-line documentation', |
5481
|
|
|
|
|
|
|
'namespaces' => 'List namespaces available in a context of a given nodes', |
5482
|
|
|
|
|
|
|
'ls' => 'list a given part of a document as XML', |
5483
|
|
|
|
|
|
|
'register-function' => 'define XPath extension function (EXPERIMENTAL)', |
5484
|
|
|
|
|
|
|
'xsh:filename' => undef, |
5485
|
|
|
|
|
|
|
'document' => 'specifying documents', |
5486
|
|
|
|
|
|
|
'set-dtd' => 'set document\'s DTD declaration', |
5487
|
|
|
|
|
|
|
'stream' => 'process selected elements from an XML stream (EXPERIMENTAL)', |
5488
|
|
|
|
|
|
|
'version' => 'show version information', |
5489
|
|
|
|
|
|
|
'xsh:substr' => undef, |
5490
|
|
|
|
|
|
|
'last' => 'immediately exit an enclosing loop', |
5491
|
|
|
|
|
|
|
'return' => 'return from a subroutine', |
5492
|
|
|
|
|
|
|
'set-ns' => 'set namespace of the current node (EXPERIMENTAL)', |
5493
|
|
|
|
|
|
|
'expression' => 'expression argument type', |
5494
|
|
|
|
|
|
|
'xsh:split' => undef, |
5495
|
|
|
|
|
|
|
'xcopy' => 'copy nodes (in the all-to-every mode)', |
5496
|
|
|
|
|
|
|
'map' => 'transform node value/data using Perl or XPath expression', |
5497
|
|
|
|
|
|
|
'xsh:uc' => undef, |
5498
|
|
|
|
|
|
|
'switch-to-new-documents' => 'set on/off changing current document to newly open/created files', |
5499
|
|
|
|
|
|
|
'def' => 'sub-routine declaration', |
5500
|
|
|
|
|
|
|
'xsh:document-uri' => undef, |
5501
|
|
|
|
|
|
|
'normalize' => 'normalizes adjacent textnodes', |
5502
|
|
|
|
|
|
|
'foreach' => 'loop iterating over a node-list or a perl array', |
5503
|
|
|
|
|
|
|
'xsh:new-chunk' => undef, |
5504
|
|
|
|
|
|
|
'assign' => 'variable assignment', |
5505
|
|
|
|
|
|
|
'rename' => 'quickly rename nodes with in-line Perl code', |
5506
|
|
|
|
|
|
|
'call' => 'indirect call to a user-defined routine (macro)', |
5507
|
|
|
|
|
|
|
'subroutine' => 'name of a sub-routine', |
5508
|
|
|
|
|
|
|
'load-ext-dtd' => 'turn on/off external DTD fetching', |
5509
|
|
|
|
|
|
|
'indent' => 'turn on/off pretty-printing', |
5510
|
|
|
|
|
|
|
'unregister-namespace' => 'unregister namespace prefix', |
5511
|
|
|
|
|
|
|
'include' => 'include another XSH2 source in current position', |
5512
|
|
|
|
|
|
|
'xsh:grep' => undef, |
5513
|
|
|
|
|
|
|
'run-mode' => 'switch into normal execution mode (quit [test-mode])', |
5514
|
|
|
|
|
|
|
'xmove' => 'move nodes (in the all-to-every mode)', |
5515
|
|
|
|
|
|
|
'xsh:span' => undef, |
5516
|
|
|
|
|
|
|
'type' => undef, |
5517
|
|
|
|
|
|
|
'locate' => 'show a given node location (as a canonical XPath)', |
5518
|
|
|
|
|
|
|
'node-type' => 'node type specification (such as element, attribute, etc.)', |
5519
|
|
|
|
|
|
|
'copy' => 'copy nodes (in the one-to-one mode)', |
5520
|
|
|
|
|
|
|
'do' => 'execute a given block of commands', |
5521
|
|
|
|
|
|
|
'set_filename' => 'change filename or URL associated with a document', |
5522
|
|
|
|
|
|
|
'exec' => 'execute a shell command', |
5523
|
|
|
|
|
|
|
'validate' => 'validate a document against a DTD, RelaxNG, or XSD schemas', |
5524
|
|
|
|
|
|
|
'xpath-axis-completion' => 'sets TAB completion for axes in xpath expressions in the interactive mode', |
5525
|
|
|
|
|
|
|
'xsh:new-comment' => undef, |
5526
|
|
|
|
|
|
|
'doc-info' => 'displays various information about a document', |
5527
|
|
|
|
|
|
|
'skip-dtd' => 'turn on/off serialization of DTD DOCTYPE declaration', |
5528
|
|
|
|
|
|
|
'filename' => 'specifying filenames', |
5529
|
|
|
|
|
|
|
'command' => 'List of XSH2 commands and their general syntax', |
5530
|
|
|
|
|
|
|
'wrap-span' => 'wrap spans of nodes into elements', |
5531
|
|
|
|
|
|
|
'redo' => 'restart the innermost enclosing loop block', |
5532
|
|
|
|
|
|
|
'set-enc' => 'set document\'s charset (encoding)', |
5533
|
|
|
|
|
|
|
'xsh:resolve-uri' => undef, |
5534
|
|
|
|
|
|
|
'throw' => 'throw an exception', |
5535
|
|
|
|
|
|
|
'xslt' => 'compile a XSLT stylesheet and/or transform a document with XSLT', |
5536
|
|
|
|
|
|
|
'xsh:new-attribute' => undef, |
5537
|
|
|
|
|
|
|
'xsh:documents' => undef, |
5538
|
|
|
|
|
|
|
'xsh:context' => undef, |
5539
|
|
|
|
|
|
|
'defs' => 'list all user-defined subroutines', |
5540
|
|
|
|
|
|
|
'register-namespace' => 'register namespace prefix to use XPath expressions', |
5541
|
|
|
|
|
|
|
'if' => 'if statement', |
5542
|
|
|
|
|
|
|
'pwd' => 'show current context node location (as a canonical XPath)', |
5543
|
|
|
|
|
|
|
'open' => 'load an XML, HTML, or Docbook SGML document from a file, pipe or URI', |
5544
|
|
|
|
|
|
|
'xsh:parse' => undef, |
5545
|
|
|
|
|
|
|
'xsh:sum' => undef, |
5546
|
|
|
|
|
|
|
'block' => 'a block of XSH2 commands', |
5547
|
|
|
|
|
|
|
'xsh:same' => undef, |
5548
|
|
|
|
|
|
|
'empty-tags' => 'turn on/off serialization of empty tags', |
5549
|
|
|
|
|
|
|
'keep-blanks' => 'turn on/off ignorable whitespace preservation', |
5550
|
|
|
|
|
|
|
'remove' => 'remove given nodes', |
5551
|
|
|
|
|
|
|
'iterate' => 'iterate a block over current subtree', |
5552
|
|
|
|
|
|
|
'parser-expands-entities' => 'turn on/off parser\'s tendency to expand entities', |
5553
|
|
|
|
|
|
|
'insert' => 'create a node in on a given target location', |
5554
|
|
|
|
|
|
|
'exit' => 'exit XSH2 shell', |
5555
|
|
|
|
|
|
|
'xsh:document' => undef, |
5556
|
|
|
|
|
|
|
'my' => 'Create a new lexically scoped variable', |
5557
|
|
|
|
|
|
|
'settings' => 'list current settings using XSH2 syntax', |
5558
|
|
|
|
|
|
|
'sort' => 'sort a given node-list by given criteria', |
5559
|
|
|
|
|
|
|
'apropos' => 'search the documentation', |
5560
|
|
|
|
|
|
|
'encoding' => 'choose output charset', |
5561
|
|
|
|
|
|
|
'xsh:new-element' => undef, |
5562
|
|
|
|
|
|
|
'lcd' => 'change system working directory', |
5563
|
|
|
|
|
|
|
'parser-expands-xinclude' => 'turn on/off transparent XInclude insertion by parser', |
5564
|
|
|
|
|
|
|
'xsh:matches' => undef, |
5565
|
|
|
|
|
|
|
'xsh:strmin' => undef, |
5566
|
|
|
|
|
|
|
'xupdate' => 'apply XUpdate commands on a document', |
5567
|
|
|
|
|
|
|
'validation' => 'turn on/off validation in XML parser', |
5568
|
|
|
|
|
|
|
'xsh:subst' => undef, |
5569
|
|
|
|
|
|
|
'xpath-extensions' => 'map predefined XSH2 XPath extension functions to no or other namespace', |
5570
|
|
|
|
|
|
|
'save' => 'save a document as XML or HTML', |
5571
|
|
|
|
|
|
|
'perl-code' => 'in-line code in Perl programming language', |
5572
|
|
|
|
|
|
|
'nodename' => 'specifying names of DOM nodes', |
5573
|
|
|
|
|
|
|
'close' => 'close document (without saving)', |
5574
|
|
|
|
|
|
|
'hash' => 'index selected nodes by some key value', |
5575
|
|
|
|
|
|
|
'unfold' => 'unfold elements folded with fold command', |
5576
|
|
|
|
|
|
|
'canonical' => 'serialize nodes as to canonical XML', |
5577
|
|
|
|
|
|
|
'documents' => 'display a list of open documents', |
5578
|
|
|
|
|
|
|
'change-ns-prefix' => 'change namespace prefix (EXPERIMENTAL)', |
5579
|
|
|
|
|
|
|
'set' => 'create or modify document content (EXPERIMENTAL)', |
5580
|
|
|
|
|
|
|
'unless' => 'negated if statement', |
5581
|
|
|
|
|
|
|
'lineno' => 'print line-numbers corresponding to matching nodes', |
5582
|
|
|
|
|
|
|
'undef' => 'undefine sub-routine or variable', |
5583
|
|
|
|
|
|
|
'verbose' => 'make XSH2 print many messages', |
5584
|
|
|
|
|
|
|
'catalog' => 'use a catalog file during all parsing processes', |
5585
|
|
|
|
|
|
|
'register-xhtml-namespace' => 'register a prefix for the XHTML namespace', |
5586
|
|
|
|
|
|
|
'xsh:match' => undef, |
5587
|
|
|
|
|
|
|
'process-xinclude' => 'load and insert XInclude sections', |
5588
|
|
|
|
|
|
|
'index' => 'index a static document for faster XPath lookup', |
5589
|
|
|
|
|
|
|
'xsh:doc' => undef, |
5590
|
|
|
|
|
|
|
'xsh:lc' => undef, |
5591
|
|
|
|
|
|
|
'ifinclude' => 'conditionally include another XSH2 source in current position', |
5592
|
|
|
|
|
|
|
'xsh:serialize' => undef, |
5593
|
|
|
|
|
|
|
'xsh:lcfirst' => undef, |
5594
|
|
|
|
|
|
|
'strip-whitespace' => 'strip leading and trailing whitespace', |
5595
|
|
|
|
|
|
|
'debug' => 'display many annoying debugging messages', |
5596
|
|
|
|
|
|
|
'local' => 'temporarily assign new value to a variable', |
5597
|
|
|
|
|
|
|
'xsh:evaluate' => undef, |
5598
|
|
|
|
|
|
|
'xsh:sprintf' => undef, |
5599
|
|
|
|
|
|
|
'$variable' => undef, |
5600
|
|
|
|
|
|
|
'variables' => 'list global variables', |
5601
|
|
|
|
|
|
|
'test-mode' => 'do not execute any command, only check the syntax', |
5602
|
|
|
|
|
|
|
'fold' => 'mark elements to be folded by list command' |
5603
|
|
|
|
|
|
|
}; |
5604
|
|
|
|
|
|
|
|
5605
|
|
|
|
|
|
|
1; |
5606
|
|
|
|
|
|
|
__END__ |