Accelerating XPath Location Steps - Uni Konstanz, Informatik

1 downloads 96 Views 546KB Size Report
introduction of standards such as XML or tree structured directory services ... examine the pre – post relationships b
Seminar: „Support for non-standard encoding="iso-8859-"?> Fig. 1: Tree Traversal

Fig. 2 : XML document

A well-known tree parser for XML traversals is SAX 1 “Simple API for XML”. This parser allows gathering information of a document tree without maintaining the whole tree structure in memory but just scanning each node sequentially and triggering events whenever a node beginning or node end is reached. This event triggering is useful to assign values to nodes. In this case when a node beginning is found a “pre” value is assigned to a node and its value is iterated throughout the traversal. This also counts for the “post” value when the end of a node is reached.

1

http://www.saxproject.org

Accelerating XPath Location Steps / Brendan Briody

Page 3 of 18

The node values are maintained on a stack, pushed on top at a node beginning and popped off the stack when the node end is reached. In the example above the first node holding both pre and post values and popped off the stack is node “d” Fig. 1 . Not only pre and post values are maintained while parsing but also further information is provided by SAX such as tag names and attributes, mentioned in chapter 4.

After parsing a list of nodes containing information is available. At this time we only want to examine the pre – post relationships between nodes by mapping all nodes in coordinates. Below in figure 3 the “simple” node list is shown pre-sorted with the according mapped prepost coordinates.

Fig. 3: Pre – post node list and corresponding mapping

Successfully transformed from a recursive tree structure into a 2-dimensional plane we now want to discover the relationships between nodes in a regional sense. A random node, for simplicity the node “e”, holds its 2 values pre and post which enclose a distinct region containing the nodes “g”,”f” and “h“. Accelerating XPath Location Steps / Brendan Briody

Page 4 of 18

Comparing the enclosed nodes and the tree structure, obvious relationships are discovered. This lower right region simply describes all descendants of node “e”. Carrying on, the lower left region shows all preceding siblings of “e” namely “d“.

Accelerating XPath Location Steps / Brendan Briody

Page 5 of 18

3. XPath Major Axes The four major axes can be depicted as in figure 4 below.

Fig. 4: The four major XPath axes

To support all XPath axes though we need little more information. The partial “or-self” keywords of e/descendant-or-self::* for example can easily be described by just including the pre-post values of “e” into the region. The information needed to get child, parent, followingand preceding-sibling is characterised by the parent value. If a child node of “e” is required, the information this requested node has to contain is who its parent node is. Hence node “g” would have to contain the pre value of node “e”.

To distinguish if a regarded node is an attribute or not, a Boolean value is also needed. If true we are dealing with an attribute of a node. As last of course the name of a node must be given, too. As a result we end up with a so-called 5 dimensional descriptor for any node “v” of a tree. descr(v) = (pre(v),post(v),par(v),att(v),tag(v))

Accelerating XPath Location Steps / Brendan Briody

Page 6 of 18

4. Axes and Range Queries Using this 5-dimensional descriptor all XPath axes can be expressed as windows displayed below in a table for an arbitrary context node “v“. Note here that the pre-post values are now intervals with round brackets excluding a value and square brackets including a value.

Axis a

Query window(a,v) pre

post

par

att

tag

child

descendant

descendant-or-self

parent

ancestor

ancestor-or-self

following

preceding

following-sibling

preceding-sibling

attribute

Table 1

The only disturbing feature here is that the intervals are nearly all expressed infinitely with ∞. To make it handier we need to shrink the intervals to fixed sizes. How this can be done is explained in chapter 6.

Beforehand, as a motivation we want to introduce a hypothetical SQL query example using axes and windows.

Accelerating XPath Location Steps / Brendan Briody

Page 7 of 18

5. Representation in SQL

Thinking back about our 5 -dimensional descriptor we can use these elements and create an SQL schema calling it “accel”.

accel

pre

pos

par

att

tag

Being unique, the pre or even post attribute can be used as a primary key. A hypothetical query here using “e” as a path expression and “ a” as an XPath axis would be…

query(e/a) = SELECT v’.* FROM query(e) v , accel v’ WHERE v’ INSIDE window(a,v) Query 1

meaning: Select a node v’ from a query path “e” with context node “v” and out of table accel where v’ is inside the window corresponding to the context node “v” and axis a. The idea of query windows is well supported by R- and B-Trees but is not to be further discussed in this paper. A conventional SQL query for a path example: /descendant::n1/preceding-sibling::n2 is…

SELECT v2.* FROM accel v1, accel v2 WHERE 0 < v1.pre AND v1.tag = n1 AND v2.pre < v1.pre AND v2.post < v1.post AND v2.par = v1.par AND v2.tag = n2 Query 2

…meaning for the path: get all descendants under the root with the name n1 and find their preceding siblings named n2. Accelerating XPath Location Steps / Brendan Briody

Page 8 of 18

In SQL: select v2 with v1 and v2 from the accel table where v1 is not the root node -

and has the tag name n1

-

and v2 (pre post) is inside the pre-post window boundaries of v1

-

and v1 , v2 have the same parent (sibling relationship)

-

and v2 has the tag n2

Of course the information for the 5- dimensional descriptor must be obtained at document loading time. Referring to chapter 2, two callback procedures are needed to gain the necessary information, a callback for the beginning of a node and one for the end of a node.

So, every time SAX triggers an element beginning we need a callback procedure described in a simple form as follows:

StartElement(t,a,atts) descriptor v

Suggest Documents