# iXML — LLM full working set

## Spec
- ixmldoc.xml: /__doc/ixmldoc.xml

## Indexes
- Namespaces (JSON): /ai/ixml/namespaces.json
- Commands with parents, children, result bindings and source lines (JSON): /ai/ixml/commands.json
- Full reference (Markdown): /ai/ixml/ixml.md

## Per-namespace docs (Markdown)
- array: /ai/ixml/namespace.array.md
- auth: /ai/ixml/namespace.auth.md
- bin: /ai/ixml/namespace.bin.md
- ctrl: /ai/ixml/namespace.ctrl.md
- date: /ai/ixml/namespace.date.md
- db: /ai/ixml/namespace.db.md
- debug: /ai/ixml/namespace.debug.md
- decode: /ai/ixml/namespace.decode.md
- encode: /ai/ixml/namespace.encode.md
- excel: /ai/ixml/namespace.excel.md
- extdata: /ai/ixml/namespace.extdata.md
- file: /ai/ixml/namespace.file.md
- form: /ai/ixml/namespace.form.md
- http: /ai/ixml/namespace.http.md
- mail: /ai/ixml/namespace.mail.md
- math: /ai/ixml/namespace.math.md
- misc: /ai/ixml/namespace.misc.md
- numformat: /ai/ixml/namespace.numformat.md
- pdf: /ai/ixml/namespace.pdf.md
- rest: /ai/ixml/namespace.rest.md
- soap: /ai/ixml/namespace.soap.md
- std: /ai/ixml/namespace.std.md
- tags: /ai/ixml/namespace.tags.md
- temp: /ai/ixml/namespace.temp.md
- xml: /ai/ixml/namespace.xml.md
- zip: /ai/ixml/namespace.zip.md

---

# iXML Language Reference (AI-friendly)

## Spec
- /__doc/ixmldoc.xml

## Terminology
- Element: Simple XML element
- Structure: Compound XML structure containing one or more elements
- Operation: Semantic definition of an element
- Construct: Semantic definition of a structure
- Statement: Executable instance of an operation or construct
- Code: Series of statements

## Input types
- var: String referencing a variable ('name') or an array item with a specific key ('name[key]', 'name.key') (unnecessary whitespace characters are automatically stripped)
- bool: Applicable if set and not empty
- int: Arithmetic expression cast to an integer number
- float: Arithmetic expression cast to a floating point number
- date: Arithmetic expression cast to an integer number and interpreted as a Unix timestamp
- string: Arbitrary byte sequence or series of Unicode (UTF-8) characters
- regexp: String interpreted as a Perl-compatible regular expression pattern enclosed in delimiters ('/[a-z]+/i')
- type: Meta type (case-insensitive)
- ixml: Arbitrary code

## Result types
- null: NULL
- bool: Boolean
- int: Integer number
- float: Floating point number
- string: String (arbitrary byte sequence)
- array: Array (collection of items in an ordered map that associates keys to values)
- function: Function (closed subroutine)
- macro: Macro (open subroutine)
- class: Class (array prototype)

## Namespaces
- array — Array: /ai/ixml/namespace.array.md
- auth — Authentication (ZeyOS): /ai/ixml/namespace.auth.md
- bin — Binary data store (ZeyOS): /ai/ixml/namespace.bin.md
- ctrl — Control constructs: /ai/ixml/namespace.ctrl.md
- date — Date and time: /ai/ixml/namespace.date.md
- db — Database: /ai/ixml/namespace.db.md
- debug — Debug: /ai/ixml/namespace.debug.md
- decode — Decoding: /ai/ixml/namespace.decode.md
- encode — Encoding: /ai/ixml/namespace.encode.md
- excel — Excel: /ai/ixml/namespace.excel.md
- extdata — ExtData (ZeyOS): /ai/ixml/namespace.extdata.md
- file — File system: /ai/ixml/namespace.file.md
- form — Form (ZeyOS): /ai/ixml/namespace.form.md
- http — HTTP: /ai/ixml/namespace.http.md
- mail — Mail (ZeyOS): /ai/ixml/namespace.mail.md
- math — Mathematics: /ai/ixml/namespace.math.md
- misc — Miscellaneous (ZeyOS): /ai/ixml/namespace.misc.md
- numformat — Number format (ZeyOS): /ai/ixml/namespace.numformat.md
- pdf — PDF: /ai/ixml/namespace.pdf.md
- rest — RESTful: /ai/ixml/namespace.rest.md
- soap — SOAP: /ai/ixml/namespace.soap.md
- std — Standard: /ai/ixml/namespace.std.md
- tags — Tags (ZeyOS): /ai/ixml/namespace.tags.md
- temp — Temporary data store (ZeyOS): /ai/ixml/namespace.temp.md
- xml — XML: /ai/ixml/namespace.xml.md
- zip — ZIP: /ai/ixml/namespace.zip.md

---

# iXML — ctrl (Control constructs)

## Spec
- /__doc/ixmldoc.xml

## if — Conditional value execution

The IF construct is a control flow structure that allows for conditional execution of code dependent on two values.

If the condition is true, the embedded code is executed. Otherwise, a series of embedded ELSEIF and ELSEIS statements is tested one by one. Only the first ELSEIF or ELSEIS statement that is found to be true will be executed. If none of the conditions are true, the embedded ELSE statement will be executed instead.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| value1 | string |  | Value to compare from |
| value2 | string\|regexp |  | Value to compare to |
| func | string | = | Comparison function |

#### Possible values
Possible values for `func`:
- = — Equals
- =* — Equals, case-insensitive
- != — Not equals
- <> — Not equals
- !=* — Not equals, case-insensitive
- <>* — Not equals, case-insensitive
- < — Less than
- <= — Less than or equal to
- > — Greater than
- >= — Greater than or equal to
- _ — Contains
- _* — Contains, case-insensitive
- !_ — Not contains
- !_* — Not contains, case-insensitive
- ^ — Starts with
- ^* — Starts with, case-insensitive
- !^ — Not starts with
- !^* — Not starts with, case-insensitive
- $ — Ends with
- $* — Ends with, case-insensitive
- !$ — Not ends with
- !$* — Not ends with, case-insensitive
- ~ — Matches regular expression
- !~ — Not matches regular expression


### Children
- elseif (occurrence: multiple) — Elsewise conditional value execution
- elseis (occurrence: multiple) — Elsewise conditional type execution
- else (occurrence: single) — Elsewise execution

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<set var="name">iXML</set>

<if value1="$name" func="=" value2="iXML">
	<output>My name is iXML!</output>

	<else>
		<output>My name is not iXML!</output>
	</else>
</if>

<!-- My name is iXML! -->
```

```xml
<set var="name">Steve Jobs</set>

<if value1="$name" func="=" value2="Bill Gates">
	<output>My name is Bill Gates!</output>

	<elseif value1="$name" func="=" value2="Steve Jobs">
		<output>My name is Steve Jobs!</output>
	</elseif>

	<else>
		<output>My name is not Bill Gates nor Steve Jobs!</output>
	</else>
</if>

<!-- My name is Steve Jobs! -->
```

```xml
<set var="name">iXML</set>

<if value1="$name" func="~" value2="/^I/i">
	<output>My name starts with an I!</output>
</if>

<!-- My name starts with an I! -->
```

## is — Conditional type execution

The IS construct is a control flow structure that allows for conditional execution of code dependent on the data type of a variable.

If the condition is true, the embedded code is executed. Otherwise, a series of embedded ELSEIF and ELSEIS statements is tested one by one. Only the first ELSEIF or ELSEIS statement that is found to be true will be executed. If none of the conditions are true, the embedded ELSE statement will be executed instead.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| type | type | valid | Type |

#### Possible values
Possible values for `type`:
- valid — Is valid (defined and not NULL nor FALSE)
- non-valid — Is not valid
- empty — Is empty (non-valid, numeric zero, empty string or empty array)
- non-empty — Is not empty
- defined — Is defined
- undefined — Is undefined
- null — Is NULL
- non-null — Is not NULL
- true — Is TRUE
- non-true — Is not TRUE
- false — Is FALSE
- non-false — Is not FALSE
- bool — Is a boolean
- non-bool — Is not a boolean
- int — Is an integer number
- non-int — Is not an integer number
- float — Is a floating point number
- non-float — Is not a floating point number
- string — Is a string
- non-string — Is not a string
- array — Is an array
- non-array — Is not an array
- function — Is a function
- non-function — Is not a function
- macro — Is a macro
- non-macro — Is not a macro
- class — Is a class
- non-class — Is not a class
- number — Is a number
- non-number — Is not a number
- numeric — Is numeric
- non-numeric — Is non-numeric
- scalar — Is scalar
- non-scalar — Is non-scalar
- subroutine — Is a subroutine
- non-subroutine — Is not a subroutine
- complex — Is a complex type
- non-complex — Is not a complex type
- nan — Is not a number (NaN)
- infinite — Is positive or negative infinite (INF)


### Children
- elseif (occurrence: multiple) — Elsewise conditional value execution
- elseis (occurrence: multiple) — Elsewise conditional type execution
- else (occurrence: single) — Elsewise execution

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<set var="name">iXML</set>

<is var="name" type="string">
	<output>My name is a string!</output>
</is>

<!-- My name is a string! -->
```

## switch — Selective execution

The SWITCH construct is a control flow structure that allows for selective execution of code controlled via a multiway branch. It can be thought of as a series of IF constructs, each with the same value to compare from.

If the value of a SWITCH statement equals the value of an embedded CASE statement, the control flow continues with the execution of that CASE statement. Otherwise, the control flow continues with the execution of the embedded DEFAULT statement.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| value | string |  | Value to compare from |

### Children
- case (occurrence: multiple) — Branch execution
- default (occurrence: single) — Default execution

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<set var="lastname">Gates</set>

<switch value="$lastname">
	<case value="Gates">
		<output>My name might be Bill Gates!</output>
	</case>

	<case value="Jobs">
		<output>My name might be Steve Jobs!</output>
	</case>

	<default>
		<output>My name is not Bill Gates nor Steve Jobs!</output>
	</default>
</switch>

<!-- My name might be Bill Gates! -->
```

```xml
<set var="firstname">Steve</set>
<set var="lastname">Gates</set>

<switch value="$lastname">
	<case value="Gates">
		<if value1="$firstname" func="=" value2="Steve">
			<next/>
		</if>

		<output>My name might be Bill Gates!</output>
	</case>

	<case value="Jobs">
		<output>My name might be Steve Jobs!</output>
	</case>
</switch>

<!-- My name might be Steve Jobs! -->
```

## while — While loop

The WHILE construct is a control flow structure that allows code to be executed repeatedly based on a condition. It can be thought of as a repeating IF construct that is being re-evaluated before each loop iteration.

While the condition is true, the embedded code is executed. Otherwise, the execution continues outside the loop.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| value1 | string |  | Value to compare from |
| value2 | string\|regexp |  | Value to compare to |
| func | string | = | Comparison function |

#### Possible values
Possible values for `func`:
- = — Equals
- =* — Equals, case-insensitive
- != — Not equals
- <> — Not equals
- !=* — Not equals, case-insensitive
- <>* — Not equals, case-insensitive
- < — Less than
- <= — Less than or equal to
- > — Greater than
- >= — Greater than or equal to
- _ — Contains
- _* — Contains, case-insensitive
- !_ — Not contains
- !_* — Not contains, case-insensitive
- ^ — Starts with
- ^* — Starts with, case-insensitive
- !^ — Not starts with
- !^* — Not starts with, case-insensitive
- $ — Ends with
- $* — Ends with, case-insensitive
- !$ — Not ends with
- !$* — Not ends with, case-insensitive
- ~ — Matches regular expression
- !~ — Not matches regular expression


### Children
- else (occurrence: single) — Elsewise execution

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<set var="count">0</set>

<while value1="$count" func="&lt;" value2="10">
	<output>$count</output>
	<math:inc var="count"/>
</while>

<!-- 0123456789 -->
```

```xml
<set var="count">0</set>

<while>
	<output>$count</output>
	<math:inc var="count"/>

	<if value1="$count" func="=" value2="10">
		<break/>
	</if>
</while>

<!-- 0123456789 -->
```

```xml
<set var="count">0</set>

<while value1="$count" func="&lt;" value2="9">
	<math:inc var="count"/>

	<if value1="$count" func="=" value2="5">
		<next/>
	</if>

	<output>$count</output>
</while>

<!-- 12346789 -->
```

## for — For loop

The FOR construct is a control flow structure for arithmetic progression, enumerating values of a given numeric range.

On each loop iteration, the embedded code is executed with the loop counter assigned to 'var'.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name for loop counter |
| from | int |  | From |
| to | int |  | To |
| step | int | 1 | Step |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<for var="count" from="6" to="10" step="2">
	<output>$count&n;</output>
</for>

<!--
6
8
10
-->
```

```xml
<for var="count" from="10" to="6" step="2">
	<output>$count&n;</output>
</for>

<!--
10
8
6
-->
```

## foreach — For each loop

The FOREACH construct is a control flow structure for traversing items in a collection by iterating over an array, populating the associated key and value pairs for each item.

On each loop iteration, the embedded code is executed with the key of the current item assigned to 'var_key' and the value of the current item assigned to 'var_value'.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Source variable name |
| var_key | var |  | Variable name for key |
| var_value | var |  | Variable name for value |

### Children
- else (occurrence: single) — Elsewise execution

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<foreach var="names" var_value="name">
	<output>$name&n;</output>
</foreach>

<!--
Bill Gates
Steve Jobs
-->
```

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<foreach var="names" var_key="key" var_value="name">
	<if value1="$name" func="=" value2="Bill Gates">
		<set var="names[$key]">William Henry Gates III</set>
	</if>
</foreach>

<output>
	<array:join var="names" delimiter=", "/>
</output>

<!-- William Henry Gates III, Steve Jobs -->
```

```xml
<array var="names">
	<array>
		<item key="firstname">Bill</item>
		<item key="lastname">Gates</item>
	</array>
	<array>
		<item key="firstname">Steve</item>
		<item key="lastname">Jobs</item>
	</array>
</array>

<foreach var="names" var_value="name">
	<if value1="$name.lastname" func="=" value2="Gates">
		<set var="name.fullname">William Henry Gates III</set>
	</if>
</foreach>

<output>$names[0].fullname</output>

<!-- William Henry Gates III -->
```

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<foreach var="names" var_value="name">
	<output>$name</output>

	<if value1="$name" func="=" value2="Bill Gates">
		<break/>
	</if>
</foreach>

<!-- Bill Gates -->
```

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<foreach var="names" var_value="name">
	<if value1="$name" func="=" value2="Bill Gates">
		<next/>
	</if>

	<output>$name</output>
</foreach>

<!-- Steve Jobs -->
```

## exit — Exit

EXIT irreversibly halts the execution completely after a final output.

### Attributes
- (none)

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## return — Return

RETURN returns to the original control flow of the invoking control statement, thereby passing back the special local variable 'return'.

### Attributes
- (none)

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<function var="getName">
	<set var="return">iXML</set>
	<return/>
	<set var="return">XML</set>
</function>

<call func="getName" var="name"/>
<output>$name</output>

<!-- iXML -->
```

## break — Break-off

BREAK breaks out of the current control flow and continues with the execution outside the paternal control statement, though leaping over arbitrary levels of nested control statements.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| leap | int |  | Leap |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<set var="count">0</set>

<while>
	<output>$count</output>
	<math:inc var="count"/>

	<if value1="$count" func="=" value2="10">
		<break/>
	</if>
</while>

<!-- 0123456789 -->
```

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<foreach var="names" var_value="name">
	<output>$name</output>

	<if value1="$name" func="=" value2="Bill Gates">
		<break/>
	</if>
</foreach>

<!-- Bill Gates -->
```

## next — Next

NEXT skips the rest of the current branch or loop iteration and continues with the execution of the next consecutive branch or loop iteration, though leaping over arbitrary levels of nested control statements.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| leap | int |  | Leap |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<set var="firstname">Steve</set>
<set var="lastname">Gates</set>

<switch value="$lastname">
	<case value="Gates">
		<if value1="$firstname" func="=" value2="Steve">
			<next/>
		</if>

		<output>My name might be Bill Gates!</output>
	</case>

	<case value="Jobs">
		<output>My name might be Steve Jobs!</output>
	</case>
</switch>

<!-- My name might be Steve Jobs! -->
```

```xml
<set var="count">0</set>

<while value1="$count" func="&lt;" value2="9">
	<math:inc var="count"/>

	<if value1="$count" func="=" value2="5">
		<next/>
	</if>

	<output>$count</output>
</while>

<!-- 12346789 -->
```

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<foreach var="names" var_value="name">
	<if value1="$name" func="=" value2="Bill Gates">
		<next/>
	</if>

	<output>$name</output>
</foreach>

<!-- Steve Jobs -->
```

## include — Include code source

INCLUDE parses and executes an external code source, specified by filename/URL. Arguments may be passed to local variables as parameters on switch of context.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| var_params | var |  | Variable name for associated parameter name and value pairs |
| once | bool |  | Include just once |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

## param — Parameter

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| name | string | (same as last member of 'var' or next consecutive numeric index) | Name |
| var | var |  | Variable name |

### Children
- (none)

### Parents
- include
- call
- new
- zymba:run

### Result
- (none documented)

### Examples

```xml
<function var="outputName">
	<output>$name</output>
</function>

<call func="outputName">
	<param name="name">iXML</param>
</call>

<!-- iXML -->
```

## function — Function definition

The FUNCTION construct defines a closed subroutine as a code sequence that can be invoked with subsequent CALL statements.

The USE construct declares a free function variable for use as a local variable within the closure function that is explicitly bound to a corresponding variable from the immediate context within which the function is defined, thereby directly referencing the non-local variable from the parent scope outside of the inherent context of the function. The parent scope of the closure is the one in which the function is defined, not necessarily the one that the function was called from.

In the context of object-oriented design, a function that corresponds to an array item is to be termed a method while the referenced array is to be termed an object.

A function can be coded so that it may call itself recursively. This technique allows direct implementation of functions defined by mathematical induction and recursive divide and conquer algorithms.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |

### Children
- use (occurrence: multiple) — Use

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: function; predicate: no-result-propagation

### Examples

```xml
<global var="name"/>

<function var="outputName">
	<output>$name</output>
</function>

<set var="name">iXML</set>
<call func="outputName"/>

<!-- iXML -->
```

```xml
<function var="outputName">
	<output>$name</output>
</function>

<call func="outputName">
	<param name="name">iXML</param>
</call>

<!-- iXML -->
```

```xml
<set var="obj.name">iXML</set>

<function var="obj.outputName">
	<output>$this.name</output>
</function>

<call func="obj.outputName"/>

<!-- iXML -->
```

```xml
<function var="getName">
	<set var="return">iXML</set>
	<return/>
	<set var="return">XML</set>
</function>

<call func="getName" var="name"/>
<output>$name</output>

<!-- iXML -->
```

```xml
<function var="outputName">
	<output>$name&n;</output>
</function>

<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<foreach var="names" var_value="name">
	<call func="outputName">
		<param name="name">$name</param>
	</call>
</foreach>

<!--
Bill Gates
Steve Jobs
-->
```

```xml
<set var="count">1</set>

<function var="output">
	<use var="count"/>

	<output>$count&n;</output>
	<math:inc var="count"/>
</function>

<for from="1" to="5">
	<call func="output"/>
</for>

<!--
1
2
3
4
5
-->
```

## call — Call function

CALL breaks out of the current control flow and continues with the execution of a function. It then returns to its original control flow. Arguments may be passed to local variables as parameters on switch of context.

A function can be coded so that it may call itself recursively. This technique allows direct implementation of functions defined by mathematical induction and recursive divide and conquer algorithms.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| func | var |  | Function variable name |
| var | var |  | Result variable name |
| var_params | var |  | Variable name for associated parameter name and value pairs |
| var_this | var |  | Variable name for explicit rebinding of 'this' |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<global var="name"/>

<function var="outputName">
	<output>$name</output>
</function>

<set var="name">iXML</set>
<call func="outputName"/>

<!-- iXML -->
```

```xml
<function var="outputName">
	<output>$name</output>
</function>

<call func="outputName">
	<param name="name">iXML</param>
</call>

<!-- iXML -->
```

```xml
<set var="obj.name">iXML</set>

<function var="obj.outputName">
	<output>$this.name</output>
</function>

<call func="obj.outputName"/>

<!-- iXML -->
```

```xml
<function var="getName">
	<set var="return">iXML</set>
	<return/>
	<set var="return">XML</set>
</function>

<call func="getName" var="name"/>
<output>$name</output>

