Great, I would much rather see this become part of the core API than have this 
as part of the Enhanced API. 
To make things work correctly, one important change to core is needed: The Node 
interface needs to extends Traverser (the interface in 
org.neo4j.graphdb.traversal, not the one in org.neo4j.graphdb). 
This is actually not a big deal. There Traverser interface supports three 
methods:
Iterator<path> iterator() [return 1 path with 1 element in the path, being the 
node itself]Iterable<Node> nodes() [return an iterable over the node 
itself]Iterable<Relationship> relationships() [return an empty iterable]
With that addition, it's not all too difficult to enhance the current 
implementation of Traverser. It only adds one more iteration level over the 
current implementation. Instead of having one start node, we now have multiple 
start paths. When returning values from the Traverser, the start paths and the 
result paths need to be concatenated. 
In the new scenario, all "old" traverse() methods can remain the same, since 
Node becomes a Traverser, so those methods are just special cases where 
Iterable<Path> consists of 1 path, with just 1 element.
Niels
> Date: Fri, 29 Jul 2011 18:36:28 +0200
> From: [email protected]
> To: [email protected]
> Subject: Re: [Neo4j] Composable traversals
> 
> There have been thoughts a long while to make something like this with the
> traversal framework, but time has never been allocated to evolve it. I'm
> adding stuff to the framework in a side track and will surely add some
> aspect of composable traversers also.
> 
> 2011/7/29 Niels Hoogeveen <[email protected]>
> 
> >
> > I'd like to take a stab at implementing traversals in the Enhanced API. One
> > of the things I'd like to do, is to make traversals composable.
> >
> > Right now a Traverser is created by either calling the traverse method on
> > Node, or to call the traverse(Node) method on TraversalDescription.
> >
> > This makes traversals inherently non-composable, so we can't define a
> > single traversal that returns the parents of all our friends.
> >
> > To make Traversers composable we need a function:
> >
> > Traverser traverse(Traverser, TraversalDescription)
> >
> > My take on it is to make Element (which is a superinterface of Node) into a
> > Traverser.
> >
> > Traverser is basically another name for Iterable<Path>.
> >
> > Every Node (or more generally every Element) can be seen as an
> > Iterabe<Path>, returning a single Path, which contains a single
> > path-element, the Node/Element itself.
> >
> > Composing traversals would entail the concatenation of the paths returned
> > with the paths supplied, so when we ask for the parents of all our friends,
> > the returned paths would take the form:
> >
> > Node --FRIEND--> Node --> PARENT --> Node
> >
> > Niels
> >
> > _______________________________________________
> > Neo4j mailing list
> > [email protected]
> > https://lists.neo4j.org/mailman/listinfo/user
> >
> 
> 
> 
> -- 
> Mattias Persson, [[email protected]]
> Hacker, Neo Technology
> www.neotechnology.com
> _______________________________________________
> Neo4j mailing list
> [email protected]
> https://lists.neo4j.org/mailman/listinfo/user
                                          
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to