Introduction to XML Database Technologies
Matthew Egbert
Outline of Talk
4XML Databases
Discuss XML in the context of Databases
Relational Databases vs. XML Databases
4XML Database Languages
XPath
XUpdate
Databases
4A database is a collection of data that is
organized so that its contents can easily be
accessed, managed, and updated
4The most prevalent type of database is the
relational database, a tabular database in which
data is defined so that it can be reorganized and
accessed in a number of different ways
Microsoft Access
Oracle
Sybase
IBMs DB2
Relational Databases and
XML
4Relational databases organize data in a tabular,
or grid-like fashion, and use relational linking in
order to expose hierarchical constraints on the
data[8]
4XML documents are organized as hierarchical
tree structures
Using a RDB to store XML
4Unfortunately, while it's generally very easy to
map relational data into XML, trying to map XML,
which can be very complex and freeform, into
relational data can be incredibly difficult and
lossy [8]
4This means ugly routines for mapping XML data
structures into RDB structures
If you must do this, there is documentation available to you at
http://www.xml.com/pub/a/2001/06/20/databases.html
Fortunately, there is a simpler alternative for most of us
Xindice
4Xindice is a native XML-Database
4The benefit of a native solution is that you don't
have to worry about mapping your XML to some
other data structure. You just insert the data as
XML and retrieve it as XML[which is] especially
valuable when you have very complex XML
structures that would be difficult or impossible to
map to a more structured database. [2]
Xindice (cont.)
4Xindice stores and indexes compressed XML
documents
4It was not designed to store and manage single
monster sized documents, where one document
is treated as a set of mini documents. It was
specifically designed for managing many small to
medium sized documents. [8]
Interacting with an
XML Database
4Because native XML databases store data in a
different way from relational databases, there are
different languages used to query and update the
database
4Query
To retrieve a specified portion of a database
4Update
To add or modify a portion of a database
XLanguages
4For relational databases, the Structured Query
Language (SQL) is often used to perform both
queries and updates
4For Xindices (and other XML native databases):
queries are specified using the XPath language
updates are defined using the XUpdate language
4Lets take a look at both XPath and XUpdate in
more detail
XPath
Querying the
Database with XPath
4XPath is a (W3C-standard) language used to
address a section of an XML document
4XPath uses a compact, non-XML syntax to
facilitate use of XPath within URIs[6]
4A single string of XPath can address any section
of an XML document
4The next few slides show the basics of XPath by
giving some basic examples
11
Some example XPath[5]
4 If the XPath string starts
with // then all elements in
the document which fulfill
the criteria which follow
the // are selected.
4 * selects all elements
located by the preceding
path
4 //*
Select all elements
12
<AAA>
<CCC>
<DDD>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</CCC>
<CCC>
<BBB>
</BBB>
</CCC>
</AAA>
Example XPath[5]
4//DDD/BBB
Select all elements BBB
which are direct children of
DDD
4If the XPath was
/DDD/BBB, no nodes
would be selected
because there is no
root DDD element
which contains a BBB
element
13
<AAA>
<BBB/>
<CCC/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
</CCC>
</AAA>
Example XPath[5]
4/*/*/*/BBB
Select all elements BBB
which have exactly 3
ancestors
14
<AAA>
<XXX>
<DDD>
<BBB/>
<BBB/>
<EEE/>
</DDD>
</XXX>
<CCC>
<BBB>
<BBB>
<BBB/>
</BBB>
</BBB>
Some example XPath[5]
4/AAA/BBB[1]
Select the first BBB child of
element AAA
15
<AAA>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
</AAA>
An example XPath
Function[5]
4/AAA/BBB[last()]
Select the last BBB child of
element AAA
This is an example of an
XPath function
16
<AAA>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
</AAA>
An example XPath
Function[5]
4//*[count(BBB)=2]
Select elements which have
two children BBB
17
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
<EEE>
<DDD/>
</EEE>
</AAA>
Combining XPath[5]
4| is used to combine
XPath queries
4//CCC | //BBB
Select all elements CCC and
all elements BBB
18
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
<EEE>
<DDD/>
</EEE>
</AAA>
Some example XPath[5]
4/AAA/BBB/descendant::*
Select all descendants of
/AAA/BBB
19
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
<CCC>
<DDD>
<EEE>
<DDD>
<FFF/>
Some example XPath[5]
4//DDD/parent::*
Select all parents of DDD
element
20
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
<CCC>
<DDD>
<EEE>
<DDD>
<FFF/>
Some example XPath[5]
4/AAA/BBB/DDD/CCC
/EEE/ancestor::*
Select all elements given
in this absolute path
21
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
<CCC>
<DDD>
</DDD>
</CCC>
</AAA>
XPath Operators and
Functions [5]
4The div operator performs floating-point division
4The mod operator returns the remainder from a
truncating division
4The floor function returns the largest integer that
is not greater than the argument
4The ceiling function returns the smallest integer
that is not less than the argument
22
Using XPath Functions and
Operators [5]
4//BBB[position() mod 2 = 0 ]
Selects every second BBB node
23
<AAA>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
<CCC/>
<CCC/>
<CCC/>
</AAA>
Java XPath Query
4Xindices API directly supports XPath queries
4Performing such a query involves a few simple
lines of java
String xpath = new String();
xpath = "//person/name/*";
//the XPath string
XPathQueryService xp_service =
col.getService("XPathQueryService", "1.0");
ResourceSet resultSet = xp_service.query(xpath);
24
XUpdate
XUpdate Overview
4XUpdate is an XML-syntax that is used to specify
modifications of XML documents
4It is part of the XML:DB Project
(http://www.xmldb.org/xupdate/)
4XUpdate uses XPath expressions to select nodes
for processing
4Lets look at an example
26
Some example XUpdate[7]
4This example XUpdate adds a middle name
element before the last name element
<xupdate:modifications version="1.0"
xmlns:xupdate="http://www.xmldb.org/xupdate">
<xupdate:insert-before
select="/addresses/address[@id = 1]/name/last" >
<xupdate:element
name="middle">Lennox</xupdate:element>
</xupdate:insert-before>
</xupdate:modifications>
27
Some example XUpdate[7]
4All XUpdate commands have a select attribute
which uses XPath to specify an XML node to act
upon
<xupdate:modifications version="1.0"
xmlns:xupdate="http://www.xmldb.org/xupdate">
<xupdate:insert-before
select="/addresses/address[@id = 1]/name/last" >
<xupdate:element
name="middle">Lennox</xupdate:element>
</xupdate:insert-before>
</xupdate:modifications>
28
XML Block Append
<xupdate:modifications version="1.0"
xmlns:xupdate="http://www.xmldb.org/xupdate">
<xupdate:append select="/addresses" >
<xupdate:element name="address">
<new_xml_block>
<valid_new_xml_goes_here/>
</new_xml_block>
</xupdate:element>
</xupdate:append>
</xupdate:modifications>
29
A few things you can do
with XUpdate
4Insert Element/Attribute/Comment
4Update Element/Attribute/Comment
4Delete Element/Attribute/Comment
4Rename Element/Attribute
4Update/Delete Text Content of an Element
4Insert XML Block
4Append Element
4Copy a Node
4Move a Node
30
Java XUpdate Update
4Xindices API directly supports XUpdate updates
4Performing such an update involves a few simple
lines of java (which are very similar to those for
XPath queries)
String update=new String();
update = XUPDATE STRING;
XUpdateQueryService xupdate_service =
data.getService("XUpdateQueryService","1.0");
xupdate_service.update(update);
31
Conclusion
4XPath and XUpdate are the XML-Database
languages which are supported by Xindice
4Performing XPath queries or XUpdate updates
using the Xindice API is easy
4XQuery is a developing XML alternative to XPath
(which has the non XML, path-like structure)
More SQL like database queries
Not yet supported by Xindice
32
References
4[2] Xindice homepage
http://xml.apache.org/xindice/
4[5] XPath Tutorial by Miloslav Nic and Jiri Jirat
http://www.zvon.org/xxl/XPathTutorial/General/ex
amples.html
4[6] XML Path Language (XPath) Version 1.0 W3C
Recommendation - 16 November 1999
http://www.w3.org/TR/xpath
33
References (cont.)
4[7] XUpdate Example Use Cases Page
http://www.xmldatabases.org/projects/XUpdateUseCases/
4[8] Xindice FAQ
http://xml.apache.org/xindice/FAQ
34