<!-- iXML -->
```

```xml
<function var="outputName">
	<output>$name&n;</output>
</function>

<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<foreach var="names" var_value="name">
	<call func="outputName">
		<param name="name">$name</param>
	</call>
</foreach>

<!--
Bill Gates
Steve Jobs
-->
```

```xml
<set var="count">1</set>

<function var="output">
	<use var="count"/>

	<output>$count&n;</output>
	<math:inc var="count"/>
</function>

<for from="1" to="5">
	<call func="output"/>
</for>

<!--
1
2
3
4
5
-->
```

```xml
<soap:client wsdl="http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL">
	<soap:bind var="getCountryName">CountryName</soap:bind>
</soap:client>

<array var="parameters">
	<item key="sCountryISOCode">DE</item>
</array>

<call func="getCountryName" var="result">
	<param var="parameters"/>
</call>

<output>$result.CountryNameResult</output>

<!-- Germany -->
```

```xml
<rest:client url="https://api.predic8.de/shop/v2">
	<rest:header>
		Content-Type: application/json
	</rest:header>

	<rest:bind var="createProduct" method="POST">/products/</rest:bind>
	<rest:bind var="updateProduct" method="PATCH">/products/:id</rest:bind>
	<rest:bind var="getProduct" method="GET">/products/:id</rest:bind>
</rest:client>

<call func="createProduct" var="data">
	<param>{"name": "Some Fruit", "price": 4.99}</param>
</call>

<call func="updateProduct">
	<param var="data.id"/>
	<param>{"name": "Wildberries"}</param>
</call>

<call func="getProduct" var="data">
	<param var="data.id"/>
</call>

<output>$data.name</output>

<!-- Wildberries -->
```

## macro — Macro definition

The MACRO construct defines an open subroutine as a code sequence that can be expanded with subsequent EXPAND statements.

Macro expansion allows for code reuse with minimal computational overhead compared to function invocation.

A macro can be coded so that it may expand itself recursively. This technique allows direct implementation of functions defined by mathematical induction and recursive divide and conquer algorithms.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: macro; predicate: no-result-propagation

### Examples

```xml
<macro var="outputName">
	<output>$name</output>
</macro>

<set var="name">iXML</set>
<expand macro="outputName"/>

<!-- iXML -->
```

```xml
<macro var="outputName">
	<output>$name&n;</output>
</macro>

<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<foreach var="names" var_value="name">
	<expand macro="outputName"/>
</foreach>

<!--
Bill Gates
Steve Jobs
-->
```

## expand — Expand macro

EXPAND breaks out of the current control flow and continues with the execution of a macro. It then returns to its original control flow.

Macro expansion allows for code reuse with minimal computational overhead compared to function invocation.

A macro can be coded so that it may expand itself recursively. This technique allows direct implementation of functions defined by mathematical induction and recursive divide and conquer algorithms.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| macro | var |  | Macro variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<macro var="outputName">
	<output>$name</output>
</macro>

<set var="name">iXML</set>
<expand macro="outputName"/>

<!-- iXML -->
```

```xml
<macro var="outputName">
	<output>$name&n;</output>
</macro>

<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<foreach var="names" var_value="name">
	<expand macro="outputName"/>
</foreach>

<!--
Bill Gates
Steve Jobs
-->
```

## class — Class definition

The CLASS construct defines a class that can be instantiated with subsequent NEW statements. It serves as an array prototype for object-oriented design.

A class is used as a blueprint to create instances of itself. It defines constituent properties and methods which enable these class instances to have state and behavior. Upon instantiation the properties and methods of a class become the associated key and value pairs of a newly created array, which in the context of object-oriented design is to be termed an object.

Classes can be derived from multiple existing classes, thereby establishing a hierarchial relationship in which a parent class can be considered as a common part of its subclasses. Extending a class will have the subclass inherit all the properties and methods from the parent class.

The EXTENDS construct incorporates the properties, constructors and methods of a parent class, thereby overloading existing constituents.

The PROPERTY construct defines a property of the class, which upon instantiation will become a regular array item with its name as the key.

The CONSTRUCTOR construct defines a special type of subroutine as a code sequence that cannot be invoked directly but will automatically be called on each newly created object in order to establish the invariant of the class and put the object in some desired state upon instantiation. Upon instantiation parent constructors are automatically called along the lines of inheritance.

The METHOD construct defines a closed subroutine as a code sequence analog to the FUNCTION construct but with explicit reference to the corresponding class. Upon instantiation a class method becomes a regular array item with its name as the key and the underlying function as the value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |

### Children
- extends (occurrence: multiple) — Extends
- property (occurrence: multiple) — Property
- constructor (occurrence: single) — Constructor
- method (occurrence: multiple) — Method

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: class; predicate: no-result-propagation

### Examples

```xml
<class var="Human">
	<property name="gender">male</property>
</class>

<class var="Person">
	<extends class="Human"/>

	<property name="firstname"/>
	<property name="lastname"/>

	<constructor>
		<set var="this.firstname">$firstname</set>
		<set var="this.lastname">$lastname</set>
	</constructor>

	<method name="getName">
		<set var="return">$this.firstname $this.lastname</set>
	</method>
</class>

<new class="Person" var="obj">
	<param name="firstname">Bill</param>
	<param name="lastname">Gates</param>
</new>

<call func="obj.getName" var="name"/>
<output>$name is $obj.gender!</output>

<!-- Bill Gates is male! -->
```

## new — New instance

NEW creates a new object by instantiating a class and automatically calling all constructors along the lines of inheritance. Arguments may be passed to local variables as parameters on switch of context.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| class | var |  | Class variable name |
| var | var |  | Object variable name |
| var_params | var |  | Variable name for associated parameter name and value pairs |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<class var="Human">
	<property name="gender">male</property>
</class>

<class var="Person">
	<extends class="Human"/>

	<property name="firstname"/>
	<property name="lastname"/>

	<constructor>
		<set var="this.firstname">$firstname</set>
		<set var="this.lastname">$lastname</set>
	</constructor>

	<method name="getName">
		<set var="return">$this.firstname $this.lastname</set>
	</method>
</class>

<new class="Person" var="obj">
	<param name="firstname">Bill</param>
	<param name="lastname">Gates</param>
</new>

<call func="obj.getName" var="name"/>
<output>$name is $obj.gender!</output>

<!-- Bill Gates is male! -->
```

## try — Error handling

The TRY construct is a control flow structure that handles the occurrence of errors, warnings, exceptions and other special conditions that change the normal control flow.

An error can be thrown and caught. Code may be surrounded by a TRY statement, to facilitate the catching of potential errors. If an error is thrown or otherwise triggered within a TRY statement, the control flow continues with the execution of the embedded CATCH statement with the error message assigned to 'var'. In case no error occurs, the control flow continues with the execution of the embedded ELSE statement instead. Eventually the control flow always continues with the execution of the embedded FINALLY statement wheter an error occurred or not.

### Attributes
- (none)

### Children
- catch (occurrence: single) — Error triggered execution
- else (occurrence: single) — Elsewise execution
- finally (occurrence: single) — Final execution

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<try>
	<set var="name">iXML</set>

	<if value1="$name" func="=" value2="iXML">
		<error>An error has occurred!</error>
	</if>

	<catch var="error">
		<output>$error</output>
	</catch>
</try>

<!-- An error has occurred! -->
```

```xml
<try>
	<set var="name">iXML</set>

	<catch>
		<set var="output">My name is unknown!</set>
	</catch>

	<else>
		<set var="output">My name is $name!</set>
	</else>

	<finally>
		<output>$output</output>
	</finally>
</try>

<!-- My name is iXML! -->
```

## error — Throw error

ERROR breaks out of the current control flow by throwing an error with an error message.

An error can be thrown and caught. Code may be surrounded by a TRY statement, to facilitate the catching of potential errors.

### Attributes
- (none)

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<try>
	<set var="name">iXML</set>

	<if value1="$name" func="=" value2="iXML">
		<error>An error has occurred!</error>
	</if>

	<catch var="error">
		<output>$error</output>
	</catch>
</try>

<!-- An error has occurred! -->
```

## warning — Throw warning (ZeyOS)

WARNING breaks out of the current control flow by throwing a warning with a warning message.

A warning can be thrown and caught. Code may be surrounded by a TRY statement, to facilitate the catching of potential warnings.

### Attributes
- (none)

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<warning>This is a warning!</warning>
```

---

# iXML — std (Standard)

## Spec
- /__doc/ixmldoc.xml

## global — Global variable

Global declares a variable as global.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a; predicate: no-result-propagation

### Examples

```xml
<global var="name"/>

<function var="outputName">
	<output>$name</output>
</function>

<set var="name">iXML</set>
<call func="outputName"/>

<!-- iXML -->
```

```xml
<global var="name"/>

<function var="setName">
	<set var="name">iXML</set>
</function>

<call func="setName"/>
<output>$name</output>

<!-- iXML -->
```

## typeof — Type of variable

TYPEOF returns the intrinsic data type of a variable.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: string

### Examples

```xml
<set var="name">iXML</set>
<typeof var="name" var_result="type"/>

<if value1="$type" func="=" value2="string">
	<output>My name is a string!</output>
</if>

<!-- My name is a string! -->
```

## instanceof — Instance of class

INSTANCEOF checks whether a variable is an object of a given class.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| class | var |  | Class variable name |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: bool

### Examples

```xml
<class var="Human"/>

<class var="Person">
	<extends class="Human"/>

	<property name="name"/>

	<constructor>
		<set var="this.name">$name</set>
	</constructor>
</class>

<new class="Person" var="obj">
	<param name="name">Bill Gates</param>
</new>

<instanceof class="Human" var="obj" var_result="instanceof"/>

<is var="instanceof" type="true">
	<output>$obj.name is a human!</output>
</is>

<!-- Bill Gates is a human! -->
```

```xml
<class var="Person">
	<property name="name"/>

	<constructor>
		<set var="this.name">$name</set>
	</constructor>
</class>

<new class="Person" var="obj1">
	<param name="name">Bill Gates</param>
</new>

<new class="Person" var="obj2">
	<param name="name">Steve Jobs</param>
</new>

<instanceof class="obj1" var="obj2" var_result="instanceof"/>

<is var="instanceof" type="true">
	<output>$obj1.name is of the same class as $obj2.name!</output>
</is>

<!-- Bill Gates is of the same class as Steve Jobs! -->
```

## classinfo — Class information

CLASSINFO returns various components of a class.

CLASSINFO returns an array comprised of the following items:

				Key          Description
				------------------------------------------------
				class        class
				extends      array of extended classes
				parents      array of all derived parent classes
				constructors array of constructor functions
				prototype    array prototype

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| class | var |  | Class variable name |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<class var="Human"/>

<class var="Person">
	<extends class="Human"/>

	<property name="name"/>

	<constructor>
		<set var="this.name">$name</set>
	</constructor>
</class>

<classinfo class="Person" var="info"/>

<foreach var="info.parents" var_value="class">
	<equals var1="class" var2="Human" var_result="equals"/>

	<is var="equals" type="true">
		<output>A person is human!</output>
		<break/>
	</is>
</foreach>

<!-- A person is human! -->
```

```xml
<class var="Person">
	<property name="name"/>

	<constructor>
		<set var="this.name">$name</set>
	</constructor>
</class>

<new class="Person" var="obj">
	<param name="name">Bill Gates</param>
</new>

<classinfo class="obj" var="info"/>

<equals var1="info.class" var2="Person" var_result="equals"/>

<is var="equals" type="true">
	<output>$obj.name is a person!</output>
</is>

<!-- Bill Gates is a person! -->
```

## equals — Equals strictly

EQUALS checks whether the values of two variables are strictly equal without type coercion.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var1 | var |  | Variable name 1 |
| var2 | var |  | Variable name 2 |
| var_result | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: bool

### Examples

```xml
<set var="name1">Bill Gates</set>
<set var="name2">Steve Jobs</set>

<equals var1="name1" var2="name2" var_result="equals"/>

<is var="equals" type="false">
	<output>$name1 and $name2 are not strictly equal!</output>
</is>

<!-- Bill Gates and Steve Jobs are not strictly equal! -->
```

```xml
<set var="numeric">123</set>

<set var="number">123</set>
<cast var="number" type="int"/>

<equals var1="numeric" var2="number" var_result="equals"/>

<is var="equals" type="false">
	<output>"$numeric" and $number are not strictly equal!</output>
</is>

<!-- "123" and 123 are not strictly equal! -->
```

## set — Set variable

SET sets the value of a variable.

These three statements are semantically equivalent:

					<set var="var[key]">value</set>
					<set var="var.key">value</set>
					<set var="var" key="key">value</set>

					These two statements are semantically equivalent:

					<set var="var[]">value</set>
					<array:push var="var">value</array:push>

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| key | string | (no key) | Key |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<set var="firstname">Bill</set>
<set var="lastname">Gates</set>
<output>$firstname $lastname</output>
<!-- Bill Gates -->
```

```xml
<set var="names[bg]">Bill Gates</set>
<set var="names.sj">Steve Jobs</set>
<output>$names.bg and $names[sj] are competitors!</output>
<!-- Bill Gates and Steve Jobs are competitors! -->
```

```xml
<set var="names" key="bg">Bill Gates</set>
<set var="names" key="sj">Steve Jobs</set>
<output>$names.bg and $names[sj] are competitors!</output>
<!-- Bill Gates and Steve Jobs are competitors! -->
```

## unset — Unset variable

UNSET unsets a variable.

These three statements are semantically equivalent:

					<unset var="var[key]"/>
					<unset var="var.key"/>
					<unset var="var" key="key"/>

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| key | string | (no key) | Key |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<unset var="var"/>
```

```xml
<unset var="var[key]"/>
```

```xml
<unset var="var" key="key"/>
```

## null — Set variable to NULL

NULL sets the value of a variable to NULL.

These three statements are semantically equivalent:

					<null var="var[key]"/>
					<null var="var.key"/>
					<null var="var" key="key"/>

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| key | string | (no key) | Key |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: null

### Examples

```xml
<null var="var"/>
```

```xml
<null var="var[key]"/>
```

```xml
<null var="var" key="key"/>
```

## true — Set variable to TRUE

TRUE sets the value of a variable to TRUE.

These three statements are semantically equivalent:

					<true var="var[key]"/>
					<true var="var.key"/>
					<true var="var" key="key"/>

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| key | string | (no key) | Key |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: bool

### Examples

```xml
<true var="var"/>
```

```xml
<true var="var[key]"/>
```

```xml
<true var="var" key="key"/>
```

## false — Set variable to FALSE

FALSE sets the value of a variable to FALSE.

These three statements are semantically equivalent:

					<false var="var[key]"/>
					<false var="var.key"/>
					<false var="var" key="key"/>

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| key | string | (no key) | Key |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: bool

### Examples

```xml
<false var="var"/>
```

```xml
<false var="var[key]"/>
```

```xml
<false var="var" key="key"/>
```

## assign — Assign variable

ASSIGN assignes the value of a source variable to a target variable.

These three statements are semantically equivalent:

					<assign var="var[key]" var_source="var_source"/>
					<assign var="var.key" var_source="var_source"/>
					<assign var="var" key="key" var_source="var_source"/>

					These three statements are semantically equivalent:

					<assign var="var" var_source="var_source[key]"/>
					<assign var="var" var_source="var_source.key"/>
					<assign var="var" var_source="var_source" key_source="key"/>

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Target variable name |
| var_source | var |  | Source variable name |
| key | string | (no key) | Target key |
| key_source | string | (no key) | Source key |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a; predicate: no-result-propagation

### Examples

```xml
<set var="name1">iXML</set>
<assign var="name2" var_source="name1"/>
<output>$name2</output>
<!-- iXML -->
```

## clone — Clone variable

CLONE creates a shallow copy of the value of a variable independent of it's data type.

If the result variable 'var_result' is omitted, the resulting value will be stored in 'var' instead.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (same as 'var') | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="original">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<clone var="original" var_result="new"/>
<set var="new[1]">Larry Ellison</set>

<output>$original[1] and $new[1] are friends!</output>

<!-- Steve Jobs and Larry Ellison are friends! -->
```

## swap — Swap variables

SWAP swappes the values of two variables.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var1 | var |  | Variable name 1 |
| var2 | var |  | Variable name 2 |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var1; type: n/a; predicate: no-result-propagation
- binding: var2; type: n/a; predicate: no-result-propagation

### Examples

```xml
<set var="name1">XML</set>
<set var="name2">iXML</set>
<swap var1="name1" var2="name2"/>
<output>My name is "$name1" &amp; I am a $name2 derivative!</output>
<!-- My name is "iXML" & I am a XML derivative! -->
```

## cast — Cast variable

CAST casts a variable to a given data type.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| type | type | string | Data type |

#### Possible values
Possible values for `type`:
- bool — Boolean
- int — Integer number
- float — Floating point number
- string — String


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: bool|int|float|string

### Examples

```xml
<set var="number">123</set>
<cast var="number" type="int"/>

<is var="number" type="int">
	<output>$number is now an integer number!</output>
</is>

<!-- 123 is now an integer number! -->
```

## eval — Evaluate expression

EVAL evaluates an expression of a given data type.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| type | type | string | Data type |

#### Possible values
Possible values for `type`:
- bool — Boolean
- int — Integer number
- float — Floating point number
- string — String


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: bool|int|float|string

### Examples

```xml
<set var="dollar">$</set>
<set var="name">iXML</set>

<output>
	<eval>My name is $dollar$name!</eval>
</output>

<!-- My name is iXML! -->
```

## verbatim — Verbatim content

VERBATIM returns verbatim content without variable substitution or inherint expression evaluation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<verbatim>Show me the $dollars!</verbatim>
</output>

<!-- Show me the $dollars! -->
```

## serialize — Serialize variable

SERIALIZE generates a storable representation of the value of a variable.

SERIALIZE is the complement of the UNSERIALIZE operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: string

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
</array>

<output>
	<serialize var="names"/>
</output>

<!-- a:2:{s:2:"bg";s:10:"Bill Gates";s:2:"sj";s:10:"Steve Jobs";} -->
```

## unserialize — Unserialize variable

UNSERIALIZE generates a value from a stored representation.

UNSERIALIZE is the complement of the SERIALIZE operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<unserialize var="names">a:2:{s:2:"bg";s:10:"Bill Gates";s:2:"sj";s:10:"Steve Jobs";}</unserialize>
<output>$names.bg</output>
<!-- Bill Gates -->
```

## length — String length

LENGTH returns the string length of a value in characters.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<set var="name">iXML</set>
<length var="len">$name</length>

<if value1="$len" func="&gt;" value2="0">
	<output>My name contains more than zero characters!</output>
</if>

<!-- My name contains more than zero characters! -->
```

## size — Binary size

SIZE returns the binary size of a value in bytes.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<set var="name"/>
<size var="size">$name</size>

<if value1="$size" func="=" value2="0">
	<output>My name is empty!</output>
</if>

<!-- My name is empty! -->
```

## char — Character of UTF-8 code

CHAR returns the specific character of an UTF-8 code.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<output>
	<char>65</char>
</output>

<!-- A -->
```

## ord — Ordinal number of character

ORD returns the ordinal number of a character as an UTF-8 code.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<output>
	<ord>A</ord>
</output>

<!-- 65 -->
```

## concat — Concatenate

CONCAT concatenates a value to a variable.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<set var="name">i</set>
<concat var="name">XML</concat>
<output>$name</output>
<!-- iXML -->
```

## tolower — To lower case

TOLOWER returns the lower case representation of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<tolower>iXML</tolower>
</output>

<!-- ixml -->
```

## toupper — To upper case

TOUPPER returns the upper case representation of a value by capitalizing the first character, all words or all characters.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| type | type | chars | Capitilization type |

#### Possible values
Possible values for `type`:
- chars — All characters
- words — All words
- first — First character


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<toupper type="first">bill gates</toupper>
</output>

<!-- Bill gates -->
```

```xml
<output>
	<toupper type="words">bill gates</toupper>
</output>

<!-- Bill Gates -->
```

```xml
<output>
	<toupper>iXML</toupper>
</output>

<!-- IXML -->
```

## trim — Strip whitespaces

TRIM strips whitespace characters from the beginning and/or end of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| type | type | both | Direction type |

#### Possible values
Possible values for `type`:
- both — Both
- left — From left
- right — From right


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<trim>     iXML     </trim>
</output>

<!-- iXML -->
```

## pos — Position of first/last occurrence

POS finds the position of first or last occurrence of a value within a subject and returns the index of the corresponding byte or character if applicable.

If the offset is negative it will start that many bytes or characters from the end of the subject.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| value | string |  | Value |
| offset | int |  | Search offset |
| type | type | chars-first | Measurement type |

#### Possible values
Possible values for `type`:
- chars-first — First occurrence by characters
- chars-last — Last occurrence by characters
- bytes-first — First occurrence by bytes
- bytes-last — Last occurrence by bytes


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<output>
	<pos value="X">iXML</pos>
</output>

<!-- 1 -->
```

