[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Using XSLT and XPath for graph data structure processing?

  • To: xml-dev@l...
  • Subject: Using XSLT and XPath for graph data structure processing?
  • From: "Ramon M. Felciano Yahoo" <felciano@y...>
  • Date: Sun, 11 Jan 2004 12:45:18 -1000
  • Organization: Yahoo Organization
  • Reply-to: felciano@y...
  • User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6b) Gecko/20031205 Thunderbird/0.4

graph data structure
Helo all --

I'm trying to gain a deeper understand for what type of semi-declarative 
programming can be done through XML and XPath/XSLT. I'm looking at graph 
processing problems as a testbed for this, and came across a problem 
that I haven't been able to solve elegantly. The problem is to find 
"linker" vertexes that a pair of verteces from a pre-defined set. For 
example, if the graph verteces represent cities and edges represent 
flights between them, then given a list of cities, find all intermediate 
cities that you would stop in via a "connecting flight".

For example, given the following simple graph:

V1 -> V2 -> V3 -> V4
        \<- V5 ->/

(V5 points to both V2 and V4), and its XML serialization:

<graph>
   <vertex id="V1"/>
   <vertex id="V2" type="anchor"/>
   <vertex id="V3"/>
   <vertex id="V4" type="anchor"/>
   <vertex id="V5"/>
   <edge source="V1" target="V2"/>
   <edge source="V2" target="V3"/>
   <edge source="V3" target="V4"/>
   <edge source="V5" target="V2"/>
   <edge source="V5" target="V4"/>
</graph>

I would like to transform this into a second graph where all vertexes 
that "link" two anchor distinct vertexes are flagged as link nodes. In 
this case, there are two anchor vertexes V2 and V4, and I can link them 
through V3 (V2 -> V3 -> V4) and V5 (V2 <- V5 -> V4). Note that linked 
verteces must be distinct, so traversing the V2 <- V1 -> V2 path should 
not yield V1 as a link node. So I'd like to see something like this:

<graph>
   <vertex id="V1"/>
   <vertex id="V2" type="anchor"/>
   <vertex id="V3" linker="true"/>
   <vertex id="V4" type="anchor"/>
   <vertex id="V5" linker="true"/>
   <edge source="V1" target="V2"/>
   <edge source="V2" target="V3"/>
   <edge source="V3" target="V4"/>
   <edge source="V5" target="V2"/>
   <edge source="V5" target="V4"/>
</graph>

It would be ideal to come up with a generalized solution that would let 
you use 1, 2, .. N intermediate linking nodes. I've been able to get 
this working with nested loops, but it isn't particularly declarative or 
speedy, and is certainly more verbose than I'd like, so I'm wondering if 
anyone here has insights into how to do this elegantly and in XSLT/XPath 
style. For example, is it possible to write a single XPath expression 
that will select <vertex> elements that obey the above criteria? If not, 
does anyone have any suggestions for how to code this effectively and 
efficiently with XSLT?

Thanks!

Ramon

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.