Changes

Jump to navigation Jump to search
624 bytes added ,  12:35, 1 August 2022
no edit summary
This page is part of the [[Getting Started]] Section.
In BaseX, a ''database'' is a pretty light-weight concept. It may contain one or more '''resources''', which are addressed by a unique database path. There is no explicit layer for collections: Instead, collections are implicitly created and deleted, and collections result from the existence of documents in specific paths. The resource types exist: '''XML documents''', '''Binary data''', and '''XQuery Values'''. Additional information on [[Binary Data|binary data]] can be found on an extra page.
Multiple databases can be addressed (queried, updated) with a single XQuery expression. As a single database is restricted to 2 billion XML nodes (see [[Statistics]]), but resources can easily be distributed across multiple database instances.Multiple databases can be addressed (queried, updated) by a single XQuery expression.  Three different resource types exist: {|class="wikitable"|- valign="top"| '''Resource Type'''| '''Description'''|- valign="top"| XML Documents| The default resource type. The storage and index features are optimized for XML contents, or any other contents stored in an XML representation.|- valign="top"| Binary Data| Binary data: Raw data of any type, stored in its binary representation. See [[Binary Data]] for more information.|- valign="top"| XQuery Values| Introduced with {{Announce|Version 10}}: Results of XQuery expressions, stored in a binary representation for fast retrieval. All value types are supported, including maps and arrays, but excluding any other [[Higher-Order Functions#Function Items|function items]].|}
=Create Databases=
Databases can be created via [[Commands]], via [[XQuery]], in the [[GUI]], and with various [[Developing|APIs]]. If an initial input is specified with a create operation, some time can be saved, as the specified resources will be added to the database in a bulk operation:
* [[Startup#BaseX Standalone|ConsoleCommand-Line]]: <code>CREATE DB db documents /path/to/resources</code>: Add documents resources in the specified path to a databasenamed {{Code|documents}}.
* [[Startup#BaseX GUI|GUI]]: Go to ''Database'' → ''New'', press ''Browse…'' to choose an initial file or directory, and press ''OK''.
The database name of a database is composed of a restricted set of characters (see [[Valid Names]]). Various [[parsersParsers]] can be selected to control the import process, or to convert data of different formats input type to XML. '''Note:''' A database can be created in main-memory by enabling the {{Option|MAINMEM}} option ([[Databases#In Memory Database|see below]] for more details).
=Access Resources=
{| class="wikitable"
|-valign="top"
!Function
!Example
!Description
|-valign="top"
|{{Function|Database|db:get}}
|{{Code|db:get("db", "path/to/docs")}}
|Returns all documents that are found in the database {{Code|db}} at the (optional) path {{Code|path/to/docs}}.
|-valign="top"
|<code>[http://www.xqueryfunctions.com/xq/fn_collection.html fn:collection]</code>
|{{Code|collection("db/path/to/docs")}}
|Returns all documents at the location {{Code|path/to/docs}} in the database {{Code|db}}.<br/>If no path is specified after the database, all documents in the database will be returned.<br/>If no argument is specified, all documents of the database will be returned that has been opened in the global context.
|-valign="top"
|<code>[http://www.xqueryfunctions.com/xq/fn_doc.html fn:doc]</code>
|{{Code|doc("db/path/to/doc.xml")}}
!Example
!Description
|-valign="top"
|{{Function|Database|db:name}}
|{{Code|db:name($node)}}
|Returns the name of the database in which the specified {{Code|$node}} is stored.
|-valign="top"
|{{Function|Database|db:path}}
|{{Code|db:path($node)}}
=Main-Memory Database Instances=
A database can be created in main-memory by enabling the {{Option|MAINMEM}} option. Next, * In in the standalone context, a main-memory database can be created (using <code>{{Command|CREATE DB</code>}}), which can then be accessed by subsequent commands.* If a BaseX server instance is started, and if a database is created in its context at startup time (using <code>CREATE DB</code>e.g., with the {{Command-Line Options|command-line option -c}}), other BaseX client instances can access (and update) this database (using OPEN, db:get, etc.) as long as no other database is opened/created by the server.* You can force an ordinary database , or parts of it, to being temporarily copied to memory by applying an empty [[XQuery_Update#Main-Memory_Updates|main-memory update]] on a database node: <code>db:get('some-db') update { }</code>
'''Note:''' If you open local or remote documents with <code>fn:doc</code> or <code>fn:collection</code>, the resulting internal representation is identical to those of main-memory database instances (regardless of which value is set for {{Option|MAINMEM}}).
Bureaucrats, editor, reviewer, Administrators
13,550

edits

Navigation menu