## substr — Substring

SUBSTR returns part of a value, isolated by an offset and a length.

If the offset is negative it will start that many bytes or characters from the end of the value. If the length is omitted, every byte or character from the offset until the end of the value will be returned. If the length is negative then it will stop that many bytes or characters from the end of the value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| offset | int |  | Offset |
| length | int | (end of value) | Length |
| type | type | chars | Measurement type |

#### Possible values
Possible values for `type`:
- chars — By characters
- bytes — By bytes


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<substr offset="6" length="2">Name: iXML</substr>
</output>

<!-- iX -->
```

## pad — Pad

PAD pads a value to a given length.

If the length is positive then the value is padded on the right, if it is negative then on the left. If the padding value is empty or the absolute length is less than or equal to the actual length of the value then no padding takes place.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| length | int |  | Length |
| padding | string | (space) | Padding value |
| type | type | chars | Measurement type |

#### Possible values
Possible values for `type`:
- chars — By characters
- bytes — By bytes


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<pad length="-10" padding="0">123</pad>
</output>

<!-- 0000000123 -->
```

## match — Regular expression match

MATCH performs a global regular expression match on a subject against a given pattern and assignes the number of full matches to 'var', while the actual matches are assigned to 'var_matches'.

Results are ordered so that matches[0] is an array of first set of matches, matches[1] is an array of second set of matches, and so on.

If the offset is negative it will start that many characters from the end of the subject.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for number of matches |
| var_matches | var |  | Result variable name for actual matches |
| pattern | regexp |  | Pattern |
| offset | int |  | Search offset |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int
- binding: var_matches; type: array; predicate: no-result-propagation

### Examples

```xml
<match var="count" var_matches="matches" pattern="/ixml/i">My name is iXML!</match>

<if value1="$count" func="&gt;" value2="0">
	<output>$matches[0][0]</output>
</if>

<!-- iXML -->
```

## replace — Search and replace

REPLACE searches a subject for occurrences of a given search value or matches to a given search pattern and replaces them with a given replacement value. The number of actual replacements is assigned to 'var_count'.

The replacement value of a regular expression may contain backreferences of the form '\n'. Every such reference will be replaced by the text captured by the n'th parenthesized pattern. '\0' always refers to the text matched by the entire search pattern.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| var_count | var |  | Result variable name for number of replacements |
| replacement | string |  | Replacement value |
| limit | int | (no limit) | Limit |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<replace value="Bill Gates" replacement="William Henry Gates III">My name is Bill Gates!</replace>
</output>

<!-- My name is William Henry Gates III! -->
```

```xml
<output>
	<replace pattern="/B[il]+\s*G\w+/" replacement="William Henry Gates III">My name is Bill Gates!</replace>
</output>

<!-- My name is William Henry Gates III! -->
```

```xml
<output>
	<replace pattern="/Bill ([a-z]+)/i" replacement="William Henry \1 III, call me \0">My name is Bill Gates!</replace>
</output>

<!-- My name is William Henry Gates III, call me Bill Gates! -->
```

## split — Split

SPLIT splits a subject along boundaries formed by a given delimiter or matched by a given pattern.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| limit | int | (no limit) | Limit |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<split var="names" delimiter=", ">Bill Gates, Steve Jobs</split>
<output>$names[0]</output>
<!-- Bill Gates -->
```

```xml
<split var="names" pattern="/,\s?/">Bill Gates, Steve Jobs</split>
<output>$names[1]</output>
<!-- Steve Jobs -->
```

## convert — Convert character encoding

CONVERT converts the character encoding of a value from a source character set to a target character set.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| from | type | UTF-8 | Source character set |
| to | type | UTF-8 | Target character set |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

## output — Output

OUTPUT outputs a value.

### Attributes
- (none)

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<output>Hello World!</output>
<!-- Hello World! -->
```

## header — Set HTTP header

HEADER sets a single HTTP response header field and optionally resets the HTTP response status code.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| status | int |  | HTTP status code |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<header>Content-Type: text/plain</header>
```

## sleep — Sleep

SLEEP execution for a specific duration in number of seconds.

The duration may include nano seconds in the fractional part.

### Attributes
- (none)

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<sleep>0.1</sleep>
```

---

# iXML — math (Mathematics)

## Spec
- /__doc/ixmldoc.xml

## math:abs — Absolute number

MATH:ABS returns the absolute number of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:abs>-13.74</math:abs>
</output>

<!-- 13.74 -->
```

## math:sign — Extract sign

MATH:SIGN extracts the sign of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<output>
	<math:sign>-13.74</math:sign>
</output>

<!-- -1 -->
```

## math:inc — Increment variable

MATH:INC increments the value of a variable.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<set var="number">1</set>
<math:inc var="number"/>
<output>$number</output>
<!-- 2 -->
```

## math:dec — Decrement variable

MATH:DEC decrements the value of a variable.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<set var="number">2</set>
<math:dec var="number"/>
<output>$number</output>
<!-- 1 -->
```

## math:mod — Floating point modulo

MATH:MOD calculates the floating point remainder of the division of two values (x/y).

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| x | float |  | Numerator |
| y | float |  | Denominator |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:mod x="5.72" y="1.38"/>
</output>

<!-- 0.2 -->
```

## math:exp — Exponent of Euler's constant

MATH:EXP raises Euler's constant (e) to a given power.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:exp>10</math:exp>
</output>

<!-- 22026.465794807 -->
```

## math:ln — Natural logarithm

MATH:LN calculates the natural logarithm of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:ln>22026.465794807</math:ln>
</output>

<!-- 10 -->
```

## math:log — Logarithm

MATH:LOG calculates the logarithm of a value using a given logarithmic base.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| base | int | 10 | Logarithmic base |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:log base="2">1024</math:log>
</output>

<!-- 10 -->
```

## math:pow — Raise to power

MATH:POW raises a value to the power of an exponent.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| exponent | int | 2 | Exponent |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:pow exponent="10">2</math:pow>
</output>

<!-- 1024 -->
```

## math:sqrt — Square root

MATH:SQRT calculates the square root of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:sqrt>25</math:sqrt>
</output>

<!-- 5 -->
```

## math:hypot — Hypotenuse

MATH:HYPOT calculates the length of the hypotenuse of a right-angle triangle.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| x | float |  | Abscissa |
| y | float |  | Ordinate |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:hypot x="3" y="5"/>
</output>

<!-- 5.8309518948453 -->
```

## math:pi — PI

MATH:PI returns the circle constant (π).

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:pi/>
</output>

<!-- 3.1415926535898 -->
```

## math:sin — Sine

MATH:SIN calculates the sine of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:sin>1</math:sin>
</output>

<!-- 0.8414709848079 -->
```

## math:sinh — Hyperbolic sine

MATH:SINH calculates the hyperbolic sine of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:sinh>1</math:sinh>
</output>

<!-- 1.1752011936438 -->
```

## math:asin — Arc sine

MATH:ASIN calculates the inverse sine of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:asin>1</math:asin>
</output>

<!-- 1.5707963267949 -->
```

## math:asinh — Arc hyperbolic sine

MATH:ASINH calculates the inverse hyperbolic sine of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:asinh>1</math:asinh>
</output>

<!-- 0.88137358701954 -->
```

## math:cos — Cosine

MATH:COS calculates the cosine of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:cos>1</math:cos>
</output>

<!-- 0.54030230586814 -->
```

## math:cosh — Hyperbolic cosine

MATH:COSH calculates the hyperbolic cosine of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:cosh>1</math:cosh>
</output>

<!-- 1.5430806348152 -->
```

## math:acos — Arc cosine

MATH:ACOS calculates the inverse cosine of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:acos>1</math:acos>
</output>

<!-- 0 -->
```

## math:acosh — Arc hyperbolic cosine

MATH:ACOSH calculates the inverse hyperbolic cosine of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:acosh>1</math:acosh>
</output>

<!-- 0 -->
```

## math:tan — Tangent

MATH:TAN calculates the tangent of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:tan>1</math:tan>
</output>

<!-- 1.5574077246549 -->
```

## math:tanh — Hyperbolic tangent

MATH:TANH calculates the hyperbolic tangent of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:tanh>1</math:tanh>
</output>

<!-- 0.76159415595576 -->
```

## math:atan — Arc tangent

MATH:ATAN calculates the inverse tangent of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:atan>1</math:atan>
</output>

<!-- 0.78539816339745 -->
```

## math:atanh — Arc hyperbolic tangent

MATH:ATANH calculates the inverse hyperbolic tangent of a value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:atanh>0</math:atanh>
</output>

<!-- 0 -->
```

## math:atan2 — Arc tangent of y/x

MATH:ATAN2 calculates the inverse tangent of the division of two values (y/x) using the sign of both values to determine the quadrant.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| x | float |  | Abscissa |
| y | float |  | Ordinate |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:atan2 x="3" y="5"/>
</output>

<!-- 1.0303768265243 -->
```

## math:round — Round

MATH:ROUND rounds a value to a number of decimal digits, specified by a given precision.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| precision | int |  | Precision |
| type | type | half-infinity | Rounding type |

#### Possible values
Possible values for `type`:
- half-infinity — Symmetrically to nearest, ties towards infinity.
- half-zero — Symmetrically to nearest, ties towards zero.
- half-up — Upwards to nearest, ties towards positive infinity
- half-down — Downwards to nearest, ties towards negative infinity
- half-even — Symmetrically to nearest, ties to even
- half-odd — Symmetrically to nearest, ties to odd.
- infinity — Symmetrically towards infinity
- zero — Symmetrically towards zero
- up — Upwards to positive infinity
- down — Downwards to negative infinity


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:round precision="2">17.213482971852</math:round>
</output>

<!-- 17.21 -->
```

## math:ceil — Round fractions up

MATH:CEIL rounds a value up to the next highest integer number.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:ceil>17.213482971852</math:ceil>
</output>

<!-- 18 -->
```

## math:floor — Round fractions down

MATH:FLOOR rounds a value down to the next lowest integer number.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:floor>17.213482971852</math:floor>
</output>

<!-- 17 -->
```

## math:rand — Random number

MATH:RAND generates a random number between a given numeric range.

If the maximum number is omitted, it will range up to the largest possible integer number.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| min | int |  | Minimum number |
| max | int | (largest possible integer number) | Maximum number |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: float

### Examples

```xml
<output>
	<math:rand/>
</output>
```

## math:convert — Convert number

MATH:CONVERT converts the number representation of a value from a source representation to a target representation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| from | type | dec | Source representation |
| to | type | dec | Target representation |

#### Possible values
Possible values for `from`:
- bin — Binary
- oct — Octal
- dec — Decimal
- hex — Hexadecimal
- deg — Degrees (decimal)
- rad — Radian (decimal)

Possible values for `to`:
- bin — Binary
- oct — Octal
- dec — Decimal
- hex — Hexadecimal
- deg — Degrees (decimal)
- rad — Radian (decimal)


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int|float|string

### Examples

```xml
<output>
	<math:convert from="hex" to="bin">7cd5a72c</math:convert>
</output>

<!-- 1111100110101011010011100101100 -->
```

## math:format — Format number

MATH:FORMAT returns the formatted representation of a value with a fixed number of decimal digits and grouped thousands.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| countdec | int |  | Number of decimal digits |
| decpoint | string | . | Decimal point |
| separator | string | , | Thousands separator |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<math:format countdec="2">1792702.213482971852</math:format>
</output>

<!-- 1,792,702.21 -->
```

---

# iXML — date (Date and time)

## Spec
- /__doc/ixmldoc.xml

## date:now — Current timestamp

DATE:NOW returns the timestamp for the current date and time. The timestamp may optionally include micro seconds in the fractional part.

Timestamps are based on Unix time, defined as the number of seconds elapsed since midnight proleptic Coordinated Universal Time (UTC) of January 1, 1970, not counting leap seconds.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| micro | bool |  | Include micro seconds |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int|float

### Examples

```xml
<output>
	<date:now/>
</output>
```

## date:info — Date information

DATE:INFO returns the various components of a date and time.

DATE:INFO returns an array comprised of the following items:

				Key    Description
				---------------------------------------------
				day    Day (1..31)
				month  Month (1..12)
				year   Year, 4 digits
				hour   Hour (0..59)
				minute Minute (0..59)
				second Second (0..59)
				wday   Day of week, Sunday to Saturday (0..6)
				yday   Day of year (0..365)

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| timezone | string | (system time zone) | Time zone |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

## date:create — Create timestamp

DATE:CREATE creates the timestamp for a date, specified by day, month, year, hour, minute and second.

Timestamps are based on Unix time, defined as the number of seconds elapsed since midnight proleptic Coordinated Universal Time (UTC) of January 1, 1970, not counting leap seconds.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| day | int |  | Day |
| month | int |  | Month |
| year | int |  | Year |
| hour | int |  | Hour |
| minute | int |  | Minute |
| second | int |  | Second |
| timezone | string | (system time zone) | Time zone |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<output>
	<date:create day="1" month="1" year="2000"/>
</output>

<!-- 946684800 -->
```

## date:parse — Parse date and time

DATE:PARSE returns the timestamp for a date by parsing a textual date and time value.

Timestamps are based on Unix time, defined as the number of seconds elapsed since midnight proleptic Coordinated Universal Time (UTC) of January 1, 1970, not counting leap seconds.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| timezone | string | (system time zone) | Time zone |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<output>
	<date:parse>2000-01-01</date:parse>
</output>

<!-- 946684800 -->
```

## date:format — Format timestamp

DATE:FORMAT returns the formatted representation of a timestamp according to a given PHP-compatible format.

Timestamps are based on Unix time, defined as the number of seconds elapsed since midnight proleptic Coordinated Universal Time (UTC) of January 1, 1970, not counting leap seconds.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| format | string | c | Format |
| timezone | string | (system time zone) | Time zone |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<date:format format="Y-m-d">946684800</date:format>
</output>

<!-- 2000-01-01 -->
```

---

# iXML — array (Array)

## Spec
- /__doc/ixmldoc.xml

## array — Build array

ARRAY builds an array with associated key and value pairs. It may be deeply nested in order to build a multidimensional array.

If the key is omitted within ARRAY or ITEM, a consecutive numeric key will implicitly be generated.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| key | string | (next consecutive numeric key) | Key |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
</array>

<output>$names.bg and $names.sj are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<output>$names[0] and $names[1] are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

## item — Array item

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| key | string | (next consecutive numeric key) | Key |

### Children
- (none)

### Parents
- array

### Result
- (none documented)

## array:range — Array range

ARRAY:RANGE creates an array with values of a given numeric range.

ARRAY:RANGE will implicitly generate a consecutive numeric key for each item of the numeric range.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| from | int |  | From |
| to | int |  | To |
| step | int | 1 | Step |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<array:range var="range" from="6" to="10" step="2"/>

<output>
	<array:join var="range" delimiter=", "/>
</output>

<!-- 6, 8, 10 -->
```

```xml
<array:range var="range" from="10" to="6" step="2"/>

<output>
	<array:join var="range" delimiter=", "/>
</output>

<!-- 10, 8, 6  -->
```

## array:assoc — Associate keys and values

ARRAY:ASSOC creates an array of associated key and value pairs by combining two separate arrays of keys and values.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| var_keys | var |  | Variable name for keys |
| var_values | var |  | Variable name for values |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="keys">
	<item>bg</item>
	<item>sj</item>
</array>

<array var="values">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<array:assoc var="names" var_keys="keys" var_values="values"/>
<output>$names.bg and $names.sj are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

## array:populate — Populate array

ARRAY:POPULATE imports all associated key and value pairs from an array into the local variable scope by treating keys as variable names, expanded by a given prefix, and values as non-referential variable values.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| prefix | string |  | Prefix |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
</array>

<array:populate var="names" prefix="n_"/>
<output>$n_bg and $n_sj are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

## array:length — Array length

ARRAY:LENGTH returns the number of items in an array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: int

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<array:length var="names" var_result="len"/>

<if value1="$len" func="&gt;" value2="0">
	<output>There are names available!</output>
</if>

<!-- There are names available! -->
```

## array:keyexists — Array key exists

ARRAY:KEYEXISTS checks whether a key exists within an array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: bool

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
</array>

<array:keyexists var="names" var_result="exists">sj</array:keyexists>

<is var="exists" type="true">
	<output>Key exists!</output>
</is>

<!-- Key exists! -->
```

## array:valueexists — Array value exists

ARRAY:VALUEEXISTS checks whether a value exists within an array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: bool

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<array:valueexists var="names" var_result="exists">Steve Jobs</array:valueexists>

<is var="exists" type="true">
	<output>Value exists!</output>
</is>

<!-- Value exists! -->
```

## array:pos — Position of first/last occurrence

ARRAY:POS finds the position of first or last occurrence of a value within an array and returns the key of the corresponding array item if applicable.

If the offset is negative it will start that many items from the end of the array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |
| offset | int |  | Search offset |
| type | type | first | Measurement type |

#### Possible values
Possible values for `type`:
- first — First occurrence
- last — Last occurrence


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: n/a

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<output>
	<array:pos var="names">Steve Jobs</array:pos>
</output>

<!-- 1 -->
```

## array:first — First array item

ARRAY:FIRST returns the first item of an array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_key | var |  | Result variable name for key |
| var_value | var |  | Result variable name for value |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_key; type: n/a; predicate: no-result-propagation
- binding: var_value; type: n/a

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="js">Steve Jobs</item>
</array>

<output>
	<array:first var="names"/>
</output>

<!-- Bill Gates -->
```

## array:last — Last array item

ARRAY:LAST returns the last item of an array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_key | var |  | Result variable name for key |
| var_value | var |  | Result variable name for value |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_key; type: n/a; predicate: no-result-propagation
- binding: var_value; type: n/a

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="js">Steve Jobs</item>
</array>

<output>
	<array:last var="names"/>
</output>

<!-- Steve Jobs -->
```

## array:rand — Random array item

ARRAY:RAND returns a random item of an array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_key | var |  | Result variable name for key |
| var_value | var |  | Result variable name for value |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_key; type: n/a; predicate: no-result-propagation
- binding: var_value; type: n/a

## array:push — Push onto array

ARRAY:PUSH pushes a value onto the end of an array.

ARRAY:PUSH will implicitly generate a consecutive numeric key.

These three statements are semantically equivalent:

					<array:push var="var">value</array:push>
					<set var="var[]">value</set>

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
</array>

<array:push var="names">Steve Jobs</array:push>
<output>$names[0] and $names[1] are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

## array:pop — Pop off array

ARRAY:POP pops an item off the end of an array and returns its value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation
- binding: var_result; type: n/a

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<output>
	<array:pop var="names"/>
</output>

<!-- Steve Jobs -->
```

## array:shift — Shift off array

ARRAY:SHIFT shifts an item off the beginning of an array and returns its value.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation
- binding: var_result; type: n/a

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<output>
	<array:shift var="names"/>
</output>

<!-- Bill Gates -->
```

## array:unshift — Prepend to array

ARRAY:UNSHIFT prepends a value to the beginning of an array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
</array>

<array:unshift var="names">Steve Jobs</array:unshift>
<output>$names[0] and $names[1] are competitors!</output>

<!-- Steve Jobs and Bill Gates are competitors! -->
```

## array:concat — Concatenate array

ARRAY:CONCAT concatenates the items of the tail array to an array.

ARRAY:CONCAT will implicitly generate a consecutive numeric key for each item of the tail array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| var_tail | var |  | Tail variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
</array>

<array var="addition">
	<item>Steve Jobs</item>
</array>

<array:concat var="names" var_tail="addition"/>
<output>$names[0] and $names[1] are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

## array:slice — Slice array items

ARRAY:SLICE slices part of an array, isolated by an offset and a length.

If the offset is negative it will start that many items from the end of the array. If the length is omitted, every item from the offset until the end of the array will be returned. If the length is negative then it will stop that many items from the end of the array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| offset | int |  | Offset |
| length | int | (end of array) | Length |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
	<item>Larry Ellison</item>
</array>

<array:slice var="names" offset="1" length="2"/>

<output>
	<array:join var="names" delimiter=", "/>
</output>

<!-- Steve Jobs, Larry Ellison -->
```

## array:extract — Extract array items

ARRAY:EXTRACT extracts and replaces part of an array, isolated by an offset and a length.

