An embedded XML Database: Oracle Berkeley DB XML
There is more to life than RDBMS
Posted in Developer, 18th July 2007 11:31 GMT
Free Download - Security Web 2.0
Modifying XML Documents
The Oracle BDB XML command shell provides various commands such as append, insertAfter and 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 collection() or doc() function. The context is set prior to the modifications with the query command. For example, set the context to the catalog.dbxml container:
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 print command – see Figure 6.

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. |
An 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");
Next page: Adding XML Documents

Implementing Energy Efficient Data Centers [WP114]
An Improved Architecture for High-Efficiency, High-Density Data Centers [WP126]
The Register Guide to Extended Validation
Software Configuration Management
The Perfect (Virtual) Marriage
How Microsoft blew its own RIA invention
Java and Linux - an open marriage in search of success
Rock-solid Fedora 10 brings salvation to Ubuntu weary
Hidden recipes for OS X charts and graphs