This page is linked from the [[Getting Started]] Section.
The options listed on this page influence the way how database [[Commands|commands]] are executed and XQuery expressions are evaluated. Options are divided into [[#Global Options|'''global options''']], which are valid for all BaseX instances, and '''local options''', which are specific to a client or session. Values Two kinds of options are either ''strings'', ''numbers'' or ''booleans''.exist:
The {{Code|.basex}} * '''[[Configuration#Configuration FilesGlobal Options|configuration fileGlobal Options]] ''' are valid for all BaseX instances in the same JVM. This is parsed by every new local BaseX instanceparticularly relevant if you are working with the client/server architecture. It contains * '''Local options''' (all global options and, optionally, local options at the end of the fileremaining ones) are specific to a client or session.
Values of options are either ''strings'', ''numbers'' or ''booleans''. Options are ''static'' and not bound to a single operation (for example, the next command). Various ways exist to access and change options:
* The current value of an option can be requested with the {{Command|GET}} command. Local options can be changed via {{Command|SET}}. All values are ''static'': They stay valid until they are (all global options, except for {{Option|DEBUG}}, can only be changed once again by another operationat startup time). If an option is of type ''boolean'', and if no value is specified, its current value will be inverted. * The {{Code|.basex}} [[Configuration#Configuration Files|configuration file]] is parsed by every new local BaseX instance. It contains all global options. Local options can be specified at the end of the file after the {{Code|Local Options}} comment: <pre class="brush:perl"># General OptionsDEBUG = false... # Local OptionsCHOP = false</pre>
* Initial values for global options can also be specified via system properties, which can e.g. be passed on with the [http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/java.html#options -D flag] on command line, or using [http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#setProperty(java.lang.String,%20java.lang.String) System.setProperty()] before creating a BaseX instance. The specified keys need to be prefixed with {{Code|org.basex.}}. An example:
</pre>
* In a [[Web Application]], the default can be adjusted in the {{Code|web.xml}} file as follows: <pre class="brush:xml"><context-param> <param-name>org.basex.chop</param-name> <param-value>false</param-value></context-param></pre> * In XQuery, local options can be set via option declarations and pragmas (see [[XQuery Extensions#Pragmas|pragmas]]).
If options are implicitly changed by operations in the [[GUI]], the underlying commands will be listed in the [[GUI#Visualizations|Info View]].<br/><br/>
=Global Options=
|-
| '''Default'''
|<code>[[Configuration#Database Directory|{home}/BaseXData]]</code> or <code>[[Configuration#Database Directory|{home}/data]]</code>
|-
| '''Summary'''
===LOGPATH===
{{Mark|Updated with Version 8.5}}:
{| width='100%'
|-
| '''Default'''
|<code>[[Configuration#Database Directory|{home}/BaseXReporepo]]</code>
|-
| '''Summary'''
|}
===GLOBALLOCKFAIRLOCK===
{| width='100%'
|-
| width='120' | '''Signature'''
|{{Code|GLOBALLOCK FAIRLOCK [boolean]}}
|-
| '''Default'''
|-
| '''Summary'''
|Controls Defines the locking strategy:* By default, non-fair is used. Read transactions will be favored, and transactions that access no databases can be evaluated even if local the limit of parallel transactions (databasespecified via {{Option|PARALLEL}}) or global (process) locking will has been reached. This prevents update operations from blocking all other requests. For example, the DBA can further be used for managing to see which jobs are running, even if the queue is full.* If fair locking is enabled, read and write transactions will be treated equally (first in, first out). This avoids starvation of update operations. The article on [[Transaction Management]] provides more details on concurrency control, and it should be used if the prompt evaluation of update operations is critical.
|}
===CACHETIMEOUT===
{{Mark|Introduced with Version 8.5:}}
{| width='100%'
|-
| '''Summary'''
|Represents a password, which is used for accessing the server or an HTTP service:
* The default value will be overwritten if a client specifies its own credentials.
* If the default value is empty, login will only be possible if the client specifies credentials.
===AUTHMETHOD===
{{Mark|Updated with Version 8.5}}: {{Code|custom}} value added.
{| width='100%'
| '''Summary'''
|This is a list of hosts that should be directly accessed. If the value is an empty string, it will be ignored.
|}
===IGNOREHOSTNAME===
{| width='100%'
|-
| width='120' | '''Signature'''
|{{Code|IGNOREHOSTNAME [boolean]}}
|-
| '''Default'''
|{{Code|false}}
|-
| '''Summary'''
|If this option is enabled, hostnames of certificates will not be verified. Use {{Option|IGNORECERT}} to completely disable certificate verification.
|}
|-
| '''Summary'''
|This option can be turned on to ignore untrusted certificates when connecting to servers. Please use this option carefullyUse {{Option|IGNOREHOSTNAME}} to suppress only the hostname verification.
|}
|-
| '''Summary'''
|Specifies the maximum time a read-only transaction triggered by a client may take. If an operation takes longer than the specified timeoutnumber of seconds, it will be aborted. Write Active update operations will not be affected by this timeout, as this would corrupt the integrity of the database. The timeout is deactivated if the timeout is set to {{Code|0}}. It is ignored for operations with [[User Management|admin permissions]].
|}
|-
| '''Summary'''
|Denotes the maximum allowed number of parallel [[Transaction Management|transactions]]:* If {{Option|FAIRLOCK}} is enabled, the number of parallel transactions will never exceed the specified value.<br/>Note * If the option is disabled (which is the default), the limit only applies to transactions that a access databases.* The main reason for allowing parallel operations is to prevent slow transactions from blocking all other operations. A higher number of parallel operations may increase disk activity and thus slow down queries. In some cases, a single transaction may even give you better results than any parallel activity. The main reason for allowing parallel operations is to prevent slow transactions from blocking all other operations.
|}
==HTTP Services==
If BaseX is run as web servlet, the Most HTTP options must be specified are defined in the {{Code|jetty.xml}} and {{Code|web.xml}} configuration files in the <code>[https://github.com/BaseXdb/basex/tree/master/basex-api/src/main/webapp/WEB-INF webapp/WEB-INF]</code> directory and . Some additional BaseX-specific options exist that will be set before the {{Code|jetty.xml}} and {{Code|web.xml}} configuration files.server is started:
===WEBPATH===
|-
| '''Default'''
|<code>[[Configuration#Database Directory|{home}/BaseXWeb]]</code> or <code>[[Configuration#Database Directory|{home}/webapp]]</code>
|-
| '''Summary'''
|}
===CACHERESTXQPARSERESTXQ===
{| width='100%'
|-
| width='120' | '''Signature'''
|{{Code|CACHERESTXQPARSERESTXQ}}
|-
| '''Default'''
|{{Code|false3}}|-| '''Summary'''|Timeout after which the RESTXQ directory will be parsed for changes:* If {{Code|0}} is specified, the directory will be parsed every time a RESTXQ function is called.* A positive value defines the idle time in seconds after which parsing will be enforced. The default value is {{Code|3}}: Changes in the RESTXQ directory will be detected after 3 seconds without RESTXQ function calls.* Monitoring is completely disabled if a negative value is specified. See [[RESTXQ#Preliminaries|RESTXQ Preliminaries]] for more details.|} ===RESTXQERRORS=== {{Mark|Introduced with Version 9.2.}} {| width='100%'|-| width='120' | '''Signature'''|{{Code|RESTXQERRORS}}|-| '''Default'''|{{Code|true}}
|-
| '''Summary'''
|Caches [[Reports parsing errors in XQuery modules in the RESTXQ]] modules once when starting directory back to the web applicationclient.<br/>The By default, this option is helpful in enabled. On productive environments with a high loadsystems, but files it can be disabled in order to suppress errors that should not be replaced while seen by the web server is runningclient.
|}
|-
| '''Summary'''
|By default, if BaseX is run as [[Web Application]], a database server instance will be started as soon as the first HTTP service is calledwell. The server can then be addressed by other BaseX clients in parallel to the HTTP services.<br/>If the option is set to {{Code|falsetrue}}, the database server will be disabled.
|}
|-
| '''Summary'''
|If this option is turned on, new databases will be exclusively created in main memory. :* Most queries will be evaluated faster in main -memory mode, but all data is lost if the BaseX instance in which the database was created is shut down. The value of this option * It is not possible to store binary resources in a main-memory database.* A main-memory database will be assigned once have no disk representation. However, it is possible to export the database via the {{Command|EXPORT}} command, and create a new databasefrom the exported file in a second step.* This option will not be available for [[Database Module#db:create|db:create]], and cannot because the database would not be changed accessible anymore after thatdatabase creation, i. e., outside the query scope.
|}
|-
| '''Summary'''
|If this option is activatedenabled, and if new all resources are added to a database, all files that are not filtered out by the {{Option|CREATEFILTER}} option while being added to a database will be added stored as ''[[Binary Data|raw'' files ]] instead (i.e., in their binary representation).
|}
|-
| '''Summary'''
|Defines a [[Parsers|parser]] for importing new files to the database. Currently, 'Available parsers are {{Code|XML'}}, '{{Code|JSON'}}, '{{Code|CSV'}}, '{{Code|TEXT'}}, 'and {{Code|HTML' are available as parsers}}. HTML will be parsed as normal XML files if [http://home.ccil.org/~cowan/XML/tagsoup/ [Parsers#HTML_Parser|Tagsoup]] is not found in the classpath.
|}
|-
| '''Summary'''
|Specifies the way how HTML data will be parsed. Keys and values are delimited with <code>=</code>, and multiple options are delimited with <code>,</code>. The available options are described in the [[Parsers#Options|Parsers]] article.
|-
| '''Examples'''
|* <code>encoding=Shift-JIS,nons=true</code> parses the input as Sihft-JIS and suppresses namespaces.* <code>lexical=true</code> preserves comments.
|}
* The flag should be turned off if a document contains [[Full-Text#Mixed Content|mixed content]].
* The flag can also be turned off on [[Command-Line Options#BaseX Standalone|command line]] via <code>-w</code>.
* If the <code>xml:space="preserve"</code> attribute is attached to an element, chopping will be turned off for all descendant text nodes. In the following example document, the whitespaces in the text nodes of the {{Code|text}} element will not be chopped:
<pre class="brush:xml">
<xml>
</xml>
</pre>
It is recommendable to additionally assign <code>indent=no</code> to the {{Option|SERIALIZER}} option; otherwise the serialized documents will automatically be indented.
|}
|-
| '''Summary'''
|Uses the internal XML parser instead of the standard Java XML parser. The Here are some reasons for using the internal parser is :* Performance: Documents (in particular small ones) will be parsed faster, more fault tolerant and supports common * Fault tolerance: invalid characters will automatically be replaced with the Unicode replacement character <code>FFFD</code> (�)* Entities: around 250 HTML entities out-of-will be detected and decodedYou will be able to correctly parse most XML documents with the-boxinternal parser. Java’s Xerces parser is still used as default, but however, because it does not support supports all features needed for parsing DTDsof the XML standard and advanced DTD features, such as recursive entity expansion.
|}
|-
| '''Summary'''
|Specifies a Semicolon-separated list of XML catalog file files to locally resolve DTDsURIs. See the entry on [[Catalog Resolver]]s for more details.
|}
|This option affects the [[Indexes#Performance|construction]] of new value indexes. It controls the number of index build operations that are performed before writing partial index data to disk:
* The larger the assigned value is, the less splits will take place, and the more main memory will be required.
* By default, if the value is set to {{Code|0}}, some heuristics are applied, based on the current memory consumption. Usually, this works fine. If explicit garbage collection is disabled when running Java (e.g. via the JVM option {{Code|-XX:+DisableExplicitGC}}), you may need to choose a custom split size.
|}
| '''Summary'''
|Prints more information on internal query rewritings, optimizations, and performance. By default, this info is shown in the [[GUI#Visualizations|Info View]] in the GUI. It can also be activated on [[Command-Line Options#BaseX Standalone|command line]] via <code>-V</code>.
|}
===XQUERY3===
{| width='100%'
|-
| width='120' | '''Signature'''
|{{Code|XQUERY3}}
|-
| '''Default'''
|{{Code|true}}
|-
| '''Summary'''
|Enables all [[XQuery 3.0]] features supported by BaseX. If this option is set to {{Code|false}}, the XQuery parser will only accept expressions of the XQuery 1.0 specification.
|}
|-
| '''Summary'''
|Allows queries to both contain updating and non-updating expressions. All updating constraints will be turned off, and nodes to be returned will be copied before they are modified by an updating expression. – By default, in compliance with the XQuery Update Facility, this option is set to {{Code|false}}, because the XQuery Update Facility does not allow an updating query to . See [[XQuery Update#Returning Results|return resultsReturning Results]]for more details.
|}
|}
===QUERYPATHINLINELIMIT===
{| width='100%'
|-
| width='120' | '''Signature'''
|{{Code|QUERYPATH [path]INLINELIMIT}}
|-
| '''Default'''
|''empty''{{Code|100}}
|-
| '''Summary'''
|Contains the path (''base URI'') This option controls inlining of XQuery functions:* The XQuery compiler inlines functions to the executed speed up query evaluation.* Inlining will only take place if a function body is not too large (default: ''empty''i.e., if it does not contain too many expressions). This directory will * With this option, this maximum number of expressions can be specified.* Function inlining can be used turned off by setting the value to resolve relative paths {{Code|0}}.* The limit can be locally overwritten via the [[XQuery Extensions#Function Inlining|%basex:inline]] annotation (follow the link to documents, query modules, and other resources addressed in a queryget more information on function inlining).
|}
===INLINELIMITTAILCALLS===
{| width='100%'
|-
| width='120' | '''Signature'''
|{{Code|INLINELIMITTAILCALLS}}
|-
| '''Default'''
|{{Code|100256}}
|-
| '''Summary'''
|The XQuery compiler inlines functions to speed up query evaluation. Inlining will only take place if a function body is not too large (iSpecifies how many stack frames of [http://en.ewikipedia., if it does not contain too many expressions)org/wiki/Tail_call tail-calls] are allowed on the stack at any time. With When this optionlimit is reached, this maximum number of expressions can be specifiedtail-call optimization takes place and some call frames are eliminated.<br/>Function inlining The feature can be turned off by setting the value to {{Code|0-1}}. The limit can be locally overridden via the <code>[[XQuery_3.0#Annotations|%basex:inline]]</code> annotation.
|}
===TAILCALLSWITHDB=== {{Mark|Introduced with Version 9.3.}}
{| width='100%'
|-
| width='120' | '''Signature'''
|{{Code|TAILCALLSWITHDB}}
|-
| '''Default'''
|{{Code|256true}}
|-
| '''Summary'''
|Specifies how many stack frames of By default, URIs specified in the [[Databases#XML Documents|fn:doc]] and [[httpDatabases#XML Documents|fn://en.wikipedia.org/wiki/Tail_call tail-callscollection]] are allowed on the stack at any timefunctions will also be resolved against existing databases. When this limit If {{Function|Database|db:open}} is reachedconsistently used to access database documents, tail-call optimization takes place it is recommendable to disable this option:* Access to local and some call frames are eliminatedexternal resources will be faster, as the database lookup will be skipped. The feature can * No locks will be turned off created by setting the value to {{Codetwo functions (see [[Transaction Management#Limitations|-1}}limitations of database locking]] for more details).
|}
| '''Summary'''
|Specifies how often a query will be evaluated. The result is serialized only once, and the measured times are averages of all runs. This option can also be changed on [[Command-Line Options#BaseX Standalone|command line]] via <code>-r</code>.
|}
===ENFORCEINDEX===
{| width='100%'
|-
| width='120' | '''Signature'''
|{{Code|ENFORCEINDEX [boolean]}}
|-
| '''Default'''
|{{Code|false}}
|-
| '''Summary'''
|Enforces index rewritings in path expressions (see [[Indexes#Enforce Rewritings|Enforce Rewritings]] for details).
|}
===COPYNODE===
{| width='100%'
|-
| width='120' | '''Signature'''
|{{Code|COPYNODE [boolean]}}
|-
| '''Default'''
|{{Code|true}}
|-
| '''Summary'''
|When creating new nodes in XQuery via [https://www.w3.org/TR/xquery-31/#id-constructors Node Constructors], all enclosed nodes will be copied, and all resulting nodes will get new node identities. This step can be very expensive, and it can be disabled with this option. The option should be used carefully, as it changes the standard behavior of XQuery. It should preferrably be used in [[XQuery Extensions#Database Pragmas|Pragmas]].
|}
| '''Examples'''
|
* <code>indent=no</code> : disables automatic indentation of XML nodes. This is usually a good choice when working with [[Full-Text#Mixed Content|Mixed-Content Data]].
* <code>encoding=US-ASCII,omit-xml-declaration=no</code> : sets the encoding to {{Code|US-ASCII}} and prints the XML declaration.
* <code>item-separator=,,</code> : separates serialized items by a single comma.
|-
| '''Summary'''
|Contains parameters for exporting all resources of a databaseand writing files after updates via the {{Option|WRITEBACK}} option. Keys and values are separated by equality signs, multiple parameters are delimited by commas. See [[Serialization]] for more details.|-| '''Examples'''|* <code>indent=no,omit-xml-declaration=no</code> : disables automatic indentation of XML nodes, outputs the XML declaration.
|}
|}
===DOTPLANFULLPLAN=== {| width='100%'|-| width='120' | '''Signature'''|{{Code|DOTPLAN [boolean]}}|-| '''Default'''|{{Code|false}}|-| '''Summary'''|Saves the query plan of an XQuery expression as {{Code|.dot}} file in the current working directory, using the [https://en.wikipedia.org/wiki/DOT_(graph_description_language) graph description language]. The output file can e.g. be visualized with [http://www.graphviz.org Graphviz].|}
===DOTCOMPACT==={{Mark|Introduced with Version 9.2:}}
{| width='100%'
|-
| width='120' | '''Signature'''
|{{Code|DOTCOMPACT FULLPLAN [boolean]}}
|-
| '''Default'''
|-
| '''Summary'''
|Chooses a compact dot representationAttaches the file path, line and column of the expressions in the original query string to the query plan. Values (items and sequences) have no input information attached.
|}
|-
| '''Summary'''
|Propagates updates on main-memory instances of files that have been retrieved via [[Databases#XML Documents|fn:doc]] and [[Databases#XML Documents|fn:collection]] back to disk. :* This option can also be activated on [[Command-Line Options#BaseX Standalone|command line]] via <code>-u</code>. * Please note take in mind that, when turning this option on, no backup will be created from your original files will not .* The serialization options can be backed upcontrolled via the {{Option|EXPORTER}} option.
|}
=Changelog=
;Version 9.3
* Added: {{Option|WITHDB}}
;Version 9.2
* Added: {{Option|RESTXQERRORS}}, {{Option|FULLPLAN}}
* Removed: <code>DOTPLAN</code>, <code>DOTCOMPACT</code>
;Version 9.0
* Added: {{Option|ENFORCEINDEX}}, {{Option|COPYNODE}}, {{Option|IGNOREHOSTNAME}}
;Version 8.6
* Added: {{Option|FAIRLOCK}}, {{Option|PARSERESTXQ}}
* Removed: {{Code|GLOBALLOCK}} (exclusive use of database lock)
* Removed: {{Code|QUERYPATH}} (will now be internally assigned)
* Removed: {{Code|CACHERESTXQ}} (replaced with PARSERESTXQ)
;Version 8.5
* Added: {{Option|ASYNCTIMEOUTCACHETIMEOUT}}, {{Option|LOGPATH}}
* Updated: {{Option|AUTHMETHOD}}: {{Code|custom}} value added.