If the offset is negative it will start that many items from the end of the array. If the length is omitted, every item from the offset until the end of the array will be returned. If the length is negative then it will stop that many items from the end of the array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_replacement | var |  | Replacement variable name |
| var_result | var |  | Result variable name |
| offset | int |  | Offset |
| length | int | (end of array) | Length |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation
- binding: var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
	<item>Larry Ellison</item>
</array>

<array:extract var="names" var_result="extract" offset="1" length="2"/>
<output>$extract[0] and $extract[1] are friends!</output>

<!-- Steve Jobs and Larry Ellison are friends! -->
```

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Larry Ellison</item>
</array>

<array var="replacement">
	<item>Steve Jobs</item>
</array>

<array:extract var="names" var_replacement="replacement" length="1"/>
<output>$names[0] and $names[1] are friends!</output>

<!-- Steve Jobs and Larry Ellison are friends! -->
```

## array:pad — Pad array

ARRAY:PAD pads an array to a given length.

If the length is positive then the array is padded on the right, if it is negative then on the left. If the absolute length is less than or equal to the actual length of the array then no padding takes place.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| length | int |  | Length |
| padding | string | (NULL) | Padding value |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<array:pad var="names" length="3" padding="Larry Ellison"/>
<output>$names[1] and $names[2] are friends!</output>

<!-- Steve Jobs and Larry Ellison are friends! -->
```

## array:reverse — Reverse array

ARRAY:REVERSE reverses the item order of an array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<array:reverse var="names"/>

<foreach var="names" var_value="name">
	<output>$name&n;</output>
</foreach>

<!--
Steve Jobs
Bill Gates
-->
```

## array:flip — Flip array

ARRAY:FLIP exchanges all keys in an array with their associated values.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
</array>

<array:flip var="names"/>
<output>$names[Bill Gates] and $names[Steve Jobs] are competitors!</output>

<!-- bg and sj are competitors! -->
```

## array:unique — Unique array

ARRAY:UNIQUE discards duplicate items from an array, keeping only the first occurrence of each value.

A given key may specify the column of a multidimensional array to distinguish by. If however, the key is omitted, then the array is treated as an unidimensional list.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item key="bg1">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
	<item key="bg2">Bill Gates</item>
</array>

<array:unique var="names"/>

<foreach var="names" var_key="key" var_value="name">
	<output>$key: $name&n;</output>
</foreach>

<!--
bg1: Bill Gates
sj: Steve Jobs
-->
```

## array:merge — Array merging

ARRAY:MERGE merges an array with the set array, whereas duplicated non-numeric keys are overwritten while items with numeric keys are appended.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_set | var |  | Set variable name |
| var_result | var | (destructive on 'var') | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
</array>

<array var="addition">
	<item>Steve Jobs</item>
	<item>Larry Ellison</item>
</array>

<array:merge var="names" var_set="addition"/>
<output>$names[0] and $names[1] are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

## array:complement — Array complement

ARRAY:COMPLEMENT generates the relative complement of two arrays by extracting those items of an array that do not exist within the set array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_set | var |  | Set variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| type | type | values | Complement type |

#### Possible values
Possible values for `type`:
- keys — By keys
- values — By values


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
	<item key="le">Larry Ellison</item>
</array>

<array var="complement">
	<item key="bg">Bill Gates</item>
</array>

<array:complement var="names" var_set="complement" type="keys"/>
<output>$names.sj and $names.le are friends!</output>

<!-- Steve Jobs and Larry Ellison are friends! -->
```

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
	<item>Larry Ellison</item>
</array>

<array var="complement">
	<item>Bill Gates</item>
</array>

<array:complement var="names" var_set="complement" type="values"/>
<output>$names[1] and $names[2] are friends!</output>

<!-- Steve Jobs and Larry Ellison are friends! -->
```

## array:diff — Array difference

ARRAY:DIFF generates the symmetric difference of two arrays by merging those items of both arrays that do not exist within both arrays together, whereas duplicated non-numeric keys are overwritten while items with numeric keys are appended.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_set | var |  | Set variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| type | type | values | Difference type |

#### Possible values
Possible values for `type`:
- keys — By keys
- values — By values


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
</array>

<array var="diff">
	<item key="sj">Steve Jobs</item>
	<item key="le">Larry Ellison</item>
</array>

<array:diff var="names" var_set="diff" type="keys"/>
<output>$names.bg and $names.le are competitors!</output>

<!-- Bill Gates and Larry Ellison are competitors! -->
```

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<array var="diff">
	<item>Steve Jobs</item>
	<item>Larry Ellison</item>
</array>

<array:diff var="names" var_set="diff" type="values"/>
<output>$names[0] and $names[1] are competitors!</output>

<!-- Bill Gates and Larry Ellison are competitors! -->
```

## array:intersect — Array intersection

ARRAY:INTERSECT generates the intersection of two arrays by extracting those items of an array that also exist within the set array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_set | var |  | Set variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| type | type | values | Intersection type |

#### Possible values
Possible values for `type`:
- keys — By keys
- values — By values


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
</array>

<array var="intersect">
	<item key="sj">Steve Jobs</item>
	<item key="le">Larry Ellison</item>
	<item key="bg">Bill Gates</item>
</array>

<array:intersect var="names" var_set="intersect" type="keys"/>
<output>$names.bg and $names.sj are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
</array>

<array var="intersect">
	<item>Steve Jobs</item>
	<item>Larry Ellison</item>
	<item>Bill Gates</item>
</array>

<array:intersect var="names" var_set="intersect" type="values"/>
<output>$names[0] and $names[1] are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

## array:union — Array union

ARRAY:UNION generates the union of two arrays by merging the items of an array with those items of the set array that do not exist in the original array, whereas duplicated non-numeric keys are overwritten while items with numeric keys are appended.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_set | var |  | Set variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| type | type | values | Union type |

#### Possible values
Possible values for `type`:
- keys — By keys
- values — By values


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
</array>

<array var="union">
	<item key="sj">Steve Jobs</item>
	<item key="le">Larry Ellison</item>
</array>

<array:union var="names" var_set="union" type="keys"/>
<output>$names.bg and $names.sj are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

```xml
<array var="names">
	<item>Bill Gates</item>
</array>

<array var="union">
	<item>Steve Jobs</item>
	<item>Larry Ellison</item>
</array>

<array:union var="names" var_set="union" type="values"/>
<output>$names[0] and $names[1] are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

## array:replace — Replace array items

ARRAY:REPLACE replaces the values of an array with the values of a replacement array based on their common keys.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_replacement | var |  | Replacement variable name |
| var_result | var | (destructive on 'var') | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
</array>

<array var="replacement">
	<item key="bg">William Henry Gates III</item>
</array>

<array:replace var="names" var_replacement="replacement"/>
<output>$names.bg and $names.sj are competitors!</output>

<!-- William Henry Gates III and Steve Jobs are competitors! -->
```

## array:filter — Filter array items

ARRAY:FILTER filters an array by extracting those items of an array whose values meet the given condition.

A given key may specify the column of a multidimensional array to filter by. If however, the key is omitted, then the array is treated as an unidimensional list.

Comparison of numeric values is always performed numerically regardless of the intrinsic data types.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| value | string\|regexp |  | Value to compare to |
| func | string | = | Comparison function |

#### Possible values
Possible values for `func`:
- = — Equals
- =* — Equals, case-insensitive
- != — Not equals
- <> — Not equals
- !=* — Not equals, case-insensitive
- <>* — Not equals, case-insensitive
- < — Less than
- <= — Less than or equal to
- > — Greater than
- >= — Greater than or equal to
- _ — Contains
- _* — Contains, case-insensitive
- !_ — Not contains
- !_* — Not contains, case-insensitive
- ^ — Starts with
- ^* — Starts with, case-insensitive
- !^ — Not starts with
- !^* — Not starts with, case-insensitive
- $ — Ends with
- $* — Ends with, case-insensitive
- !$ — Not ends with
- !$* — Not ends with, case-insensitive
- ~ — Matches regular expression
- !~ — Not matches regular expression


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

## array:trim — Strip whitespaces from array items

ARRAY:TRIM strips whitespace characters from the beginning and/or end of the value of each item of an array.

A given key may specify the column of a multidimensional array to trim. If however, the key is omitted, then the array is treated as an unidimensional list.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| type | type | both | Direction type |

#### Possible values
Possible values for `type`:
- both — Both
- left — From left
- right — From right


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item>     Bill Gates     </item>
	<item>     Steve Jobs     </item>
</array>

<array:trim var="names"/>
<output>$names[0]</output>

<!-- Bill Gates -->
```

## array:keys — Array keys

ARRAY:KEYS extracts all keys of an array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
</array>

<array:keys var="names" var_result="keys"/>
<output>$keys[0] and $keys[1] are competitors!</output>

<!-- bg and sj are competitors! -->
```

## array:values — Array values

ARRAY:VALUES extracts all values of an array.

A given key may specify the column of a multidimensional array to extract from. If however, the key is omitted, then the array is treated as an unidimensional list.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
</array>

<array:values var="names" var_result="values"/>
<output>$values[0] and $values[1] are competitors!</output>

<!-- Bill Gates and Steve Jobs are competitors! -->
```

## array:chunk — Chunk-split array

ARRAY:CHUNK splits an array into chunks of a given length.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| length | int | 1 | Length |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

## array:group — Group array items

ARRAY:GROUP groups the items of a multidimensional array by a given key.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| key | string |  | Key |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

## array:sort — Sort array items

ARRAY:SORT sorts the items of an array in a particular order based on a given sorting type.

A given key may specify the column of a multidimensional array to sort by. If however, the key is omitted, then the array is treated as an unidimensional list.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var | (destructive on 'var') | Result variable name |
| type | type | asc | Sorting type |

#### Possible values
Possible values for `type`:
- asc — Ascending
- desc — Descending
- nat-asc — Ascending natural
- nat-desc — Descending natural
- keys-asc — Ascending by keys
- keys-desc — Descending by keys
- keys-nat-asc — Ascending natural by keys
- keys-nat-desc — Descending natural by keys
- rand — Random


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var|var_result; type: array; predicate: no-result-propagation

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
	<item>Larry Ellison</item>
</array>

<array:sort var="names" type="desc"/>

<output>
	<array:join var="names" delimiter=", "/>
</output>

<!-- Steve Jobs, Larry Ellison, Bill Gates -->
```

## array:aggregate — Aggregate array items

ARRAY:AGGREGATE calculates an aggregated value of the values of an array based on a given aggregation type.

A given key may specify the column of a multidimensional array to aggregate by. If however, the key is omitted, then the array is treated as an unidimensional list.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |
| type | type | count | Aggregation type |

#### Possible values
Possible values for `type`:
- count — Count
- sum — Summation
- avg — Average
- product — Product
- min — Minimum
- max — Maximum
- range — Range
- median — Median
- mean-arith — Arithmetic mean
- mean-geo — Geometric mean
- mean-harm — Harmonic mean
- mean-sqr — Square mean
- stddev-pop — Population standard deviation
- stddev-samp — Sample standard deviation
- var-pop — Population variance
- var-samp — Sample variance


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: n/a

### Examples

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="count"/>
</output>

<!-- 6 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="sum"/>
</output>

<!-- 234 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="avg"/>
</output>

<!-- 39 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="product"/>
</output>

<!-- 1650180096 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="min"/>
</output>

<!-- 16 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="max"/>
</output>

<!-- 62 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="range"/>
</output>

<!-- 46 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="median"/>
</output>

<!-- 40 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="mean-arith"/>
</output>

<!-- 39 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="mean-geo"/>
</output>

<!-- 34.375990770947 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="mean-harm"/>
</output>

<!-- 29.867417906506 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="mean-sqr"/>
</output>

<!-- 42.891335566367 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="stddev-pop"/>
</output>

<!-- 17.851237118661 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="stddev-samp"/>
</output>

<!-- 19.555050498529 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="var-pop"/>
</output>

<!-- 318.66666666667 -->
```

```xml
<array var="numbers">
	<item>16</item>
	<item>32</item>
	<item>19</item>
	<item>57</item>
	<item>62</item>
	<item>48</item>
</array>

<output>
	<array:aggregate var="numbers" type="var-samp"/>
</output>

<!-- 382.4 -->
```

## array:join — Join array items

ARRAY:JOIN joins the items of an array together to form a string representation with each value separated by a given delimiter.

A given key may specify the column of a multidimensional array to join by. If however, the key is omitted, then the array is treated as an unidimensional list.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |
| delimiter | string |  | Delimiter |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: string

### Examples

```xml
<array var="names">
	<item>Bill Gates</item>
	<item>Steve Jobs</item>
	<item>Larry Ellison</item>
</array>

<output>
	<array:join var="names" delimiter=", "/>
</output>

<!-- Bill Gates, Steve Jobs, Larry Ellison -->
```

---

# iXML — encode (Encoding)

## Spec
- /__doc/ixmldoc.xml

## encode:hash — Hash

ENCODE:HASH generates the hash of a value according to a given algorithm.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| algorithm | string | md5 | Algorithm |
| raw | bool |  | Raw binary format |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<encode:hash algorithm="sha1" key="ixml">My name is iXML!</encode:hash>
</output>

<!-- f66b1452e6c9a6061bb9837a511470e06f23d9b5 -->
```

## encode:md5 — MD5 hash

ENCODE:MD5 generates the MD5 hash of a value as a 32-character hexadecimal number using the RSA Data Security, Inc. MD5 Message-Digest Algorithm.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<encode:md5>My name is iXML!</encode:md5>
</output>

<!-- 5a93f1d56c2f7551b9e3dd90e93fb6c0 -->
```

## encode:sha1 — SHA-1 hash

ENCODE:SHA1 generates the SHA-1 hash of a value as a 40-character hexadecimal number using the US Secure Hash Algorithm 1.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<encode:sha1>My name is iXML!</encode:sha1>
</output>

<!-- bb9b1ff0d612972f6a48652caf6de4201c07c9f6 -->
```

## encode:crc32 — CRC32 checksum

ENCODE:CRC32 generates the 32-bit cyclic redundancy checksum polynomial of a value as a signed integer number.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<output>
	<encode:crc32>My name is iXML!</encode:crc32>
</output>

<!-- -122920343 -->
```

## encode:soundex — Soundex key

ENCODE:SOUNDEX generates the 4-character soundex key of a value.

Soundex keys have the property that words pronounced similarly produce the same soundex key.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<encode:soundex>iXML</encode:soundex>
</output>

<!-- I254 -->
```

## encode:metaphone — Metaphone key

ENCODE:METAPHONE generates the metaphone key of a value.

Metaphone keys have the property that words pronounced similarly produce the same metaphone key.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<encode:metaphone>iXML</encode:metaphone>
</output>

<!-- IKSML -->
```

## encode:crypt — Symmetric-key encryption

ENCODE:CRYPT encryptes plaintext with a key according to a given cipher.

ENCODE:CRYPT is the complement of the DECODE:CRYPT operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for ciphertext |
| var_iv | var |  | Result variable name for initialization vector |
| cipher | string |  | Cipher |
| key | string |  | Cryptographic key |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

## encode:deflate — DEFLATE compression

ENCODE:DEFLATE compresses a value to DEFLATE data format according to RFC 1951.

ENCODE:DEFLATE is the complement of the DECODE:DEFLATE operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| level | int | -1 | Compression level |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

## encode:zlib — ZLIB compression

ENCODE:ZLIB compresses a value to ZLIB data format according to RFC 1950.

ENCODE:ZLIB is the complement of the DECODE:ZLIB operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| level | int | -1 | Compression level |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

## encode:xml — Encode XML

ENCODE:XML encodes a value by converting special reserved characters to their applicable XML entites.

ENCODE:XML is the complement of the DECODE:XML operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<encode:xml>My name is "iXML" &amp; I am a XML derivative!</encode:xml>
</output>

<!-- My name is &quot;iXML&quot; &amp; I am a XML derivative! -->
```

## encode:html — Encode HTML

ENCODE:HTML encodes a value by converting special reserved characters to their applicable HTML entites and whitespace characters to a meaningful HTML representation.

ENCODE:HTML is compatible to the DECODE:HTML operation, but not the complement thereof.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<encode:html>Hello World!&n;My name is "iXML" &amp; I am a XML derivative!</encode:html>
</output>

<!-- Hello World!<br />My name is &quot;iXML&quot; &amp; I am a XML derivative! -->
```

## encode:url — Encode URL

ENCODE:URL encodes a value according to RFC 1738 by replacing non-alphanumeric characters except '-', '_' and '.' with a percent sign ('%') followed by a 2-character hexadecimal number.

ENCODE:URL is the complement of the DECODE:URL operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<encode:url>My name is iXML!</encode:url>
</output>

<!-- My%20name%20is%20iXML%21 -->
```

## encode:base64 — Encode MIME Base64

ENCODE:BASE64 encodes a value according to RFC 2045 using a 65-character printable subset of US-ASCII to represent arbitrary byte sequences.

MIME Base64 is designed to make binary data survive transport through transport layers that are not 8-bit clean. MIME Base64-encoded data is about 33 percent larger than the unencoded data.

ENCODE:BASE64 is the complement of the DECODE:BASE64 operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<encode:base64>My name is iXML!</encode:base64>
</output>

<!-- TXkgbmFtZSBpcyBpWE1MIQ== -->
```

## encode:quotedprint — Encode quoted-printable

ENCODE:QUOTEDPRINT encodes a value according to RFC 2045 by replacing unprintable characters with an equal sign ('=') followed by a 2-character hexadecimal number.

ENCODE:QUOTEDPRINT is the complement of the DECODE:QUOTEDPRINT operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<encode:quotedprint>Hello World!&n;My name is iXML!</encode:quotedprint>
</output>

<!-- Hello World!=0AMy name is iXML! -->
```

## encode:json — Encode JSON

ENCODE:JSON generates the JavaScript Object Notation (JSON) representation of the value of a variable according to RFC 4627.

ENCODE:JSON is the complement of the DECODE:JSON operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |
| pretty | bool |  | Pretty print |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: string

### Examples

```xml
<array var="names">
	<item key="bg">Bill Gates</item>
	<item key="sj">Steve Jobs</item>
</array>

<output>
	<encode:json var="names"/>
</output>

<!-- {"bg":"Bill Gates","sj":"Steve Jobs"} -->
```

## encode:csv — Encode CSV

ENCODE:CSV joins the items of a multidimensional array to comma-separated values.

Comma-separated values represent tabular data. Each line corresponds to a row in the table. Within a line, fields are separated by a delimiter, each field belonging to one table column.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |
| delimiter | string | ; | Delimiter |
| enclose | bool |  | Enclose values |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: string

### Examples

```xml
<array var="names">
	<array>
		<item>First Name</item>
		<item>Last Name</item>
	</array>

	<array>
		<item>Bill</item>
		<item>Gates</item>
	</array>

	<array>
		<item>Steve</item>
		<item>Jobs</item>
	</array>
</array>

<output>
	<encode:csv var="names" delimiter=";"/>
</output>

<!--
"First Name";"Last Name"
Bill;Gates
Steve;Jobs
-->
```

## encode:binary — Pack binary data

ENCODE:BINARY packs the values of an array into binary data according to a given Perl/PHP-compatible format.

ENCODE:BINARY is the complement of the DECODE:BINARY operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |
| format | string |  | Format |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: string

---

# iXML — decode (Decoding)

## Spec
- /__doc/ixmldoc.xml

## decode:crypt — Symmetric-key decryption

DECODE:CRYPT decryptes ciphertext with a key according to a given cipher.

DECODE:CRYPT is the complement of the ENCODE:CRYPT operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| cipher | string |  | Cipher |
| iv | string |  | Initialization vector |
| key | string |  | Cryptographic key |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

## decode:deflate — DEFLATE decompression

DECODE:DEFLATE decompresses a value from DEFLATE data format according to RFC 1951.

DECODE:DEFLATE is the complement of the ENCODE:DEFLATE operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

## decode:zlib — ZLIB decompression

DECODE:ZLIB decompresses a value from ZLIB data format according to RFC 1950.

DECODE:ZLIB is the complement of the ENCODE:ZLIB operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

## decode:xml — Decode XML

DECODE:XML decodes a value by converting special XML entites back to their applicable characters.

DECODE:XML is the complement of the ENCODE:XML operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<decode:xml>My name is &quot;iXML&quot; &amp;amp; I am a XML derivative!</decode:xml>
</output>

<!-- My name is "iXML" & I am a XML derivative! -->
```

## decode:html — Decode HTML

DECODE:HTML decodes a value by stripping HTML tags and converting all HTML entites back to their applicable characters.

DECODE:HTML is compatible to the ENCODE:HTML operation, but it is not the complement thereof.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<decode:html>Hello World!&lt;br /&gt;My name is &quot;iXML&quot; &amp;amp; I am a XML derivative!</decode:html>
</output>

<!--
Hello World!
My name is "iXML" & I am a XML derivative!
-->
```

