An embedded XML Database: Oracle Berkeley DB XML
There is more to life than RDBMS
Modifying XML Documents
The Oracle BDB XML command shell provides various commands such as
insertBefore to modify an XML document in the database. The
append command won’t append an attribute if the context has not been set. The query expression for modifying nodes should be relative; it should navigate from the context item “.” rather than evaluating an expression with the
doc() function. The context is set prior to the modifications with the
query command. For example, set the context to the
dbxml> query 'collection("catalog.dbxml")'
Having set the context we may run an
append command. As an example add an ‘article’ node:
dbxml> append './catalog/journal[article/title="Using Bind Variables"]' 'element' 'article' '<title>Commanding ASM</title><author>Arup Nanda</author>'
Retrieve the modified “catalog1” document with the
getDocuments command and output the document with the
Using the Berkeley DB XML API
In BDB XML documents are stored in containers. Containers are of two types; Wholedoc containers and Node containers. A Wholedoc container stores the complete XML document without any modifications to line breaks or whitespaces. In a Node container, XML documents are stored as nodes. BDB XML also stores information about reassembling an XML document from the nodes stored in the database. The Node container is preferred and is the default type. A comparison of Node container and Wholedoc container is discussed in the Table below:
|Container Type||Storage Mode||Query Performance||Load Performance||Application|
|Node Container||XML document stored in nodes||Faster to query||Lower load performance||Use Node container if faster query performance is required. Use Node container if document size is more than 1MB.|
|Wholedoc Container||Whole XML document stored||Lower query performance, because complete document has to be navigated||Faster document loading, because an XML document does not have to be deconstructed into nodes||Use Wholedoc container if load performance is more important than query performance. Use Wholedoc container if document is relatively small and requires to be frequently retrieved.|
XmlManager object is used to manage many of the objects used in a BDB XML application, including managing an
XmlContainer and preparing and running XQuery queries. Create an
XmlManager object and set the default container type to be Node container.
XmlManager xmlManager = new XmlManager(); xmlManager.setDefaultContainerType(XmlContainer.NodeContainer);
Next, create a container,
catalog.dbxml. The container is the BDB XML database:
XmlContainer xmlContainer = xmlManager.createContainer("catalog.dbxml");
Sponsored: What next after Netezza?