Cool Nils,
where should it live? Some own package or?

Cheers,

/peter neubauer

GTalk:      neubauer.peter
Skype       peter.neubauer
Phone       +46 704 106975
LinkedIn   http://www.linkedin.com/in/neubauer
Twitter      http://twitter.com/peterneubauer

http://www.neo4j.org               - Your high performance graph database.
http://startupbootcamp.org/    - Öresund - Innovation happens HERE.
http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party.



On Thu, Jul 21, 2011 at 8:32 PM, Niels Hoogeveen
<pd_aficion...@hotmail.com> wrote:
>
> 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: pd_aficion...@hotmail.com
> To: user@lists.neo4j.org
> 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: michael.hun...@neotechnology.com
>> Date: Sat, 16 Jul 2011 23:37:48 +0200
>> To: user@lists.neo4j.org
>> 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: ntausc...@gmail.com
>> >> To: user@lists.neo4j.org
>> >> 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: ntausc...@gmail.com
>> >>>> To: user@lists.neo4j.org
>> >>>> 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
>> >>>> User@lists.neo4j.org
>> >>>> https://lists.neo4j.org/mailman/listinfo/user
>> >>>
>> >>> _______________________________________________
>> >>> Neo4j mailing list
>> >>> User@lists.neo4j.org
>> >>> https://lists.neo4j.org/mailman/listinfo/user
>> >> _______________________________________________
>> >> Neo4j mailing list
>> >> User@lists.neo4j.org
>> >> https://lists.neo4j.org/mailman/listinfo/user
>> >
>> > _______________________________________________
>> > Neo4j mailing list
>> > User@lists.neo4j.org
>> > https://lists.neo4j.org/mailman/listinfo/user
>>
>> _______________________________________________
>> Neo4j mailing list
>> User@lists.neo4j.org
>> https://lists.neo4j.org/mailman/listinfo/user
>
> _______________________________________________
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
_______________________________________________
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to