## decode:url — Decode URL

DECODE:URL decodes a value according to RFC 3986 by replacing sequences incipient with a percent sign ('%') followed by a 2-character hexadecimal number with their applicable characters.

DECODE:URL is the complement of the ENCODE:URL operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<decode:url>My%20name%20is%20iXML%21</decode:url>
</output>

<!-- My name is iXML! -->
```

## decode:base64 — Decode MIME Base64

DECODE:BASE64 decodes a value according to RFC 2045 by converting printable characters back to arbitrary byte sequences.

MIME Base64 is designed to make binary data survive transport through transport layers that are not 8-bit clean. MIME Base64-encoded data is about 33 percent larger than the unencoded data.

DECODE:BASE64 is the complement of the ENCODE:BASE64 operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<decode:base64>TXkgbmFtZSBpcyBpWE1MIQ==</decode:base64>
</output>

<!-- My name is iXML! -->
```

## decode:quotedprint — Decode quoted-printable

DECODE:QUOTEDPRINT decodes a value according to RFC 2045 by replacing sequences incipient with an equal sign ('=') followed by a 2-character hexadecimal number with their applicable characters.

DECODE:QUOTEDPRINT is the complement of the ENCODE:QUOTEDPRINT operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<decode:quotedprint>Hello World!=0AMy name is iXML!</decode:quotedprint>
</output>

<!--
Hello World!
My name is iXML!
-->
```

## decode:json — Decode JSON

DECODE:JSON generates a value from a JavaScript Object Notation (JSON) representation according to RFC 4627.

DECODE:JSON is the complement of the ENCODE:JSON operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<decode:json var="names">{"bg":"Bill Gates","sj":"Steve Jobs"}</decode:json>
<output>$names.bg</output>
<!-- Bill Gates -->
```

## decode:csv — Decode CSV

DECODE:CSV parses comma-separated values into a multidimensional array.

Comma-separated values represent tabular data. Each line corresponds to a row in the table. Within a line, fields are separated by a delimiter, each field belonging to one table column.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| delimiter | string | ; | Delimiter (single ASCII character) |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

## decode:binary — Unpack binary data

DECODE:BINARY unpacks binary data into an array according to a given Perl/PHP-compatible format.

DECODE:BINARY is the complement of the ENCODE:BINARY operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| format | string |  | Format |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

---

# iXML — xml (XML)

## Spec
- /__doc/ixmldoc.xml

## xml:create — Create XML

XML:CREATE generates a XML document according to the XML 1.0 Specification.

The given variable references the root element and must be an array comprised of the following items:

				Key   Description
				--------------------------------------------------------------
				name  tag name
				attr  array of attributes with associated name and value pairs
				nodes array of child nodes including cdata parts
				cdata cdata value (optionally instead of 'nodes')

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var_result; type: string

### Examples

```xml
<array var="root">
	<item key="name">html</item>

	<array key="attr">
		<item key="xmlns">http://www.w3.org/1999/xhtml</item>
		<item key="xml:lang">en</item>
	</array>
</array>

<output>
	<xml:create var="root"/>
</output>

<!--
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"/>
-->
```

## xml:parse — Parse XML

XML:PARSE parses a XML document.

XML:PARSE returns the root element as an array comprised of the following items:

				Key   Description
				---------------------------------------------------------------------------
				name  tag name (upper case)
				attr  array of attributes with associated name (upper case) and value pairs
				nodes array of child nodes including cdata parts
				child array of child elements
				elems array of child elements grouped by tag name (upper case)
				cdata concatenated cdata value

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| preservecase | bool |  | Preserve case |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

---

# iXML — soap (SOAP)

## Spec
- /__doc/ixmldoc.xml

## soap:client — SOAP client

SOAP:CLIENT defines a set of dynamically bound SOAP operations based on SOAP 1.1 according to a given WSDL model.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| wsdl | string |  | WSDL filename/URL |
| username | string |  | Username |
| password | string |  | Password |
| timeout | int | 60 | Timeout in seconds |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<soap:client wsdl="http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL">
	<soap:bind var="getCountryName">CountryName</soap:bind>
</soap:client>

<array var="parameters">
	<item key="sCountryISOCode">DE</item>
</array>

<call func="getCountryName" var="result">
	<param var="parameters"/>
</call>

<output>$result.CountryNameResult</output>

<!-- Germany -->
```

## soap:bind — SOAP binding

SOAP:BIND defines a SOAP operation as a function that can be invoked with subsequent CALL statements.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Function variable name |

### Children
- (none)

### Parents
- soap:client

### Result
- binding: var; type: function; predicate: no-result-propagation

---

# iXML — rest (RESTful)

## Spec
- /__doc/ixmldoc.xml

## rest:client — RESTful client

REST:CLIENT defines a set of dynamically bound RESTful resources based on HTTP/1.1.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| url | string |  | URL |
| timeout | int | 60 | Timeout in seconds |
| validate | bool |  | Validate SSL |

### Children
- rest:header (occurrence: single) — REST header

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<rest:client url="https://api.predic8.de/shop/v2">
	<rest:header>
		Content-Type: application/json
	</rest:header>

	<rest:bind var="createProduct" method="POST">/products/</rest:bind>
	<rest:bind var="updateProduct" method="PATCH">/products/:id</rest:bind>
	<rest:bind var="getProduct" method="GET">/products/:id</rest:bind>
</rest:client>

<call func="createProduct" var="data">
	<param>{"name": "Some Fruit", "price": 4.99}</param>
</call>

<call func="updateProduct">
	<param var="data.id"/>
	<param>{"name": "Wildberries"}</param>
</call>

<call func="getProduct" var="data">
	<param var="data.id"/>
</call>

<output>$data.name</output>

<!-- Wildberries -->
```

## rest:bind — RESTful binding

REST:BIND defines a RESTful resource as a function that can be invoked with subsequent CALL statements.

Resource route arguments of the form ':name' are substituted with the actual corresponding parameter values when being called. All remaining parameters are treated as query arguments according to RFC 3986 and are generally passed via the URL query component except for method POST in which case they are transported as the HTTP body.

Invoked resources return an array comprised of the following items if type is specified as 'raw':

				Key    Description
				----------------------------
				status response status code
				type   response content type
				header response header
				body   response body

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Function variable name |
| method | string | GET | Method |
| type | type | prepared | Processing type |

#### Possible values
Possible values for `method`:
- HEAD — HEAD
- GET — GET
- POST — POST
- PUT — PUT
- PATCH — PATCH
- DELETE — DELETE
- TRACE — TRACE
- OPTIONS — OPTIONS
- CONNECT — CONNECT

Possible values for `type`:
- prepared — Prepared
- raw — Raw


### Children
- (none)

### Parents
- rest:client

### Result
- binding: var; type: function; predicate: no-result-propagation

## rest:server — RESTful server

The REST:SERVER construct is a control flow structure that allows for selective execution of code according to the underlying RESTful request based on HTTP, in which each resource is a special type of subroutine.

REST:SERVER will invoke the resource subroutine of the first route that matches the current HTTP request's path and method with the associated request header field name and value pairs assigned to 'var_header' and the request body assigned to 'var_body'. Also, resource route arguments of the form ':name' as well as query arguments are assigned to corresponding local variables. The route may contain a final variadic argument of the form '*name' for all remaining route components as an array.

The USE construct declares a free function variable for use as a local variable within the resource subroutine that is explicitly bound to a corresponding variable from the immediate context within which the RESTful server is defined, thereby directly referencing the non-local variable from the parent scope outside of the inherent context of the resource subroutine.

### Attributes
- (none)

### Children
- rest:resource (occurrence: multiple) — RESTful resource definition

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<global var="people"/>

<array var="people">
	<array key="bg">
		<item key="lastname">Gates</item>
		<item key="firstname">Bill</item>
	</array>

	<array key="sj">
		<item key="lastname">Jobs</item>
		<item key="firstname">Steve</item>
	</array>
</array>

<rest:server>
	<rest:resource route="/person/:id" method="GET">
		<array:keyexists var="people" var_result="exists">$id</array:keyexists>

		<is var="exists" type="false">
			<set var="return">404</set>
			<return/>
		</is>

		<header>Content-Type: application/json</header>

		<output>
			<encode:json var="people[$id]"/>
		</output>
	</rest:resource>

	<rest:resource route="/person/:id" method="POST">
		<set var="people[$id].lastname">$lastname</set>
		<set var="people[$id].firstname">$firstname</set>
	</rest:resource>

	<rest:resource route="/person/:id" method="PUT" var_body="data">
		<decode:json var="people[$id]">$data</decode:json>
		<set var="return">201</set>
	</rest:resource>

	<rest:resource route="/person/:id" method="DELETE">
		<unset var="people[$id]"/>
	</rest:resource>
</rest:server>
```

---

# iXML — http (HTTP)

## Spec
- /__doc/ixmldoc.xml

## http:request — HTTP request

HTTP:REQUEST sends a HTTP/1.1 request and receives a HTTP response according to RFC 2616.

HTTP:REQUEST returns an array in 'var_info' comprised of the following items:

				Key    Description
				----------------------------
				status response status code
				type   response content type
				header response header
				body   response body

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for response body |
| var_info | var |  | Result variable name for detailed response information |
| url | string |  | URL |
| timeout | int | 60 | Timeout in seconds |
| validate | bool |  | Validate SSL |
| method | string | GET | Method |

#### Possible values
Possible values for `method`:
- HEAD — HEAD
- GET — GET
- POST — POST
- PUT — PUT
- DELETE — DELETE
- TRACE — TRACE
- OPTIONS — OPTIONS
- CONNECT — CONNECT


### Children
- http:header (occurrence: single) — HTTP header
- http:body (occurrence: single) — HTTP body

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string
- binding: var_info; type: array; predicate: no-result-propagation

### Examples

```xml
<decode:json var="data">
	<http:request url="https://api.predic8.de/shop/v2/products" method="POST">
		<http:header>
			Content-Type: application/json
		</http:header>

		<http:body>
			{"name": "Wildberries", "price": 4.99}
		</http:body>
	</http:request>
</decode:json>

<set var="route">$data.self_link</set>

<decode:json var="data">
	<http:request url="https://api.predic8.de$route" method="GET"/>
</decode:json>

<output>$data.name</output>

<!-- Wildberries -->
```

## http:urlinfo — URL information

HTTP:URLINFO parses a URL according to RFC 1738 and returns the various components thereof.

HTTP:URLINFO returns an array comprised of the following items:

				Key      Description
				----------------------------------------------------------------------
				scheme   scheme
				host     hostname
				port     port
				pass     password
				user     username
				path     path
				query    query
				fragment fragment/anchor
				args     array of query arguments with associated name and value pairs

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| url | string |  | URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<http:urlinfo var="info" url="http://www.google.com?q=iXML"/>
<output>Scheme: $info.scheme, Host: $info.host, Query: $info.query, Arg 'q': $info.args.q</output>
<!-- Scheme: http, Host: www.google.com, Query: q=iXML, Arg 'q': iXML -->
```

## http:query — Build URL query

HTTP:QUERY builds a URL query component out of an array of associated name and value pairs according to RFC 3986.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| var_result | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<array var="args">
	<item key="q">iXML</item>
</array>

<output>
	<http:query var="args"/>
</output>

<!-- q=iXML -->
```

---

# iXML — file (File system)

## Spec
- /__doc/ixmldoc.xml

## file:pathinfo — Path information

FILE:PATHINFO parses a filename and returns the various components thereof.

FILE:PATHINFO returns an array comprised of the following items:

				Key       Description
				------------------------------------
				dirname   directory name
				basename  base name
				extension file extension
				filename  filename without extension

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| filename | string |  | Filename |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<file:pathinfo var="info" filename="./test/ixml.inc"/>
<output>Dir: $info.dirname, Base: $info.basename, Ext: $info.extension, Name: $info.filename</output>
<!-- Dir: ./test, Base: ixml.inc, Ext: inc, Name: ixml -->
```

## file:exists — File exists

FILE:EXISTS checks whether a file or directory exists and returns the canonicalized absolute filename if applicable.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| filename | string |  | Filename/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<file:exists var="exists" filename="./test/ixml_non_existing.inc"/>

<is var="exists" type="false">
	<output>File does not exist!</output>
</is>

<!-- File does not exist! -->
```

## file:typeof — Type of file

FILE:TYPEOF returns the type of a file or directory.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| filename | string |  | Filename |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<file:write filename="./test/ixml.inc">iXML</file:write>

<file:typeof var="type" filename="./test/ixml.inc"/>

<if value1="$type" func="=" value2="file">
	<output>Filename refers to a regular file!</output>
</if>

<!-- Filename refers to a regular file! -->
```

## file:status — File status

FILE:STATUS returns the status of a file or directory.

FILE:STATUS returns an array comprised of the following items:

				Index/Key  Description
				-----------------------------------------------------
				0/dev      device number
				1/ino      inode number
				2/mode     inode protection mode
				3/nlink    number of links
				4/uid      userid of owner
				5/gid      groupid of owner
				6/rdev     device type if inode device
				7/size     size in bytes
				8/atime    time of last access (Unix timestamp)
				9/mtime    time of last modification (Unix timestamp)
				10/ctime   time of last inode change (Unix timestamp)
				11/blksize blocksize of filesystem IO
				12/blocks  number of 512-byte blocks allocated

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| filename | string |  | Filename |
| follow | bool |  | Follow symbolic links |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<file:status var="status" filename="./test/ixml.inc"/>
<output>$status.size</output>
<!-- 4 -->
```

## file:read — Read file

FILE:READ reads the entire content of a file.

FILE:READ is the complement of the FILE:WRITE operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| filename | string |  | Filename/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<file:write filename="./test/ixml.inc">iXML</file:write>

<output>
	<file:read filename="./test/ixml.inc"/>
</output>

<!-- iXML -->
```

## file:readcsv — Read CSV file

FILE:READCSV reads each line of a file, whereby parsing comma-separated values into a multidimensional array.

Comma-separated values represent tabular data. Each line corresponds to a row in the table. Within a line, fields are separated by a delimiter, each field belonging to one table column.

FILE:READCSV is the complement of the FILE:WRITECSV operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| filename | string |  | Filename/URL |
| delimiter | string | ; | Delimiter (single ASCII character) |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

## file:readjson — Read JSON file

FILE:READJSON reads a file, whereby generating a value from a JavaScript Object Notation (JSON) representation according to RFC 4627.

FILE:READJSON is the complement of the FILE:WRITEJSON operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| filename | string |  | Filename/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a; predicate: no-result-propagation

## file:write — Write file

FILE:WRITE writes content to a file.

If the file does not exist, it will implicitly be created. Otherwise, the existing file is overwritten.

FILE:WRITE is the complement of the FILE:READ operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| filename | string |  | Filename/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<file:write filename="./test/ixml.inc">iXML</file:write>

<output>
	<file:read filename="./test/ixml.inc"/>
</output>

<!-- iXML -->
```

## file:writecsv — Write CSV file

FILE:WRITECSV writes a multidimensional array as comma-separated values to a file.

Comma-separated values represent tabular data. Each line corresponds to a row in the table. Within a line, fields are separated by a delimiter, each field belonging to one table column.

FILE:WRITECSV is the complement of the FILE:READCSV operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| filename | string |  | Filename/URL |
| delimiter | string | ; | Delimiter (single ASCII character) |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## file:writejson — Write JSON file

FILE:WRITEJSON writes the JavaScript Object Notation (JSON) representation of the value of a variable according to RFC 4627 to a file.

FILE:WRITEJSON is the complement of the FILE:READJSON operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |
| filename | string |  | Filename/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## file:append — Append file

FILE:APPEND appends content to a file.

If the file does not exist, it will implicitly be created.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| filename | string |  | Filename/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<file:write filename="./test/ixml.inc">i</file:write>
<file:append filename="./test/ixml.inc">XML</file:append>

<output>
	<file:read filename="./test/ixml.inc"/>
</output>

<!-- iXML -->
```

## file:delete — Delete file

FILE:DELETE deletes a file.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| filename | string |  | Filename/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<file:delete filename="./test/ixml.inc"/>
```

## file:send — Send file (ZeyOS)

FILE:SEND sends a file to the client.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| filename | string |  | Filename/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<file:send filename="./test/ixml.inc"/>
```

## file:rename — Rename file

FILE:RENAME renames/moves a file or directory from an old filename to a new filename.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| oldname | string |  | Old filename/URL |
| newname | string |  | New filename/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<file:write filename="./test/ixml_old.inc">iXML</file:write>

<file:rename oldname="./test/ixml_old.inc" newname="./test/ixml.inc"/>
```

## file:link — Create symbolic link

FILE:LINK creates a symbolic link to a target name.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| linkname | string |  | Link name |
| targetname | string |  | Target name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<file:exists var="exists" filename="./test/ixml_link.inc"/>

<if value1="$exists" func="!=" value2="">
	<file:delete filename="./test/ixml_link.inc"/>
</if>

<file:link linkname="./test/ixml_link.inc" targetname="./test/ixml.inc"/>
```

## file:listdir — List directory

FILE:LISTDIR lists the filenames of all files within a directory.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| dirname | string |  | Directory name/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<file:listdir var="files" dirname="./test"/>

<foreach var="files" var_value="filename">
	<if value1="$filename" func="$" value2=".inc">
		<output>$filename&n;</output>
	</if>
</foreach>

<!--
ixml.inc
ixml_link.inc
-->
```

## file:makedir — Make directory

FILE:MAKEDIR makes a new directory.

The directory path is created recursively as paternal directories are implicitly created if they do not yet exist.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| dirname | string |  | Directory name/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<file:makedir dirname="./test/ixml_dir"/>
```

## file:removedir — Remove directory

FILE:REMOVEDIR removes an empty directory.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| dirname | string |  | Directory name/URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<file:removedir dirname="./test/ixml_dir"/>
```

## file:glob — Pathname pattern expansion

FILE:GLOB finds all pathnames matching a given pattern based on wildcard characters ('?', '*' and '[...]').

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| pattern | string |  | Pattern |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<file:glob var="files" pattern="./test/*.inc"/>

<foreach var="files" var_value="filename">
	<output>$filename&n;</output>
</foreach>

<!--
./test/ixml.inc
./test/ixml_link.inc
-->
```

---

# iXML — zip (ZIP)

## Spec
- /__doc/ixmldoc.xml

## zip:archive — Archive

ZIP:ARCHIVE creates or opens an existing archive for reading and writing.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| filename | string |  | Filename |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## zip:exists — Exists entry

ZIP:EXISTS checks whether an entry exists within an archive.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| filename | string |  | Filename |

### Children
- (none)

### Parents
- zip:archive

### Result
- binding: var; type: bool

## zip:status — Entry status

ZIP:STATUS returns the status of an entry within an archive.

ZIP:STATUS returns an array comprised of the following items:

				Key         Description
				--------------------------------------------------------
				name        filename
				index       index
				crc         32-bit cyclic redundancy checksum polynomial
				size        size in bytes
				mtime       time of last modification (Unix timestamp)
				comp_size   compressed size in bytes
				comp_method compression method

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| filename | string |  | Filename |

### Children
- (none)

### Parents
- zip:archive

### Result
- binding: var; type: n/a; predicate: no-result-propagation

## zip:read — Read entry

ZIP:READ reads the entire content of an entry within an archive.

ZIP:READ is the complement of the ZIP:WRITE operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| filename | string |  | Filename |

### Children
- (none)

### Parents
- zip:archive

### Result
- binding: var; type: string

## zip:write — Write entry

ZIP:WRITE writes content to an entry within an archive.

If the entry does not exist within the archive, it will implicitly be created. Otherwise, the existing entry is overwritten.

ZIP:WRITE is the complement of the ZIP:READ operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| filename | string |  | Filename |

### Children
- (none)

### Parents
- zip:archive

### Result
- (none documented)

## zip:delete — Delete entry

ZIP:DELETE deletes an entry within an archive.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| filename | string |  | Filename |

### Children
- (none)

### Parents
- zip:archive

### Result
- (none documented)

## zip:rename — Rename entry

ZIP:RENAME renames an entry within an archive from an old filename to a new filename.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| oldname | string |  | Old filename |
| newname | string |  | New filename |

### Children
- (none)

### Parents
- zip:archive

### Result
- (none documented)

## zip:list — List entries

ZIP:LIST lists the filenames of all entries within an archive.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- zip:archive

### Result
- binding: var; type: array; predicate: no-result-propagation

