Niels, sounds like fun. Looking forward to get a look at this
2011/7/21 Niels Hoogeveen <[email protected]> > > i made a start on this. It's not all too difficult to enhance relationships > such that relationships can be created upon them, which is a first step > towards supporting hypergraphs. In fact hypergraphs are more constrained > than an enhanced graph that supports the creation of relationships on > relationships. > As it stands now, the enhanced graph can work as a drop-in replacement of > the standard neo4j API and has enhanced methods that mirror the standard > methods. > I also added support for typed properties, such that methods like <T> > getPropertyValue<PropertyType<T>> are possible where <T> is one of the data > types supported by PropertyContainer. > I will upload this within the next few days. > Niels > > > From: [email protected] > To: [email protected] > Subject: RE: [Neo4j] Hyperedges and Objects > Date: Mon, 18 Jul 2011 17:59:08 +0200 > > > > > > > > > I think a hypergraph would be an interesting collection to support in > neo-graph-collections. If I find the time, I will make a start with it this > week, unless there are of course other volunteers :wink: willing to do the > lifting here. > Niels > > > From: [email protected] > > Date: Sat, 16 Jul 2011 23:37:48 +0200 > > To: [email protected] > > Subject: Re: [Neo4j] Hyperedges and Objects > > > > I completely agree, > > > > hyperedges and the accompanying traversers should be handled in a > library. As you probably know the traversal framework currently also uses > the core API under the hood to perform the traversals (and no black magic > (yet)). > > > > So it should be fairly easy to take that approach/code and create a > library that abstracts the hyper-edge issues (creation, deletion, > traversal). The position semantics based approach sounds interesting. > > > > Would love to see that as community contribution. > > > > Cheers > > > > Michael > > > > Am 16.07.2011 um 23:08 schrieb Niels Hoogeveen: > > > > > > > > The question is how much easier a traverser can become when there were > dedicated hyper edges. In a binary relation it is fairly easy to define one > end of the relation as the source and the other as the target (start and end > node), > > > but in n-ary relationships the roles of the attached nodes become more > complicated. > > > > > > Suppose we have the GIVES relationship, where one attached node takes > the role of subject (the giver), > > > one node takes the role of direct object (the gift), and another node > takes the role of indirect object (the recipient). > > > To traverse such a graph, we need to know these different roles, > otherwise we may end up traversing the wrong nodes. > > > > > > Suppose we the following statements: > > > > > > John gives Paul a servant. > > > Paul visited Albania. > > > Paul's servant visited Albania. > > > > > > We now want to know all people that received a gift from John and who > visited Albania. > > > > > > Without properly denoting the roles in the ternary relationship stated > by "John gives Paul a servant", > > > the answer to the query may well be: Paul and Paul's servant. > > > Both are persons, both have visited Albania and both are part of the > GIVES relationship defined. > > > > > > When we have to define the exact roles of each part of an n-ary > relationship for each traversal, > > > it is just as complicated as defining a traversal based on binary > relationships, > > > where different relationship types denote the roles of each part of the > n-ary relationship. > > > > > > If hyperedges were to be introduced, either as a library or in core, > > > the entire notion of the graph and how traversals are performed need to > be rethought. > > > > > > The concept of an edge as having a start and an end node doesn't > translate well into the world of hyper edges. > > > There is not necessarily a start node and an end node, > > > instead there are various nodes that are distinctly attached to the > hyper edge. > > > > > > One way to think about an edge in both the graph and in the hypergraph > world is as a tuple. > > > > > > A binary relationship can be thought of as the tuple: > > > > > > (node1, node2, RelationshipType, Set(property)) > > > > > > A ternary relationship can be thought of as the tuple: > > > > > > (node1, node2, node3, RelationshipType, Set(property)) > > > > > > etc... > > > > > > Instead of marking a binary relationship as outgoing or incoming, we > can use the position in the tuple to denote its role. > > > We can say the first node in the tuple corresponds to the start node, > and the second node in the tuple corresponds to the end node. > > > Having two possible permutations relates to the two possible directions > an edge can have. > > > > > > Position based definitions of relationships translate well into the > domain of n-ary relationships, > > > though the semantics of such relationships can easily become difficult. > > > A ternary relationship already has 6 permutations for the attached > nodes, > > > while a 10-ary relationship has 3,628,800 possible permutations. > > > > > > It would be an interesting project to design a tuple-position-based > traverser. > > > For binary relationships it should have the exact same features as the > current direction based traverser, > > > but it would be possible to generalize that design to n-ary > relationships. > > > This can all be done as a libary. > > > > > > Only when perfomance can be really improved in core, does it make sense > to request for native support. > > > > > > Niels > > >> Date: Sat, 16 Jul 2011 19:31:22 +0200 > > >> From: [email protected] > > >> To: [email protected] > > >> Subject: Re: [Neo4j] Hyperedges and Objects > > >> > > >> That's clear. Such mappings are more difficult to traverse since the > > >> traverser has to know if there is such a hyper edge vertex. I'm > > >> wondering if there is no need to provide an embedded solution for such > a > > >> transformation. Each user who is confronted with hyper edges has to > > >> implement some kind of such mapping. It would be helpful, for example, > > >> if each Neo4j relationship can manage hyper edges automatically and > > >> provide an additional 'isHyper' method pointing out that there are > > >> additional methods allowing to get all further incident nodes. This is > > >> also a matter of performance. I think such a handling is implemented > > >> most efficiently within the Neo4j engine. > > >> > > >> Best regards > > >> > > >> Norbert Tausch > > >> > > >> Am 16.07.2011 00:52, schrieb Niels Hoogeveen: > > >>> Hyper edges can be emulated. > > >>> Suppose you want to store the fact "John gives Pete a book". > > >>> This is indeed a ternary relationship, which would call for an hyper > edge. > > >>> This fact can be stored as follows: > > >>> Some act of giving --Giver-->JohnSome act of giving --Recipient--> > PeteSome act of giving --Gift--> book > > >>> N-ary relationships can generally be decomposed into N binary > relationships, where a central node is used to used as a placeholder for the > N-ary relationship. > > >>> Complex types can either be stored into a byte array or if > appropriate in multiple properties. > > >>> > > >>> > > >>>> Date: Sat, 16 Jul 2011 00:04:15 +0200 > > >>>> From: [email protected] > > >>>> To: [email protected] > > >>>> Subject: [Neo4j] Hyperedges and Objects > > >>>> > > >>>> Hi, > > >>>> > > >>>> is there a possibility to store hyper edges in Neo4j? Is there a > plan to > > >>>> implement this? > > >>>> > > >>>> Will Neo4j get the ability to store complex types in addition to > > >>>> primitve data types for properties of nodes and relationships? > > >>>> > > >>>> -- > > >>>> Best regards > > >>>> > > >>>> Norbert Tausch > > >>>> > > >>>> _______________________________________________ > > >>>> Neo4j mailing list > > >>>> [email protected] > > >>>> https://lists.neo4j.org/mailman/listinfo/user > > >>> > > >>> _______________________________________________ > > >>> Neo4j mailing list > > >>> [email protected] > > >>> https://lists.neo4j.org/mailman/listinfo/user > > >> _______________________________________________ > > >> Neo4j mailing list > > >> [email protected] > > >> https://lists.neo4j.org/mailman/listinfo/user > > > > > > _______________________________________________ > > > Neo4j mailing list > > > [email protected] > > > https://lists.neo4j.org/mailman/listinfo/user > > > > _______________________________________________ > > Neo4j mailing list > > [email protected] > > https://lists.neo4j.org/mailman/listinfo/user > > _______________________________________________ > 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

