Good points and worth adding. 
Let me first finish the work I am doing now, which implements the current API 
and adds some methods that mirror the current API, then we can start looking at 
making things even niftier.
Niels

> From: [email protected]
> Date: Thu, 21 Jul 2011 20:37:52 +0200
> To: [email protected]
> Subject: Re: [Neo4j] Hyperedges and Objects
> 
> Perhaps we can also add to this enhanced API:
> 
> * creation of nodes and rels with a initial map of properties, with optional 
> auto-indexing of some of those properties
> * a getOrCreate method
> * fluent, chained API for creating stuff in a readable language
> * getRelationshipCount()
> * some more that I forgot :)
> 
> Michael, pulling his wishlist
> 
> Am 21.07.2011 um 20:32 schrieb Niels Hoogeveen:
> 
> > 
> > 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
> 
> _______________________________________________
> 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