---

# iXML — db (Database)

## Spec
- /__doc/ixmldoc.xml

## db:connection — Connection

DB:CONNECTION establishes a database connection.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| server | string |  | Server |
| dbname | string |  | Database name |
| username | string |  | Username |
| password | string |  | Password |
| type | type | pgsql | Database type |

#### Possible values
Possible values for `type`:
- mysql — MySQL
- pgsql — PostgreSQL


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## db:run — Run query

DB:RUN executes an arbitrary SQL statement and retrieves the accordant result set from the database.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for retrieved result set |
| type | type | num | Result set type |

#### Possible values
Possible values for `type`:
- num — Multidimensional array with consecutive numeric keys
- assoc — Multidimensional array with field names as keys
- list — Unidimensional list
- av — Unidimensional array with associated attribute and value pairs
- single — Single array item with consecutive numeric keys
- self — Single array item with field names as keys
- value — Single value


### Children
- (none)

### Parents
- db:connection

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<db:run var="data" type="assoc">
	SELECT * FROM "contacts"
</db:run>
```

## db:prepare — Prepare query

DB:PREPARE prepares a database query. Arguments may be passed for identifier and literal substitution as parameters.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| var_params | var |  | Variable name for associated parameter name and value pairs |

### Children
- db:query (occurrence: single) — Query

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<output>
	<db:prepare>
		<param>ID</param>
		<param>contacts</param>
		<param>123</param>

		<db:query>
			<verbatim>SELECT $ FROM $ WHERE $0 = ?</verbatim>
		</db:query>
	</db:prepare>
</output>

<!-- SELECT "ID" FROM "contacts" WHERE "ID" = '123' -->
```

## db:get — Get object (ZeyOS)

DB:GET gets a database object, specified by entity and ID.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| var_fields | var |  | Variable name for field list |
| var_extdata | var |  | Variable name for associated extdata field name and value pairs |
| var_tags | var |  | Variable name for tag names |
| entity | string |  | Entity |
| id | int |  | ID |

### Children
- (none)

### Parents
- db:connection

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<db:get var="obj" entity="contacts" id="123"/>
<output>$obj.firstname $obj.lastname</output>
<!-- Bill Gates -->
```

```xml
<db:get var="obj" entity="contacts" id="123">
	<db:field>lastname</db:field>
</db:get>

<if value1="$obj.lastname" func="=" value2="Gates">
	<set var="obj.lastname">Jobs</set>
	<set var="obj.firstname">Steve</set>
</if>

<db:set entity="contacts" id="123" var_data="obj"/>
```

## db:field — Field

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| alias | string |  | Alias name |

### Children
- (none)

### Parents
- db:get
- db:fields

### Result
- (none documented)

## db:expression — Expression

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| alias | string |  | Alias name |

### Children
- (none)

### Parents
- db:get
- db:fields

### Result
- (none documented)

## db:set — Set object (ZeyOS)

DB:SET sets a database object, specified by entity and ID. ExtData and tags may optionally be set as one atomic operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for insert ID |
| var_data | var |  | Variable name for associated field name and value pairs |
| var_extdata | var |  | Variable name for associated extdata field name and value pairs |
| var_tags | var |  | Variable name for tag names (addition only) |
| entity | string |  | Entity |
| id | int | (new) | ID |

### Children
- (none)

### Parents
- db:connection

### Result
- binding: var; type: int

### Examples

```xml
<db:set entity="contacts">
	<db:data field="lastname">Gates</db:data>
	<db:data field="firstname">Bill</db:data>
</db:set>
```

```xml
<db:set entity="contacts" id="123">
	<db:data field="lastname">Jobs</db:data>
	<db:data field="firstname">Steve</db:data>
</db:set>
```

```xml
<db:get var="obj" entity="contacts" id="123">
	<db:field>lastname</db:field>
</db:get>

<if value1="$obj.lastname" func="=" value2="Gates">
	<set var="obj.lastname">Jobs</set>
	<set var="obj.firstname">Steve</set>
</if>

<db:set entity="contacts" id="123" var_data="obj"/>
```

```xml
<db:set entity="contacts">
	<db:data field="lastname">Gates</db:data>
	<db:data field="firstname">Bill</db:data>

	<extdata:data field="company">Microsoft</extdata:data>
	<extdata:data field="competitor">Apple</extdata:data>

	<tags:name>Friends</tags:name>
	<tags:name>A-Class</tags:name>
</db:set>
```

## db:data — Data

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| field | string |  | Field name |
| alias | string |  | Alias name |

### Children
- (none)

### Parents
- db:get
- db:set
- db:fields
- db:insert
- db:update

### Result
- (none documented)

## db:null — NULL

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| field | string |  | Field name |
| alias | string |  | Alias name |

### Children
- (none)

### Parents
- db:get
- db:set
- db:fields
- db:insert
- db:update

### Result
- (none documented)

## db:remove — Remove object (ZeyOS)

DB:REMOVE removes a database object, specified by entity and ID.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| entity | string |  | Entity |
| id | int |  | ID |

### Children
- (none)

### Parents
- db:connection

### Result
- (none documented)

### Examples

```xml
<db:remove entity="contacts" id="123"/>
```

## db:lookup — Lookup object (ZeyOS)

DB:LOOKUP looks up a database object and returns it's ID if applicable.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| entity | string |  | Entity |

### Children
- (none)

### Parents
- db:connection

### Result
- binding: var; type: n/a

### Examples

```xml
<db:lookup entity="contacts" var="id">
	<db:is field="lastname">Gates</db:is>
	<db:is field="firstname">Bill</db:is>
</db:lookup>

<if value1="$id" func="=" value2="">
	<output>Contact not found!</output>
</if>

<!-- Contact not found! -->
```

## db:select — Select rows

DB:SELECT generates and executes a SQL select statement and retrieves the accordant result set from the database.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for generated SQL statement |
| var_count | var |  | Result variable name for number of results |
| var_result | var |  | Result variable name for retrieved result set |
| type | type | num | Result set type |
| distinct | bool |  | Distinct result set |
| offset | int |  | Offset |
| limit | int | (no limit) | Limit |

#### Possible values
Possible values for `type`:
- num — Multidimensional array with consecutive numeric keys
- assoc — Multidimensional array with field names as keys
- list — Unidimensional list
- av — Unidimensional array with associated attribute and value pairs
- single — Single array item with consecutive numeric keys
- self — Single array item with field names as keys
- value — Single value


### Children
- db:fields (occurrence: single) — Fields
- db:table (occurrence: single) — Table
- db:join (occurrence: single) — Join clause
- db:groupby (occurrence: single) — Group by clause
- db:having (occurrence: single) — Having condition
- db:orderby (occurrence: single) — Order by clause

### Parents
- db:connection

### Result
- binding: var; type: string
- binding: var_count; type: int; predicate: no-result-propagation
- binding: var_result; type: array; predicate: no-result-propagation

## db:cross — Cross join

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| alias | string |  | Alias name |
| table | string |  | Table name |

### Children
- (none)

### Parents
- db:join

### Result
- (none documented)

## db:crosslateral — Lateral cross join

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| alias | string |  | Alias name |

### Children
- (none)

### Parents
- db:join

### Result
- (none documented)

## db:inner — Inner join

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| alias | string |  | Alias name |
| table | string |  | Table name |

### Children
- (none)

### Parents
- db:join

### Result
- (none documented)

## db:innerextdata — Inner join on ExtData (ZeyOS)

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| alias | string |  | Alias name |
| entity | string |  | Entity name |
| name | string |  | ExtData name |
| field | string |  | Field name |

### Children
- (none)

### Parents
- db:join

### Result
- (none documented)

## db:innertags — Inner join on tags (ZeyOS)

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| alias | string |  | Alias name |
| entity | string |  | Entity name |
| name | string |  | Tag name |
| field | string |  | Field name |

### Children
- (none)

### Parents
- db:join

### Result
- (none documented)

## db:left — Outer left join

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| alias | string |  | Alias name |
| table | string |  | Table name |

### Children
- (none)

### Parents
- db:join

### Result
- (none documented)

## db:leftlateral — Lateral left join

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| alias | string |  | Alias name |

### Children
- (none)

### Parents
- db:join

### Result
- (none documented)

## db:leftextdata — Outer left join on ExtData (ZeyOS)

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| alias | string |  | Alias name |
| entity | string |  | Entity name |
| name | string |  | ExtData name |
| field | string |  | Field name |

### Children
- (none)

### Parents
- db:join

### Result
- (none documented)

## db:lefttags — Outer left join on tags (ZeyOS)

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| alias | string |  | Alias name |
| entity | string |  | Entity name |
| name | string |  | Tag name |
| field | string |  | Field name |

### Children
- (none)

### Parents
- db:join

### Result
- (none documented)

## db:groupfield — Group by field

### Attributes
- (none)

### Children
- (none)

### Parents
- db:groupby

### Result
- (none documented)

## db:orderfield — Order by field

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| type | type | asc | Sorting type |

#### Possible values
Possible values for `type`:
- asc — Ascending
- desc — Descending


### Children
- (none)

### Parents
- db:orderby

### Result
- (none documented)

## db:and — And condition

### Attributes
- (none)

### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:or — Or condition

### Attributes
- (none)

### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:not — Not condition

### Attributes
- (none)

### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:is — Is condition

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| func | string | = | Comparison function |

#### Possible values
Possible values for `func`:
- = — Equals
- =* — Equals, case-insensitive
- != — Not equals
- <> — Not equals
- !=* — Not equals, case-insensitive
- <>* — Not equals, case-insensitive
- < — Less than
- <= — Less than or equal to
- > — Greater than
- >= — Greater than or equal to
- _ — Contains
- _* — Contains, case-insensitive
- !_ — Not contains
- !_* — Not contains, case-insensitive
- ^ — Starts with
- ^* — Starts with, case-insensitive
- !^ — Not starts with
- !^* — Not starts with, case-insensitive
- $ — Ends with
- $* — Ends with, case-insensitive
- !$ — Not ends with
- !$* — Not ends with, case-insensitive
- ~ — Matches regular expression
- ~* — Matches regular expression, case-insensitive
- !~ — Not matches regular expression
- !~* — Not matches regular expression, case-insensitive
- ~~ — Is like
- ~~* — Is like, case-insensitive
- !~~ — Is not like
- !~~* — Is not like, case-insensitive


### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:isnull — Is NULL condition

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| field | string |  | Field name |

### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:isnotnull — Is not NULL condition

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| field | string |  | Field name |

### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:exists — Exists condition

### Attributes
- (none)

### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:notexists — Not exists condition

### Attributes
- (none)

### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:in — In condition

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name for static value list |
| field | string |  | Field name |

### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:notin — Not in condition

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name for static value list |
| field | string |  | Field name |

### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:intags — In tags condition (ZeyOS)

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name for static tag names list |
| entity | string |  | Entity name |
| field | string |  | Field name |

### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:any — Any condition

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| field | string |  | Field name |
| func | string | = | Comparison function |

#### Possible values
Possible values for `func`:
- = — Equals
- != — Not equals
- <> — Not equals
- < — Less than
- <= — Less than or equal to
- > — Greater than
- >= — Greater than or equal to


### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:all — All condition

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| field | string |  | Field name |
| func | string | = | Comparison function |

#### Possible values
Possible values for `func`:
- = — Equals
- != — Not equals
- <> — Not equals
- < — Less than
- <= — Less than or equal to
- > — Greater than
- >= — Greater than or equal to


### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:search — Search condition

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name for field list |
| query | string |  | Query |

### Children
- (none)

### Parents
- db:lookup
- db:select
- db:inner
- db:innerextdata
- db:innertags
- db:left
- db:leftextdata
- db:lefttags
- db:having
- db:update
- db:delete

### Result
- (none documented)

## db:searchfield — Search field

### Attributes
- (none)

### Children
- (none)

### Parents
- db:search

### Result
- (none documented)

## db:insert — Insert row

DB:INSERT executes a SQL/DML insert statement that inserts a new row into a table within the database.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for insert ID |
| var_data | var |  | Variable name for associated field name and value pairs |
| table | string |  | Table name |

### Children
- (none)

### Parents
- db:connection

### Result
- binding: var; type: int

## db:update — Update rows

DB:UPDATE executes a SQL/DML update statement that updates fields of existing rows in a table within the database.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var_data | var |  | Variable name for associated field name and value pairs |
| table | string |  | Table name |

### Children
- (none)

### Parents
- db:connection

### Result
- (none documented)

## db:delete — Delete rows

DB:DELETE executes a SQL/DML delete statement that deletes rows from a table within the database.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| table | string |  | Table name |

### Children
- (none)

### Parents
- db:connection

### Result
- (none documented)

## db:transaction — Transaction

DB:TRANSACTION specifies a transaction block for database and binary data store operations, ensuring that such processes leave the database and the binary data store in a consistent state even if an error occures within the transaction.

Transactions provide an all-or-nothing proposition, stating that each work-unit performed within a transaction must either complete in its entirety or have no effect whatsoever.

### Attributes
- (none)

### Children
- (none)

### Parents
- db:connection

### Result
- (none documented)

### Examples

```xml
<db:set entity="contacts" id="123" var_data="obj"/>

<try>
	<db:transaction>
		<db:set entity="contacts" id="123">
			<db:data field="lastname">New</db:data>
		</db:set>

		<error/>
	</db:transaction>

	<catch/>
</try>

<db:get var="obj" entity="contacts" id="123">
	<db:field>lastname</db:field>
</db:get>

<output>$obj.lastname</output>

<!-- Old -->
```

---

# iXML — extdata (ExtData (ZeyOS))

## Spec
- /__doc/ixmldoc.xml

## extdata:get — Get ExtData

EXTDATA:GET gets the ExtData of an object, specified by entity and ID.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| var_fields | var |  | Variable name for field list |
| entity | string |  | Entity |
| id | int |  | ID |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<extdata:get var="obj" entity="contacts" id="123"/>
<output>$obj.competitor</output>
<!-- Steve Jobs -->
```

```xml
<extdata:get var="obj" entity="contacts" id="123">
	<extdata:field>company</extdata:field>
</extdata:get>

<if value1="$obj.company" func="=" value2="Microsoft">
	<set var="obj.competitor">Apple</set>
</if>

<extdata:set entity="contacts" id="123" var_data="obj"/>
```

## extdata:set — Set ExtData

EXTDATA:SET sets the ExtData of an object, specified by entity and ID.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var_data | var |  | Variable name for associated field name and value pairs |
| entity | string |  | Entity |
| id | int |  | ID |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<extdata:set entity="contacts" id="123">
	<extdata:data field="company">Microsoft</extdata:data>
	<extdata:data field="competitor">Apple</extdata:data>
</extdata:set>
```

```xml
<extdata:get var="obj" entity="contacts" id="123">
	<extdata:field>company</extdata:field>
</extdata:get>

<if value1="$obj.company" func="=" value2="Microsoft">
	<set var="obj.competitor">Apple</set>
</if>

<extdata:set entity="contacts" id="123" var_data="obj"/>
```

## extdata:unset — Unset ExtData

EXTDATA:UNSET unsets the ExtData of an object, specified by entity and ID.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var_fields | var |  | Variable name for field list |
| entity | string |  | Entity |
| id | int |  | ID |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<extdata:unset entity="contacts" id="123">
	<extdata:field>company</extdata:field>
	<extdata:field>competitor</extdata:field>
</extdata:unset>
```

## extdata:field — Field

### Attributes
- (none)

### Children
- (none)

### Parents
- extdata:get
- extdata:unset

### Result
- (none documented)

## extdata:data — Data

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| field | string |  | Field name |

### Children
- (none)

### Parents
- extdata:set
- db:set

### Result
- (none documented)

## extdata:null — NULL

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| field | string |  | Field name |

### Children
- (none)

### Parents
- extdata:set
- db:set

### Result
- (none documented)

---

# iXML — tags (Tags (ZeyOS))

## Spec
- /__doc/ixmldoc.xml

## tags:exists — Exists any tags

TAGS:EXISTS checks whether any tag exists for an object, specified by entity and ID.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| var_names | var |  | Variable name for tag names |
| entity | string |  | Entity |
| id | int |  | ID |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: bool

## tags:list — List tags

TAGS:LIST lists the tag names of an object, specified by entity and ID.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| var_names | var |  | Variable name for tag names |
| entity | string |  | Entity |
| id | int |  | ID |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<tags:list var="tags" entity="contacts" id="123"/>
<output>$tags[0]</output>
<!-- Friends -->
```

## tags:add — Add tags

TAGS:ADD adds tags to an object, specified by entity and ID.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var_names | var |  | Variable name for tag names |
| entity | string |  | Entity |
| id | int |  | ID |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<tags:add entity="contacts" id="123">
	<tags:name>Friends</tags:name>
	<tags:name>A-Class</tags:name>
</tags:add>
```

## tags:remove — Remove tags

TAGS:REMOVE removes tags from an object, specified by entity and ID.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var_names | var |  | Variable name for tag names |
| entity | string |  | Entity |
| id | int |  | ID |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<tags:remove entity="contacts" id="123">
	<tags:name>Friends</tags:name>
	<tags:name>A-Class</tags:name>
</tags:remove>
```

## tags:reset — Reset tags

TAGS:RESET removes all existing tags from and adds new tags to an object, specified by entity and ID.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var_names | var |  | Variable name for tag names |
| entity | string |  | Entity |
| id | int |  | ID |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<tags:reset entity="contacts" id="123">
	<tags:name>Friends</tags:name>
	<tags:name>A-Class</tags:name>
</tags:reset>
```

## tags:name — Name

### Attributes
- (none)

### Children
- (none)

### Parents
- tags:exists
- tags:list
- tags:add
- tags:remove
- tags:reset
- db:intags
- db:set

### Result
- (none documented)

---

# iXML — bin (Binary data store (ZeyOS))

## Spec
- /__doc/ixmldoc.xml

## bin:read — Read binary data file

BIN:READ reads the entire content of a binary data file.

BIN:READ is the complement of the BIN:WRITE operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| id | int |  | ID |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<bin:write var="id">iXML</bin:write>

<output>
	<bin:read id="$id"/>
</output>

<!-- iXML -->
```

## bin:write — Write binary data file

BIN:WRITE writes content to a binary data file and returns its identifier.

BIN:WRITE is the complement of the BIN:READ operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<bin:write var="id">iXML</bin:write>

<output>
	<bin:read id="$id"/>
</output>

<!-- iXML -->
```

---

# iXML — temp (Temporary data store (ZeyOS))

## Spec
- /__doc/ixmldoc.xml

## temp:path — Path of temporary data file

TEMP:PATH returns the path of a temporary data file.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| id | string |  | Identifier |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

## temp:read — Read temporary data file

TEMP:READ reads the entire content of a temporary data file.

TEMP:READ is the complement of the TEMP:WRITE operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| var_struct | var |  | Result variable name for structural value |
| id | string |  | Identifier |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string
- binding: var_struct; type: n/a

### Examples

```xml
<temp:write var="id">iXML</temp:write>

<output>
	<temp:read id="$id"/>
</output>

<!-- iXML -->
```

## temp:write — Write temporary data file

TEMP:WRITE writes content to a temporary data file and returns its identifier.

If the identifier is omitted, it will implicitly be generated. If the temporary data file does not exist, it will implicitly be created. Otherwise, the existing temporary data file is overwritten.

TEMP:WRITE is the complement of the TEMP:READ operation.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| var_struct | var |  | Variable name for structural value |
| id | string | (new) | Identifier |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<temp:write var="id">iXML</temp:write>

<output>
	<temp:read id="$id"/>
</output>

<!-- iXML -->
```

## temp:delete — Delete temporary data file

TEMP:DELETE deletes a temporary data file.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| id | string |  | Identifier |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<temp:delete id="123"/>
```

---

# iXML — mail (Mail (ZeyOS))

## Spec
- /__doc/ixmldoc.xml

## mail:parse — Parse message

MAIL:PARSE parses the raw format of an e-mail message according to RFC 2822.

MAIL:PARSE returns an array comprised of the following items:

				Key               Description
				---------------------------------------------------
				date              date (Unix timestamp)
				subject           subject
				sender            sender
				sender_email      e-mail address of sender
				sender_name       name of sender
				to                recipients
				to_email          e-mail address of first recipient
				to_name           name of first recipient
				to_count          total number of recipients
				cc                recipients of carbon copy
				bcc               recipients of blind carbon copy
				messageid         message ID
				referenceid       in-reply-to message ID
				receipt           receipt flag
				autoreply         autoreply flag
				spam              spam flag
				contenttype       content type
				text              text part *
				html              html part *
				attachments       attachment parts *
				simpletext        simple text
				simpleattachments simple attachments

				* Each part is an array comprised of the following items:

				Key         Description
				-------------------------------------
				contenttype content type
				encoding    content transfer encoding
				charset     character set
				boundary    boundary delimiter
				disposition content disposition
				filename    filename
				contentid   content ID
				rawheader   raw header
				rawbody     raw body

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

