Serialization parameters define how XQuery items and XML nodes are textually output, i.e., ''serialized''.They have been formalized in This page is part of the [http://www.w3.org/TR/xslt-xquery-serialization-30 W3C [XQuery|XQuery Serialization 3.0Portal]] document.In BaseX, they can be specified in several ways:
* by using the <code>-s</code> flag of the BaseX [[Startup_Options#BaseX|command-line]] clientsSerialization parameters define how XQuery items and XML nodes will be ''serialized'' (i.e.,* by setting returned to the [[Options#Query options|SERIALIZER]] option before running a query,* by setting the [[Options#Query options|EXPORTER]] option before exporting a database,* by setting them via the [[JAX-RX_API#Query_Parameters|Output Parameter]] of the JAX-RX client or an API,* by including them usually in textual form). The official parameters are defined in the [[XQuery_3https://www.w3.0#org/TR/xslt-xquery-serialization-31 W3C XQuery Serialization|prolog of the XQuery expression]3.1] (since XQuery 3document.0)In BaseX, or* by specifying them in the XQuery function [[File_Functions#filethey can be:write|file:write()]].
==* included in the [[XQuery_3.0#Serialization|prolog of the XQuery expression]];* specified in XQuery functions ({{Function|File|file:write}}, {{Function|Database|db:export}}, [https://www.w3.org/TR/xpath-functions-31/#func-serialize fn:serialize()]);* specified in [[REST#Parameters==|REST query parameters]];* specified in [[RESTXQ#Output|RESTXQ output annotations]];* set via the {{Option|SERIALIZER}} option before running a query;* set via the {{Option|EXPORTER}} option before exporting a database; or* supplied with the {{Code|-s}} flag of the BaseX [[Command-Line Options#BaseX Standalone|command-line]] clients.
The following table gives a brief summary of all namespace for serialization parameters recognized by BaseX. For details, please refer is statically bound to official specificationthe {{Code|output}} prefix.This means that it need not (but may) be declared in the query prolog:
<pre lang='xquery'>declare namespace output = 'http://www.w3.org/2010/xslt-xquery-serialization';declare option output:method 'text';<xml>Hi there</xml></pre> Due to the wide range of ways how parameters can be supplied, we deliberately ignored one rule of the specification, which requires non-official features to be defined in a non-null namespace URI. In the following, we will indicate which features are specific to our implementation. =Standard Parameters= The following serialization parameters are supported by BaseX (further details can be looked up in the official specification): {| class="wikitablesortable" width="100%"
|- valign="top"
! width="140" | Parameter
! Description
! Allowed
! Default
! Examples
|- valign="top"
| <code>{{Code|method}}| Specifies the serialization method. {{Code|xml}}, {{Code|xhtml}}, {{Code|html}}, {{Code|text}} and {{Code|adaptive}} are part of the official specification. For more details on {{Code|basex}}, {{Code|csv}} and {{Code|json}}, see [[XQuery Extensions#Serialization|XQuery Extensions]].| {{Code|xml}}, {{Code|xhtml}}, {{Code|html}}, {{Code|text}}, {{Code|json}}, {{Code|adaptive}}, {{Code|csv}}, {{Code|basex}}| {{Code|basex}}|- valign="top"| {{Code|version</code>}}| Specifies the XML versionof the serialization method.| <code>xml/xhtml: {{Code|1.0}},{{Code|1.1}}<br/code>html: {{Code|4.0}}, {{Code|4.01}}, {{Code| 5.0}}<codebr/>| {{Code|1.0</code>}}|- valign="top"| {{Code|html-version}}| <code>Specifies the versionof the HTML serialization method.| {{Code|4.0}}, {{Code|4.01}}, {{Code|5.0}}| {{Code|4.0}}|- valign=1"top"| {{Code|item-separator}}| Determines a string to be used as item separator. If a separator is specified, the default separation of atomic values with single whitespaces will be skipped.0</code>| ''string''|
|- valign="top"
| <code>{{Code|encoding</code>}}
| Encoding to be used for outputting the data.
|''[https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html all encodings supported by Java]''| <code>{{Code|UTF-8</code>| <code>encoding=US-ASCII</code>}}
|- valign="top"
| <code>{{Code|indent</code>}}| Adjusts Adds leading whitespaces to make the output better more readable.| <code>{{Code|yes}},{{Code|no</code>}}| <code>yes</code>{{Code| <code>indent=no</code>}}
|- valign="top"
| <code>{{Code|cdata-section-elements</code>}}| List of elements to be output as CDATA, separated by whitespaces.<br />Example: <code>{{Code|<text><![CDATA[ <> ]]></text></code>}}| ''string''
|
| <code>cdata-section-elements=text</code>
|- valign="top"
| <code>{{Code|omit-xml-declaration</code>}}| Omits the XML declaration, which is serialized before the actual query result<br />Example: <code><?xml version="1.0" encoding="UTF-8"?></code>| <code>{{Code|yes}},{{Code|no</code>}}| <code>{{Code|yes</code>| <code>omit-xml-declaration=no</code>}}
|- valign="top"
| <code>{{Code|standalone</code>}}| Prints or omits the "{{Code|standalone" }} attribute in the XML declaration.| <code>{{Code|yes}},{{Code|no}},{{Code|omit</code>}}| <code>{{Code|omit</code>| <code>standalone=yes</code>}}
|- valign="top"
| <code>{{Code|doctype-system</code>}}| Introduces the output with a document type declaration and the given system identifier.<br />Example: <code>{{Code|<!DOCTYPE x SYSTEM "entities.dtd"></code>}}|''string''
|
| <code>doctype-system=entities.dtd</code>
|- valign="top"
| <code>{{Code|doctype-public</code>}}| If <code>{{Code|doctype-system</code> }} is specified, adds a public identifier.<br />Example: <code>{{Code|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<nowiki>http://www.w3.org/TR/html4/strict.dtd</nowiki>"></code>}}| ''string''
|
| <code>doctype-public=-//W3C//DTD HTML 4.01//EN,<br />doctype-system=http://www.w3.org/TR/html4/strict.dtd</code>
|- valign="top"
| <code>{{Code|undeclare-prefixes</code>}}
| Undeclares prefixes in XML 1.1.
| <code>{{Code|yes}},{{Code|no</code>}}| <code>{{Code|no</code>| <code>undeclare-prefixes=yes</code>}}
|- valign="top"
| <code>{{Code|normalization-form</code>}}| Specifies a normalization form. BaseX supports Form C (<code>{{Code|NFC</code>}}).| <code>{{Code|NFC}},{{Code|none</code>}}| <code>{{Code|NFC</code>| <code>normalization-form=none</code>}}
|- valign="top"
| <code>{{Code|media-type</code>}}
| Specifies the media type.
| ''string''| <code>{{Code|application/xml</code>| <code>media-type=text/plain</code>}}
|- valign="top"
| <code>{{Code|use-character-maps}}| Defines character mappings. If mappings are supplied as a single string, keys and values are separated by the equal sign, and multiple pairs are separated by commas. Separators that are to be defined as keys or values can be encoded as entities.<br/>Example: <code>A=alpha,B=beta</code>| Defines character mappings (not supported).''string''
|
|
|
|- valign="top"
| <code>{{Code|byte-order-mark</code>}}
| Prints a byte-order-mark before starting serialization.
| <code>{{Code|yes}},{{Code|no</code>}}| <code>{{Code|no</code>| <code>byte-order-mark=yes</code>}}
|- valign="top"
| <code>{{Code|escape-uri-attributes</code>}}| Escapes URI information in certain HTML attributes<br />Example: <code><a href="%C3%A4%C3%B6%C3%BC">äöü<a></code>| <code>{{Code|yes}},{{Code|no</code>}}| <code>{{Code|no</code>| <code>escape-uri-attributes=yes, method=html</code>}}
|- valign="top"
| <code>{{Code|include-content-type</code>}}| Includes Inserts a <code>{{Code|meta</code> }} content-type element into the head element if the result is output as HTML<br />Example: <code><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head></code>. The head element must already exist or nothing will be added. Any existing {{Code|meta}} content-type elements will be removed.| <code>{{Code|yes}},{{Code|no</code>}}| <code>no</code>{{Code| <code>include-content-type=yes, method=html</code>}}
|}
BaseX provides some additional, implementation-defined serialization parameters (<font color="orange">Version 6.5.1</font>):Query Prolog Parameters=
The following parameters can only be specified in the query prolog (see [https://www.w3.org/TR/xquery-31/#id-serialization XQuery: Specification] for more details and examples): {| class="wikitablesortable" width="100%"|- valign="top"! width="140" | Parameter! Description! Allowed! Default|- valign="top"| {{Code|parameter-document}}| Parses the value as an XML document with additional serialization parameters.| ''string''| |} =Custom Parameters= BaseX provides some additional serialization parameters: {| class="wikitable sortable" width="100%"
|- valign="top"
! width="140" | Parameter
! Description
! Allowed
! Default
! Examples
|- valign="top"
| <code>format</code>{{Code|csv}}| Turns output formatting on/off. This Defines the way how data is helpful for suppressing unwanted indentation of plain textserialized as CSV.| <code>yes,no</code>| <code>yes</code>see [[CSV Module]]| <code>format=no</code>
|- valign="top"
| <code>tabulator</code>{{Code|json}}| Uses tab characters (<code>\t</code>) for indenting elementsDefines the way how data is serialized as JSON.| see [[JSON Module]]
|
| <code>no</code>
| <code>tabulator=yes</code>
|- valign="top"
| <code>{{Code|tabulator}}| Uses tab characters ({{Code|\t}}) instead of spaces for indenting elements.| {{Code|yes}}, {{Code|no}}| {{Code|no}}|- valign="top"| {{Code|indents</code>}}
| Specifies the number of characters to be indented.
| ''positive number''| <code>{{Code|2</code>}}| <code>indents- valign=1"top"| {{Code|indent-attributes}}| {{Announce|Version 11:}} Indent attributes after the element name, one below the other.| {{Code|yes}}, {{Code|no}}| {{Code|false}}|- valign="top"| {{Code|newline}}| Specifies the type of newline to be used as end-of-line marker. | {{Code|\n}}, {{Code|\r\n}}, tabulator{{Code|\r}}| ''system dependent''|- valign=yes</code>"top"| {{Code|limit}}| Stops serialization after the specified number of bytes has been serialized. If a negative number is specified, everything will be output.| ''positive number''| {{Code|-1}}
|- valign="top"
| {{Code|binary}}| Indicates if items of binary type are output in their native byte representation. Only applicable to the <code>wrap-prefix</code>,<br /><code>wrap-uribase</code>serialization method.| Specifies a prefix and/or URI for wrapping the query results.{{Code|yes}}, {{Code| no}}| {{Code| <code>wrap-prefix=jax-rx, wrap-uri=http://jax-rx.sourceforge.net</code>yes}}
|}
The {{Code|csv}} and {{Code|json}} parameters are supplied with a list of options. Option names and values are combined with <code>=</code>, several options are separated by <code>,</code>:
<pre lang='xquery'>
declare option output:method "csv";
declare option output:csv "header=yes, separator=semicolon";
<csv>
<record>
<Name>John</Name>
<City>Newton</City>
</record>
<record>
<Name>Jack</Name>
<City>Oldtown</City>
</record>
</csv>
</pre>
If {{Code|fn:serialize}} is called, output-specific parameters can be supplied via nested options:
<pre lang='xquery'>
serialize(
<csv>
<record>
<Name>John</Name>
<City>Newton</City>
</record>
<record>
<Name>Jack</Name>
<City>Oldtown</City>
</record>
</csv>,
map {
'method': 'csv',
'csv': map { 'header': 'yes', 'separator': ';' }
}
)
</pre>
'''Result''':
<pre lang="xml">
Name;City
John;Newton
Jack;Oldtown
</pre>
=Character mappings=
Character maps allow a specific character in the instance of the data model to be replaced with a specified string of characters during serialization. The string that is substituted is output “as is,” and the serializer performs no checks that the resulting document is well-formed. This may only occur in documents parsed with {{Code|parameter-document}}. If a character is mapped, then it is not subjected to XML or HTML escaping. For details, refer to section [https://www.w3.org/TR/2015/CR-xslt-xquery-serialization-31-20151217/#character-maps 11 Character maps] in the [https://www.w3.org/TR/xslt-xquery-serialization-31 W3C XQuery Serialization 3.1] document.
This example maps the Unicode U+00A0 NO-BREAK SPACE as &#160; (without the serialization parameter, the Unicode character would be output):
'''Example query''':
<pre lang='xquery'>
declare option output:parameter-document "map.xml";
<x>&#xA0;</x>
</pre>
'''Example parameter-document''':
<pre lang="xml">
<serialization-parameters
xmlns="http://www.w3.org/2010/xslt-xquery-serialization">
<use-character-maps>
<character-map character="&#160;" map-string="&amp;#160;"/>
</use-character-maps>
</serialization-parameters>
</pre>
=Changelog=
;Version 11.0
* Added: Serialization parameter {{Code|indent-attributes}}.
;Version 10.0
* Updated: {{Code|indent}}: Default changed from {{Code|yes}} to {{Code|no}}.
;Version 9.2
* Updated: New default value for {{Code|include-content-type}} is {{Code|yes}}.
;Version 8.4
* Added: Serialization parameter {{Code|binary}}.
* Updated: New serialization method <code>basex</code>. By default, items of binary type are now output in their native byte representation. The method <code>raw</code> was removed.
;Version 8.0
* Added: Support for {{Code|use-character-maps}} and {{Code|parameter-document}}.
* Added: Serialization method {{Code|adaptive}}.
* Updated: {{Code|adaptive}} is new default method (before: {{Code|xml}}).
* Removed: {{Code|format}}, {{Code|wrap-prefix}}, {{Code|wrap-uri}}.
;Version 7.8.2
* Added: {{Code|limit}}: Stops serialization after the specified number of bytes has been serialized.
;Version 7.8
* Added: {{Code|csv}} and {{Code|json}} serialization parameters.
* Removed: {{Code|separator}} option (use {{Code|item-separator}} instead).
;Version 7.7.2
* Added: {{Code|csv}} serialization method.
* Added: temporary serialization methods {{Code|csv-header}}, {{Code|csv-separator}}, {{Code|json-unescape}}, {{Code|json-spec}}, {{Code|json-format}}.
;Version 7.5
* Added: official {{Code|item-separator}} and {{Code|html-version}} parameter.
* Updated: <code>method=html5</code> removed; serializers updated with the [https://www.w3.org/TR/2013/WD-xslt-xquery-serialization-30-20130108/ latest version of the specification], using <code>method=html</code> and <code>version=5.0</code>.
;Version 7.2
* Added: {{Code|separator}} parameter.
;Version 7.1
* Added: {{Code|newline}} parameter.
;Version 7.0
* Added: Serialization parameters added to [[REST API]]; JSON/JsonML/raw methods.