I have a graph-like structure encoded in XML. A directed acyclic graph, to be precise. Nodes are uniquely identified and encoded relationships between successors and predecessors.
Is it possible to build an XQuery or XPath function that moves the graph to find the first node that satisfies a simple condition?
To be more precise, take the following XML document:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<obj>
<id>1</id>
<name>FINDME</name>
<relations>
<successor>2</successor>
</relations>
</obj>
<obj>
<id>2</id>
<relations>
<predecessor>1</predecessor>
<successor>3</successor>
</relations>
</obj>
<obj>
<id>3</id>
<relations>
<predecessor>2</predecessor>
</relations>
</obj>
</doc>
Suppose the current node is 3. I want to find the predecessor node id that has a name tag equal to "FINDME". For this, I can use the following XPath:
/doc/obj[name='FINDME'
and id=/doc/obj[
id=/doc/obj[
id=3
]/relations/predecessor
]/relations/predecessor
]/id
Is it possible to generalize a query to handle arbitrary levels of relationships?
EDIT: joemfb . , node node ?
, :
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<obj>
<id>1</id>
<name>FINDME</name>
<relations>
<successor>2</successor>
<successor>4</successor>
</relations>
</obj>
<obj>
<id>4</id>
<relations>
<successor>2</successor>
<predecessor>1</predecessor>
</relations>
</obj>
<obj>
<id>2</id>
<relations>
<predecessor>1</predecessor>
<predecessor>4</predecessor>
<successor>3</successor>
</relations>
</obj>
<obj>
<id>3</id>
<relations>
<predecessor>2</predecessor>
</relations>
</obj>
</doc>