## mail:queue — Queue message

MAIL:QUEUE consignes an e-mail message to the mail sending queue.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for message ID |
| mailserver | int | (default system SMTP server) | Mail server ID |
| senddate | int | (do not send) | Send date |

### Children
- mail:header (occurrence: single) — Mail header
- mail:body (occurrence: single) — Mail body

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<mail:queue senddate="1262103817">
						<mail:header>
From: person@example.com
To: person@example.com
Date: Tue, 29 Dec 2009 17:23:37 +0100
Subject: This is the subject of the message
Content-Type: text/plain
						</mail:header>
						<mail:body>This is the body of the message.</mail:body>
					</mail:queue>
```

## mail:send — Send message

MAIL:SEND consignes an e-mail message to the mail sending queue and sends it immediately.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for message ID |
| mailserver | int | (default system SMTP server) | Mail server ID |

### Children
- mail:header (occurrence: single) — Mail header
- mail:body (occurrence: single) — Mail body

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<mail:send>
						<mail:header>
From: person@example.com
To: person@example.com
Date: Tue, 29 Dec 2009 17:23:37 +0100
Subject: This is the subject of the message
Content-Type: text/plain
						</mail:header>
						<mail:body>This is the body of the message.</mail:body>
					</mail:send>
```

## mail:multipart — Build multipart message

MAIL:MULTIPART builds a MIME multipart message body according to RFC 2046.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| boundary | string |  | Boundary delimiter |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<mail:multipart var="rawbody" boundary="boundary">
						<mail:part>
							<mail:header>Content-Type: text/plain</mail:header>
							<mail:body>This is the body of the message.</mail:body>
						</mail:part>

						<mail:part>
							<mail:header>
Content-Type: text/html
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="message.html"
							</mail:header>
							<mail:body>PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==</mail:body>
						</mail:part>
					</mail:multipart>

					<output>$rawbody</output>
```

## mail:part — Multipart message part

### Attributes
- (none)

### Children
- mail:header (occurrence: single) — Mail header
- mail:body (occurrence: single) — Mail body

### Parents
- mail:multipart

### Result
- (none documented)

## mail:quote — Quote header value

MAIL:QUOTE encodes a header value with MIME encoded-word syntax according to RFC 2047.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<output>
	<mail:quote>Header value with special characters such as äöü</mail:quote>
</output>

<!-- Header value with special characters such as =?UTF-8?Q?=C3=A4=C3=B6=C3=BC?= -->
```

---

# iXML — excel (Excel)

## Spec
- /__doc/ixmldoc.xml

## excel:workbook — Workbook

EXCEL:WORKBOOK creates or opens an existing Excel workbook.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| filename | string |  | Filename |
| title | string | (initial title) | Title |
| subject | string | (initial subject) | Subject |
| keywords | string | (initial keywords) | Keywords |
| format | type | (based on file) | File format |

#### Possible values
Possible values for `format`:
- csv — Comma-separated Values
- gnumeric — Gnome Gnumeric
- ods — Open Document Format for Office Applications (ODF)
- slk — Microsoft Multiplan Symbolic Link Interchange
- xls — Microsoft Excel Binary File Format (BIFF)
- xlsx — Microsoft Office Open XML SpreadsheetML
- xml — Microsoft Excel 2003 SpreadsheetML


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## excel:length — Length

EXCEL:LENGTH gets the number of sheets, rows and columns in context of the current position of the cell cursor.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var_sheets | var |  | Result variable name for number of sheets |
| var_rows | var |  | Result variable name for number of rows |
| var_cols | var |  | Result variable name for number of columns |

### Children
- (none)

### Parents
- excel:workbook

### Result
- binding: var_sheets; type: int; predicate: no-result-propagation
- binding: var_rows; type: int; predicate: no-result-propagation
- binding: var_cols; type: int; predicate: no-result-propagation

## excel:next — Next cell

EXCEL:NEXT shifts the position of the cell cursor by a given offset.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| offset_sheet | int |  | Sheet offset |
| offset_row | int |  | Row offset |
| offset_col | int | 1 | Column offset |

### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

## excel:getpos — Get position

EXCEL:GETPOS gets the current position of the cell cursor.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var_coords | var |  | Result variable name for cell coordinates |
| var_sheet | var |  | Result variable name for sheet index |
| var_row | var |  | Result variable name for row index |
| var_col | var |  | Result variable name for column index |

### Children
- (none)

### Parents
- excel:workbook

### Result
- binding: var_coords; type: string; predicate: no-result-propagation
- binding: var_sheet; type: int; predicate: no-result-propagation
- binding: var_row; type: int; predicate: no-result-propagation
- binding: var_col; type: int; predicate: no-result-propagation

## excel:setpos — Set position

EXCEL:SETPOS sets the position of the cell cursor by given indices or by given coordinates.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| sheet | int | (current sheet) | Sheet index |
| row | int | (current row) | Row index |
| col | int | (current column) | Column index |

### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

## excel:get — Get cell value

EXCEL:GET gets the cell value at the current position of the cell cursor or at given coordinates.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| coords | string | (current cell) | Cell coordinates |
| type | type | raw | Evaluation type |

#### Possible values
Possible values for `type`:
- raw — Raw
- calculated — Calculated
- formatted — Formatted


### Children
- (none)

### Parents
- excel:workbook

### Result
- binding: var; type: string

## excel:set — Set cell value

EXCEL:SET sets the cell value at the current position of the cell cursor or at given coordinates.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| coords | string | (current cell) | Cell coordinates |
| format | string | (preserve existing format) | Format |
| type | type | auto | Data type |

#### Possible values
Possible values for `type`:
- auto — Automatic recognition
- text — Text
- numeric — Numeric
- date — Date
- bool — Boolean
- null — NULL


### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

## excel:addsheet — Add sheet

EXCEL:ADDSHEET adds a new sheet.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| index | int | (current sheet) | Sheet index |

### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

## excel:removesheet — Remove sheet

EXCEL:REMOVESHEET removes a sheet.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| index | int | (current sheet) | Sheet index |

### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

## excel:addrow — Add row

EXCEL:ADDROW adds a new row.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| index | int | (current row) | Row index |
| height | float | (no specific height) | Height |

### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

## excel:removerow — Remove row

EXCEL:REMOVEROW removes a row.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| index | int | (current row) | Row index |

### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

## excel:addcol — Add column

EXCEL:ADDCOL adds a new column.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| index | int | (current column) | Column index |
| width | float | (no specific width) | Width |

### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

## excel:removecol — Remove column

EXCEL:REMOVECOL removes a column.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| index | int | (current column) | Column index |

### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

## excel:style — Style

EXCEL:STYLE applies style to a range of cells.

The given variable must be an array corresponding to the following structure (keys are case-insensitive):

				merge (range only)

				freeze (no range)

				heigth (no range)
				width (no range)

				collapseCol (no range)
				collapseRow (no range)

				outlineLevelCol (0-7) (no range)
				outlineLevelRow (0-7) (no range)

				font
					- name
					- bold
					- italic
					- superscript
					- subscript
					- underline: none, double, doubleAccounting, single, singleAccounting
					- strikethrough
					- color
						- rgb
						- argb
					- size

				alignment
					- horizontal: general, left, right, center, centerContinuous, justify, fill, distributed
					- verical: bottom, top, center, justify, distributed
					- textRotation
					- wrapText
					- shrinkToFit
					- indent
					- readOrder: 0 (context), 1 (ltr), 2 (rtl)

				borders
					- allBorders, left, right, top, bottom, diagonal, outline, inside, horizontal, vertical
						- borderStyle: none, dashDot, dashDotDot, dashed, dotted, double, hair, medium, mediumDashDot, mediumDashDotDot, mediumDashed, slantDashDot, thick, thin
						- color
							- rgb
							- argb
					- diagonalDirection: 0 (none), 1 (up), 2 (down), 3 (both)

				fill
					- fillType: none, solid, linear, path, darkDown, darkGray, darkGrid, darkHorizontal, darkTrellis, darkVertical, gray0625, gray125, lightDown, lightGray, lightGrid, lightHorizontal, lightTrellis, lightUp, lightVertical, mediumGray
					- rotation
					- startColor
						- rgb
						- argb
					- endColor
						- rgb
						- argb
					- color
						- rgb
						- argb

				numberFormat
					- formatCode

				protection
					- locked: inherit, protected, unprotected
					- hidden: inherit, protected, unprotected

				quotePrefix

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name for associated style name and value pairs |

### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

## excel:autofilter — Auto filter

EXCEL:AUTOFILTER sets the auto filter for a range of cells.

### Attributes
- (none)

### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

## excel:array — To array

EXCEL:ARRAY extracts all cell values of a workbook into a multidimensional array.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| type | type | raw | Evaluation type |

#### Possible values
Possible values for `type`:
- raw — Raw
- calculated — Calculated
- formatted — Formatted


### Children
- (none)

### Parents
- excel:workbook

### Result
- binding: var; type: array; predicate: no-result-propagation

## excel:create — Create

EXCEL:CREATE generates an Excel workbook according to a given file format.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| format | type | xlsx | File format |

#### Possible values
Possible values for `format`:
- csv — Comma-separated Values
- ods — Open Document Format for Office Applications (ODF)
- xls — Microsoft Excel Binary File Format (BIFF)
- xlsx — Microsoft Office Open XML SpreadsheetML


### Children
- (none)

### Parents
- excel:workbook

### Result
- (none documented)

---

# iXML — pdf (PDF)

## Spec
- /__doc/ixmldoc.xml

## pdf:document — Document

PDF:DOCUMENT generates a PDF document that is comprised of multiple sections.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| author | string |  | Author |
| title | string |  | Title |
| subject | string |  | Subject |
| keywords | string |  | Keywords |
| pdfa | bool |  | PDF/A (version 3) |
| compress | bool |  | Compress |
| subsetting | bool |  | Font subsetting |
| unit | string | mm | Unit |
| zoom | string | default | Zoom |
| layout | string | SinglePage | Layout |
| mode | string | UseNone | Mode |

#### Possible values
Possible values for `unit`:
- mm — Millimeter
- cm — Centimeter
- in — Inch
- pt — Point

Possible values for `zoom`:
- fullpage — Full page on screen
- fullwidth — Maximum width of window
- real — Real size
- default — Viewer Default

Possible values for `layout`:
- SinglePage — One page at a time
- OneColumn — Pages in one column
- TwoColumnLeft — Pages in two columns, odd-numbered on the left
- TwoColumnRight — Pages in two columns, odd-numbered on the right
- TwoPageLeft — Two pages at a time, odd-numbered on the left (PDF 1.5)
- TwoPageRight — Two pages at a time, odd-numbered on the right (PDF 1.5)

Possible values for `mode`:
- UseNone — None
- UseOutlines — Document outline
- UseThumbs — Thumbnail images
- FullScreen — Fullscreen
- UseOC — Content group panel (PDF 1.5)
- UseAttachments — Attachments panel (PDF 1.6)


### Children
- pdf:signature (occurrence: single) — Signature

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

## pdf:file — Embedded file

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| filename | string |  | Filename |
| relationship | string |  | Relationship |
| description | string |  | Description |
| type | string |  | MIME Type |

#### Possible values
Possible values for `relationship`:
- An alternative version of the document — Alternative
- Additional data required to understand or process the document — Data
- Source material for the document — Source
- Supplementary to the document, but not essential — Supplement
- Relationship unclear or not explicitly defined — Unspecified


### Children
- (none)

### Parents
- pdf:document

### Result
- (none documented)

## pdf:section — Section

PDF:SECTION represents a thematic grouping of content, with a header, a footer and a body.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| orientation | string | P | Orientation |
| format | string | A4 | Format |
| height | float |  | Page height |
| width | float |  | Page width |
| leftmargin | float |  | Left margin |
| rightmargin | float |  | Right margin |
| topmargin | float |  | Top margin |
| bottommargin | float |  | Bottom margin |

#### Possible values
Possible values for `orientation`:
- P — Portrait
- L — Landscape

Possible values for `format`:
- A0 — A0
- A1 — A1
- A2 — A2
- A3 — A3
- A4 — A4
- A5 — A5
- A6 — A6
- A7 — A7
- A8 — A8
- A9 — A9
- A10 — A10
- A11 — A11
- A12 — A12
- B0 — B0
- B1 — B1
- B2 — B2
- B3 — B3
- B4 — B4
- B5 — B5
- B6 — B6
- B7 — B7
- B8 — B8
- B9 — B9
- B10 — B10
- B11 — B11
- B12 — B12
- C0 — C0
- C1 — C1
- C2 — C2
- C3 — C3
- C4 — C4
- C5 — C5
- C6 — C6
- C7 — C7
- C8 — C8
- C9 — C9
- C10 — C10
- C11 — C11
- C12 — C12
- C76 — C76
- DL — DL
- E0 — E0
- E1 — E1
- E2 — E2
- E3 — E3
- E4 — E4
- E5 — E5
- E6 — E6
- E7 — E7
- E8 — E8
- E9 — E9
- E10 — E10
- E11 — E11
- E12 — E12
- G0 — G0
- G1 — G1
- G2 — G2
- G3 — G3
- G4 — G4
- G5 — G5
- G6 — G6
- G7 — G7
- G8 — G8
- G9 — G9
- G10 — G10
- G11 — G11
- G12 — G12
- RA0 — RA0
- RA1 — RA1
- RA2 — RA2
- RA3 — RA3
- RA4 — RA4
- SRA0 — SRA0
- SRA1 — SRA1
- SRA2 — SRA2
- SRA3 — SRA3
- SRA4 — SRA4
- 4A0 — 4A0
- 2A0 — 2A0
- A2_EXTRA — A2_EXTRA
- A3+ — A3+
- A3_EXTRA — A3_EXTRA
- A3_SUPER — A3_SUPER
- SUPER_A3 — SUPER_A3
- A4_EXTRA — A4_EXTRA
- A4_SUPER — A4_SUPER
- SUPER_A4 — SUPER_A4
- A4_LONG — A4_LONG
- F4 — F4
- SO_B5_EXTRA — SO_B5_EXTRA
- A5_EXTRA — A5_EXTRA
- ANSI_E — ANSI_E
- ANSI_D — ANSI_D
- ANSI_C — ANSI_C
- ANSI_B — ANSI_B
- ANSI_A — ANSI_A
- USLEDGER — USLEDGER
- LEDGER — LEDGER
- ORGANIZERK — ORGANIZERK
- BIBLE — BIBLE
- USTABLOID — USTABLOID
- TABLOID — TABLOID
- ORGANIZERM — ORGANIZERM
- USLETTER — USLETTER
- LETTER — LETTER
- USLEGAL — USLEGAL
- LEGAL — LEGAL
- GOVERNMENTLETTER — GOVERNMENTLETTER
- GLETTER — GLETTER
- JUNIORLEGAL — JUNIORLEGAL
- JLEGAL — JLEGAL
- QUADDEMY — QUADDEMY
- SUPER_B — SUPER_B
- QUARTO — QUARTO
- GOVERNMENTLEGAL — GOVERNMENTLEGAL
- FOLIO — FOLIO
- MONARCH — MONARCH
- EXECUTIVE — EXECUTIVE
- ORGANIZERL — ORGANIZERL
- STATEMENT — STATEMENT
- MEMO — MEMO
- FOOLSCAP — FOOLSCAP
- COMPACT — COMPACT
- ORGANIZERJ — ORGANIZERJ
- P1 — P1
- P2 — P2
- P3 — P3
- P4 — P4
- P5 — P5
- P6 — P6
- ARCH_E — ARCH_E
- ARCH_E1 — ARCH_E1
- ARCH_D — ARCH_D
- BROADSHEET — BROADSHEET
- ARCH_C — ARCH_C
- ARCH_B — ARCH_B
- ARCH_A — ARCH_A
- ANNENV_A2 — ANNENV_A2
- ANNENV_A6 — ANNENV_A6
- ANNENV_A7 — ANNENV_A7
- ANNENV_A8 — ANNENV_A8
- ANNENV_A10 — ANNENV_A10
- ANNENV_SLIM — ANNENV_SLIM
- COMMENV_N6_1/4 — COMMENV_N6_1/4
- COMMENV_N6_3/4 — COMMENV_N6_3/4
- COMMENV_N8 — COMMENV_N8
- COMMENV_N9 — COMMENV_N9
- COMMENV_N10 — COMMENV_N10
- COMMENV_N11 — COMMENV_N11
- COMMENV_N12 — COMMENV_N12
- COMMENV_N14 — COMMENV_N14
- CATENV_N1 — CATENV_N1
- CATENV_N1_3/4 — CATENV_N1_3/4
- CATENV_N2 — CATENV_N2
- CATENV_N3 — CATENV_N3
- CATENV_N6 — CATENV_N6
- CATENV_N7 — CATENV_N7
- CATENV_N8 — CATENV_N8
- CATENV_N9_1/2 — CATENV_N9_1/2
- CATENV_N9_3/4 — CATENV_N9_3/4
- CATENV_N10_1/2 — CATENV_N10_1/2
- CATENV_N12_1/2 — CATENV_N12_1/2
- CATENV_N13_1/2 — CATENV_N13_1/2
- CATENV_N14_1/4 — CATENV_N14_1/4
- CATENV_N14_1/2 — CATENV_N14_1/2
- JIS_B0 — JIS_B0
- JIS_B1 — JIS_B1
- JIS_B2 — JIS_B2
- JIS_B3 — JIS_B3
- JIS_B4 — JIS_B4
- JIS_B5 — JIS_B5
- JIS_B6 — JIS_B6
- JIS_B7 — JIS_B7
- JIS_B8 — JIS_B8
- JIS_B9 — JIS_B9
- JIS_B10 — JIS_B10
- JIS_B11 — JIS_B11
- JIS_B12 — JIS_B12
- PA0 — PA0
- PA1 — PA1
- PA2 — PA2
- PA3 — PA3
- PA4 — PA4
- PA5 — PA5
- PA6 — PA6
- PA7 — PA7
- PA8 — PA8
- PA9 — PA9
- PA10 — PA10
- PASSPORT_PHOTO — PASSPORT_PHOTO
- E — E
- L — L
- 3R — 3R
- KG — KG
- 4R — 4R
- 4D — 4D
- 2L — 2L
- 5R — 5R
- 8P — 8P
- 6R — 6R
- 6P — 6P
- 8R — 8R
- 6PW — 6PW
- S8R — S8R
- 4P — 4P
- 10R — 10R
- 4PW — 4PW
- S10R — S10R
- 11R — 11R
- S11R — S11R
- 12R — 12R
- S12R — S12R
- NEWSPAPER_BROADSHEET — NEWSPAPER_BROADSHEET
- NEWSPAPER_BERLINER — NEWSPAPER_BERLINER
- NEWSPAPER_TABLOID — NEWSPAPER_TABLOID
- NEWSPAPER_COMPACT — NEWSPAPER_COMPACT
- CREDIT_CARD — CREDIT_CARD
- BUSINESS_CARD — BUSINESS_CARD
- BUSINESS_CARD_ISO7810 — BUSINESS_CARD_ISO7810
- BUSINESS_CARD_ISO216 — BUSINESS_CARD_ISO216
- BUSINESS_CARD_IT — BUSINESS_CARD_IT
- BUSINESS_CARD_UK — BUSINESS_CARD_UK
- BUSINESS_CARD_FR — BUSINESS_CARD_FR
- BUSINESS_CARD_DE — BUSINESS_CARD_DE
- BUSINESS_CARD_ES — BUSINESS_CARD_ES
- BUSINESS_CARD_CA — BUSINESS_CARD_CA
- BUSINESS_CARD_US — BUSINESS_CARD_US
- BUSINESS_CARD_JP — BUSINESS_CARD_JP
- BUSINESS_CARD_HK — BUSINESS_CARD_HK
- BUSINESS_CARD_AU — BUSINESS_CARD_AU
- BUSINESS_CARD_DK — BUSINESS_CARD_DK
- BUSINESS_CARD_SE — BUSINESS_CARD_SE
- BUSINESS_CARD_RU — BUSINESS_CARD_RU
- BUSINESS_CARD_CZ — BUSINESS_CARD_CZ
- BUSINESS_CARD_FI — BUSINESS_CARD_FI
- BUSINESS_CARD_HU — BUSINESS_CARD_HU
- BUSINESS_CARD_IL — BUSINESS_CARD_IL
- 4SHEET — 4SHEET
- 6SHEET — 6SHEET
- 12SHEET — 12SHEET
- 16SHEET — 16SHEET
- 32SHEET — 32SHEET
- 48SHEET — 48SHEET
- 64SHEET — 64SHEET
- 96SHEET — 96SHEET
- EN_EMPEROR — EN_EMPEROR
- EN_ANTIQUARIAN — EN_ANTIQUARIAN
- EN_GRAND_EAGLE — EN_GRAND_EAGLE
- EN_DOUBLE_ELEPHANT — EN_DOUBLE_ELEPHANT
- EN_ATLAS — EN_ATLAS
- EN_COLOMBIER — EN_COLOMBIER
- EN_ELEPHANT — EN_ELEPHANT
- EN_DOUBLE_DEMY — EN_DOUBLE_DEMY
- EN_IMPERIAL — EN_IMPERIAL
- EN_PRINCESS — EN_PRINCESS
- EN_CARTRIDGE — EN_CARTRIDGE
- EN_DOUBLE_LARGE_POST — EN_DOUBLE_LARGE_POST
- EN_ROYAL — EN_ROYAL
- EN_SHEET — EN_SHEET
- EN_HALF_POST — EN_HALF_POST
- EN_SUPER_ROYAL — EN_SUPER_ROYAL
- EN_DOUBLE_POST — EN_DOUBLE_POST
- EN_MEDIUM — EN_MEDIUM
- EN_DEMY — EN_DEMY
- EN_LARGE_POST — EN_LARGE_POST
- EN_COPY_DRAUGHT — EN_COPY_DRAUGHT
- EN_POST — EN_POST
- EN_CROWN — EN_CROWN
- EN_PINCHED_POST — EN_PINCHED_POST
- EN_BRIEF — EN_BRIEF
- EN_FOOLSCAP — EN_FOOLSCAP
- EN_SMALL_FOOLSCAP — EN_SMALL_FOOLSCAP
- EN_POTT — EN_POTT
- BE_GRAND_AIGLE — BE_GRAND_AIGLE
- BE_COLOMBIER — BE_COLOMBIER
- BE_DOUBLE_CARRE — BE_DOUBLE_CARRE
- BE_ELEPHANT — BE_ELEPHANT
- BE_PETIT_AIGLE — BE_PETIT_AIGLE
- BE_GRAND_JESUS — BE_GRAND_JESUS
- BE_JESUS — BE_JESUS
- BE_RAISIN — BE_RAISIN
- BE_GRAND_MEDIAN — BE_GRAND_MEDIAN
- BE_DOUBLE_POSTE — BE_DOUBLE_POSTE
- BE_COQUILLE — BE_COQUILLE
- BE_PETIT_MEDIAN — BE_PETIT_MEDIAN
- BE_RUCHE — BE_RUCHE
- BE_PROPATRIA — BE_PROPATRIA
- BE_LYS — BE_LYS
- BE_POT — BE_POT
- BE_ROSETTE — BE_ROSETTE
- FR_UNIVERS — FR_UNIVERS
- FR_DOUBLE_COLOMBIER — FR_DOUBLE_COLOMBIER
- FR_GRANDE_MONDE — FR_GRANDE_MONDE
- FR_DOUBLE_SOLEIL — FR_DOUBLE_SOLEIL
- FR_DOUBLE_JESUS — FR_DOUBLE_JESUS
- FR_GRAND_AIGLE — FR_GRAND_AIGLE
- FR_PETIT_AIGLE — FR_PETIT_AIGLE
- FR_DOUBLE_RAISIN — FR_DOUBLE_RAISIN
- FR_JOURNAL — FR_JOURNAL
- FR_COLOMBIER_AFFICHE — FR_COLOMBIER_AFFICHE
- FR_DOUBLE_CAVALIER — FR_DOUBLE_CAVALIER
- FR_CLOCHE — FR_CLOCHE
- FR_SOLEIL — FR_SOLEIL
- FR_DOUBLE_CARRE — FR_DOUBLE_CARRE
- FR_DOUBLE_COQUILLE — FR_DOUBLE_COQUILLE
- FR_JESUS — FR_JESUS
- FR_RAISIN — FR_RAISIN
- FR_CAVALIER — FR_CAVALIER
- FR_DOUBLE_COURONNE — FR_DOUBLE_COURONNE
- FR_CARRE — FR_CARRE
- FR_COQUILLE — FR_COQUILLE
- FR_DOUBLE_TELLIERE — FR_DOUBLE_TELLIERE
- FR_DOUBLE_CLOCHE — FR_DOUBLE_CLOCHE
- FR_DOUBLE_POT — FR_DOUBLE_POT
- FR_ECU — FR_ECU
- FR_COURONNE — FR_COURONNE
- FR_TELLIERE — FR_TELLIERE
- FR_POT — FR_POT


### Children
- pdf:templates (occurrence: single) — Templates
- pdf:header (occurrence: single) — Header
- pdf:footer (occurrence: single) — Footer
- pdf:body (occurrence: single) — Body

### Parents
- pdf:document

### Result
- (none documented)

## pdf:template — Template

PDF:TEMPLATE imports a page as a template.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| source | int | 1 | Source page number |
| target | int | (all pages) | Target page number |

### Children
- (none)

### Parents
- pdf:templates

### Result
- (none documented)

## pdf:style — Style

PDF:STYLE defines the style for its content.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| align | string | (parent style, initially L) | Horizontal alignment |
| valign | string | (parent style) | Vertical alignment |
| dir | string | (parent style, initially LTR) | Text direction |
| font | string | (parent style, initially arial) | Font family |
| fontstyle | string | (parent style) | Font style |
| fontsize | float | (parent style, initially 12) | Font size (pt) |
| fontspace | float | (parent style) | Font spacing |
| fontstretch | int | (parent style, initially 100) | Font stretching (%) |
| bgcolor | string | (parent style) | Background color |
| textcolor | string | (parent style, initially #000) | Text color |
| border | string | (parent style) | Border |
| borderwidth | float | (parent style) | Border width |
| bordercolor | string | (parent style, initially #000) | Border color |
| lineheight | float | (parent style) | Line height |
| padding | float | (parent style) | Padding |
| rotate | int | (parent style) | Rotate (degrees) |

#### Possible values
Possible values for `align`:
- L — Left
- C — Center
- R — Right
- J — Justify

Possible values for `valign`:
- T — Top
- M — Middle
- B — Bottom

Possible values for `dir`:
- LTR — Left-to-right
- RTL — Right-to-left

Possible values for `font`:
- arial — Arial
- serif — Serif
- sans — Sans-serif
- mono — Monospace

Possible values for `fontstyle`:
- B — Bold
- I — Italic
- U — Underline
- O — Overline
- D — Line-through

Possible values for `border`:
- L — Left
- R — Right
- T — Top
- B — Bottom


### Children
- (none)

### Parents
- pdf:header
- pdf:footer
- pdf:body

### Result
- (none documented)

## pdf:linebreak — Line break

PDF:LINEBREAK adds a new line and shifts the ordinate by a given offset.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| offset | float |  | Offset |

### Children
- (none)

### Parents
- pdf:header
- pdf:footer
- pdf:body

### Result
- (none documented)

## pdf:pagebreak — Page break

PDF:PAGEBREAK adds a new page and shifts the ordinate to a given offset.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| offset | float |  | Offset |

### Children
- (none)

### Parents
- pdf:header
- pdf:footer
- pdf:body

### Result
- (none documented)

## pdf:inline — Inline text

PDF:INLINE prints text as flow content.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| html | bool |  | HTML content |
| leftmargin | float |  | Left margin |
| rightmargin | float |  | Right margin |
| x | float | (current abscissa) | Abscissa |
| y | float | (current ordinate) | Ordinate |

### Children
- (none)

### Parents
- pdf:header
- pdf:footer
- pdf:body

### Result
- (none documented)

## pdf:block — Block text

PDF:BLOCK prints a block of text as sectioning content.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| html | bool |  | HTML content |
| nowrap | bool |  | No text wrapping |
| height | float |  | Minimum Height |
| width | float | (expands to right margin) | Width |
| leftmargin | float |  | Left margin |
| rightmargin | float |  | Right margin |
| x | float | (current abscissa) | Abscissa |
| y | float | (current ordinate) | Ordinate |

### Children
- (none)

### Parents
- pdf:header
- pdf:footer
- pdf:body

### Result
- (none documented)

## pdf:row — Row

PDF:ROW prints a row of text columns as tabular content.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| leftmargin | float |  | Left margin |
| rightmargin | float |  | Right margin |
| x | float | (current abscissa) | Abscissa |
| y | float | (current ordinate) | Ordinate |

### Children
- (none)

### Parents
- pdf:header
- pdf:footer
- pdf:body

### Result
- (none documented)

## pdf:col — Column

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| html | bool |  | HTML content |
| nowrap | bool |  | No text wrapping |
| height | float |  | Minimum Height |
| width | float | (expands to right margin) | Width |

### Children
- (none)

### Parents
- pdf:row

### Result
- (none documented)

## pdf:image — Image

PDF:IMAGE prints an image, specified by filename/URL.

If the type is omitted, it will implicitly be inferred from the filename extension component of the given filename.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| filename | string |  | Filename/URL |
| type | string | (filename extension) | Image type |
| dpi | int | 300 | Dots per inch |
| height | float | (image height) | Height |
| width | float | (image width) | Width |
| x | float | (current abscissa) | Abscissa |
| y | float | (current ordinate) | Ordinate |

### Children
- (none)

### Parents
- pdf:header
- pdf:footer
- pdf:body

### Result
- (none documented)

## pdf:barcode — Barcode

PDF:BARCODE prints a linear or matrix bar code according to a given type.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| type | string | C128 | Barcode type |
| height | float |  | Height |
| width | float | (expands to right margin) | Width |
| x | float | (current abscissa) | Abscissa |
| y | float | (current ordinate) | Ordinate |
| resolution | float | (default resolution) | Resolution |

#### Possible values
Possible values for `type`:
- C39 — CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9
- C39+ — CODE 39 + CHECKSUM
- C39E — CODE 39 EXTENDED
- C39E+ — CODE 39 EXTENDED + CHECKSUM
- C93 — CODE 93 - USS-93
- S25 — Standard 2 of 5
- S25+ — Standard 2 of 5 + CHECKSUM
- I25 — Interleaved 2 of 5
- I25+ — Interleaved 2 of 5 + CHECKSUM
- C128 — CODE 128
- C128A — CODE 128 A
- C128B — CODE 128 B
- C128C — CODE 128 C
- EAN2 — 2-Digits UPC-Based Extention
- EAN5 — 5-Digits UPC-Based Extention
- EAN8 — EAN 8
- EAN13 — EAN 13
- UPCA — UPC-A
- UPCE — UPC-E
- MSI — MSI (Variation of Plessey code)
- MSI+ — MSI + CHECKSUM
- POSTNET — POSTNET
- PLANET — PLANET
- RMS4CC — RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code)
- KIX — KIX (Klant index - Customer index)
- IMB — Intelligent Mail Barcode - Onecode - USPS-B-3200
- CODABAR — CODABAR
- CODE11 — CODE 11
- PHARMA — PHARMACODE
- PHARMA2T — PHARMACODE TWO-TRACKS
- DATAMATRIX — DATAMATRIX
- QRCODE — QR-CODE
- QRCODE,L — QR-CODE Low error correction
- QRCODE,M — QR-CODE Medium error correction
- QRCODE,Q — QR-CODE Better error correction
- QRCODE,H — QR-CODE Best error correction
- PDF417 — PDF417


### Children
- (none)

### Parents
- pdf:header
- pdf:footer
- pdf:body

### Result
- (none documented)

## pdf:include — Include document

PDF:INCLUDE imports and inserts select pages of an external PDF document, specified by filename/URL.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| filename | string |  | Filename/URL (local only) |
| from | int | 1 | From page number |
| to | int | (last page) | To page number |

### Children
- (none)

### Parents
- pdf:header
- pdf:footer
- pdf:body

### Result
- (none documented)

## pdf:getpos — Get position

PDF:GETPOS gets the current position.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var_page | var |  | Result variable name for page number |
| var_subpage | var |  | Result variable name for section page number |
| var_x | var |  | Result variable name for abscissa |
| var_y | var |  | Result variable name for ordinate |

### Children
- (none)

### Parents
- pdf:header
- pdf:footer
- pdf:body

### Result
- binding: var_page; type: int; predicate: no-result-propagation
- binding: var_subpage; type: int; predicate: no-result-propagation
- binding: var_x; type: float; predicate: no-result-propagation
- binding: var_y; type: float; predicate: no-result-propagation

## pdf:setpos — Set position

PDF:SETPOS sets the position.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| page | int | (current page) | Page number |
| x | float | (current abscissa) | Abscissa |
| y | float | (current ordinate) | Ordinate |

### Children
- (none)

### Parents
- pdf:header
- pdf:footer
- pdf:body

### Result
- (none documented)

---

# iXML — numformat (Number format (ZeyOS))

## Spec
- /__doc/ixmldoc.xml

## numformat:get — Get next number

NUMFORMAT:GET returns the next formatted number, specified by name.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for formatted number |
| name | string |  | Name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<numformat:get var="number" name="billing_invoicenum"/>
```

## numformat:inc — Increment counter

NUMFORMAT:INC increments and returns the counter of a formatted number, specified by name.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for new counter |
| name | string |  | Name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: int

### Examples

```xml
<numformat:inc name="billing_invoicenum"/>
```

## numformat:next — Get next number and increment counter

NUMFORMAT:NEXT returns the next formatted number and increments the counter, specified by name.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name for formatted number |
| name | string |  | Name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: string

### Examples

```xml
<numformat:next var="number" name="billing_invoicenum"/>
```

---

# iXML — auth (Authentication (ZeyOS))

## Spec
- /__doc/ixmldoc.xml

## auth:simple — Simple authentication

AUTH:SIMPLE authenticates a user by username and password.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| username | string |  | Username or e-mail address |
| password | string |  | Password |
| otp | string |  | OTP authentication code for 2FA (optional) |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a; predicate: no-result-propagation

---

# iXML — misc (Miscellaneous (ZeyOS))

## Spec
- /__doc/ixmldoc.xml

## session — Session information

SESSION returns information about the current browser session.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a; predicate: no-result-propagation

### Examples

```xml
<session var="session"/>
```

## config — Configuration information

CONFIG returns information about the system configuration.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

### Examples

```xml
<config var="config"/>
```

## resetcron — Reset cron scheduler

RESETCRON resets a cron scheduler.

### Attributes
- (none)

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## transitems — Initialize transaction items

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: array; predicate: no-result-propagation

## zymba:run — Run embedded Zymba

ZYMBA parses and executes Zymba code. Arguments may be passed to global Zymba variables as parameters.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Result variable name |
| var_params | var |  | Variable name for associated parameter name and value pairs |

### Children
- zymba:code (occurrence: single) — Code

### Parents
- (not restricted in the reference)

### Result
- binding: var; type: n/a

### Examples

```xml
<set var="name">iXML</set>

<output>
	<zymba:run>
		<param var="name"/>

		<zymba:code>return @name;</zymba:code>
	</zymba:run>
</output>

<!-- iXML -->
```

---

# iXML — form (Form (ZeyOS))

## Spec
- /__doc/ixmldoc.xml

## hbox — Horizontal box

HBOX represents a set of form controls horizontally aligned like tabular columns.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| align | string |  | Content alignment (CSS) |
| height | string |  | Height (CSS) |
| width | string |  | Width (CSS) |
| padding | string |  | Padding (CSS) |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## vbox — Vertical box

VBOX represents a set of form controls vertically aligned like tabular rows.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| align | string |  | Content alignment (CSS) |
| height | string |  | Height (CSS) |
| width | string |  | Width (CSS) |
| padding | string |  | Padding (CSS) |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## placeholder — Placeholder

PALCEHOLDER represents an empty placeholder.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| height | string |  | Height (CSS) |
| width | string |  | Width (CSS) |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## title — Section title

TITLE represents a section title with a text that is displayed with an emphasized style.

### Attributes
- (none)

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## description — Description

DESCRIPTION represents a description with a text that is displayed with a normal style and is attached to a label.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| label | string |  | Label |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## link — Hyperlink

LINK represents a hyperlink with a text that links to an URL and is displayed with a normal style and is attached to a label.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| label | string |  | Label |
| url | string |  | URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## image — Image

IMAGE represents an image that optionally links to an URL and is attached to a label.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| label | string |  | Label |
| caption | string |  | Caption |
| url | string |  | URL |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## rule — Horizontal rule

RULE represents a horizontal rule to be used as a thematic break.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| width | string |  | Width (CSS) |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## checkbox — Check box

CHECKBOX represents a two-state form control that displays the checkedness of a data element and is attached to a label.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| id | var |  | Identifier |
| label | string |  | Label |
| caption | string |  | Caption |
| selected | bool |  | Initially selected |
| disabled | bool |  | Disabled |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## listbox — List box

LISTBOX represents a form control for selecting one or multiple data element among a set of unique options that are displayed as a list of items and are attached to a label.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| id | var |  | Identifier |
| label | string |  | Label |
| disabled | bool |  | Disabled |
| required | bool |  | Required |
| width | string |  | Width (CSS) |
| type | type | single | Input type |

#### Possible values
Possible values for `type`:
- single — Single select list
- multi — Multiple check list


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## listitem — List item

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| caption | string | (same as value) | Caption |
| selected | bool |  | Initially selected |

### Children
- (none)

### Parents
- listbox

### Result
- (none documented)

## entitybox — Entity box

ENTITYBOX represents a form control for selecting an object ID among a set of entity related objects that are displayed as a list of items and are attached to a label.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| id | var |  | Identifier |
| entity | string |  | Entity |
| tag | string |  | Tag filter |
| label | string |  | Label |
| caption | string |  | Caption |
| disabled | bool |  | Disabled |
| required | bool |  | Required |
| placeholder | string |  | Placeholder |
| width | string |  | Width (CSS) |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## textbox — Text box

TEXTBOX represents a form control for editing a data element that is displayed according to a given input type and is attached to a label.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| id | var |  | Identifier |
| label | string |  | Label |
| caption | string | (type dependent) | Caption |
| disabled | bool |  | Disabled |
| required | bool |  | Required |
| readonly | bool |  | Read-only |
| placeholder | string |  | Placeholder |
| width | string |  | Width (CSS) |
| type | type | single | Input type |

#### Possible values
Possible values for `type`:
- single — Single text line
- multi — Multiple text lines
- html — HTML code
- email — E-Mail address
- url — URL
- tel — Telephone number
- password — Password
- count — Count
- num — Number
- percent — Percent
- rate — Rate (in %)
- progress — Progress (in %)
- money — Money
- price — Price
- pricebilling — Price (Billing)
- priceprocurement — Price (Procurement)
- priceproduction — Price (Production)
- size — Size (in bytes)
- weight — Weight (in kg)
- duration — Duration (in minutes)
- date — Date
- datetime — Date and time
- country — Country code (ISO 3166-1 alpha-2)
- currency — Currency code (ISO 4217)
- unit — Unit code (UN/CEFACT Recommendation 20)


### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

## textbox — Text box

CUSTOMBOX represents a form control for editing a data element based on a ZeyOS custom field and is attached to a label.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| id | var |  | Custom field identifier |
| label | string | (custom field name) | Label |
| caption | string | (custom field type dependent) | Caption |
| disabled | bool |  | Disabled |
| required | bool |  | Required |
| readonly | bool |  | Read-only |
| placeholder | string |  | Placeholder |
| width | string |  | Width (CSS) |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

---

# iXML — debug (Debug)

## Spec
- /__doc/ixmldoc.xml

## debug:output — Output to debug console

DEBUG:OUTPUT outputs a value to the debug console.

### Attributes
- (none)

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<debug:output>An error has occurred!</debug:output>
```

## debug:dump — Dump variables to debug console

DEBUG:DUMP dumps human-readable information about all variables or only one specific variable to the debug console. Arrays are thereby explored recursively with values indented to show structure.

### Attributes
| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| var | var |  | Variable name |

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<debug:dump/>
```

## debug:log — Write to debug log

DEBUG:LOG writes a message to the debug log.

### Attributes
- (none)

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<debug:log>An error has occurred!</debug:log>
```

## debug:exclude — Exclude code

DEBUG:EXCLUDE excludes the embedded code from execution.

### Attributes
- (none)

### Children
- (none)

### Parents
- (not restricted in the reference)

### Result
- (none documented)

### Examples

```xml
<debug:exclude>
	<output>This will be parsed and validated but not executed!</output>
</debug:exclude>
```
