Hi John, your current model looks very verbose. Is there any reason besides "semantically sloppy edges" to model it in this verbose way? I'm not sure whether this "hyperedge imitation" is really necessary. You can also utilise URIs (or prefixed URIs) as identifiers for relationship types. Furthermore, in a property graph you can assign properties (e.g. qualified attributes) to relationships as well. The model we've implemented in the d:swarm graph extension is rather expensive, since the common use case for property graphs is to assign literal properties as property at nodes (rather then via an extra relationship) and "only" utilise relationships when connecting two entities (i.e. not everything as node-edge-node statement). Your model is (from my understanding) even more expensive then the one of the d:swarm graph extension. So I think you need very important reasons, if you would like to go this way. Otherwise, I would recommend to revise your model to a more simple one.
just my 5p ;-) Cheers, Bo On Monday, March 14, 2016 at 6:24:27 PM UTC+1, John O'Gorman wrote: > Hi Bo - I think you may have put me back on track. > > The answer to you question is both: I drew up a summary of the problem > (that I should have posted first) so apologies for the fogginess of my > original posts. > > Here it is: > > All of my nodes are designed for reuse. I use GUIDs as identifiers. See > the Declarative diagram, below. > > > <https://lh3.googleusercontent.com/-XbMQCiJUv1c/VubwM6Cga5I/AAAAAAAAABM/lbWkOHnPMqEfhODV9riPgg2XvffHHZSxg/s1600/Declarative%2BNode.png> > > > > > When I create a statement (graph) I associate three nodes to create a > relationship. The reason I use nodes to establish the nature of the > relationship is to avoid semantically sloppy edges. For example, I could > use "Lives_In" or "Resides_In" or "Has_Home_In" to connect 'Fred > Flintstone' and 'Bedrock' but I chose to model it this way: > > > <https://lh3.googleusercontent.com/-G1yk9Kr1tTg/VubxYN7gBbI/AAAAAAAAABU/FSnibf3PGboH3B82Yb0cyrq3MO-sxB3eA/s1600/Associative%2BNode%2BFred.png> > > > The statement: "Fred Flintstone Is A Resident of Bedrock" is true and > navigable. I have assigned it a GUID to help describe what I want to do > after I load more relationships. But here is where I get into some > trouble. When I make a statement about Fred's friend Gill I want to reuse > the "Resident" node: > > > <https://lh3.googleusercontent.com/-Bm3Y_dbpRx0/VubyZMrtc0I/AAAAAAAAABc/7pi_QG0DNVQxq595v68VUvfsehOm89fGA/s1600/Associative%2BNode%2BGill.png> > > Again, I assigned a GUID for the statement as a place-holder. When I load > all this into Neo4J (not including the statement GUIDs) I get this: > > > > <https://lh3.googleusercontent.com/-f2K1R_UE8ec/Vuby4PXlCqI/AAAAAAAAABg/KzqCT3_H1qsVoOi0QxPmxLR_rCZEMum-A/s1600/Graph%2BLayout.png> > > > Without the statement GUIDs in there somewhere, the residency of both Fred > and Gill is in doubt, yes? > > I will read the material you sent (many, many thanks) and see if what you > are proposing solves this dilemma for me. > > Best regards. > > John O' > > On Sunday, March 13, 2016 at 7:57:04 AM UTC-6, Bo Ferri wrote: >> >> Hi John, >> >> I'm not really sure what you are looking for. Are you looking for >> >> 1. identifiers for single statements a.k.a. triples, i.e., node-edge-node >> parts >> >> or >> >> 2. identifiers for (sub) graphs,i.e., multiple statements >> (node-edge-node) that belong together; this can be for example Concise >> Bounded Descriptions (CBD, [1]), i.e., flat or hierarchical records, or >> Named Graphs [2] >> >> For our datamanagement platform d:swarm [3] we dealt with both issues, >> i.e., we assign statement identifiers to every (content) relationship >> (/statement) in our graph in form of a hash and furthermore we are able to >> divide the graph into multiple named graphs (which are named 'data model' >> in our domain model). See [4] for an example of how this can be look like. >> There you can see a single record with a hierarchical structure. In [5] you >> can see a flat record, whereby a relationship is selected. There you can >> see the data model identifier (a prefixed URI), a resource identifier (a >> hash; which is especially important for hierarchical records) and a >> statement identifier (a hashed UUID). Furthermore, properties at >> relationships enable us to add further qualified statements, e.g., order or >> version range. >> All this is baked into a (experimental) Neo4j Unmanaged Extension [6,7]. >> >> Maybe this is something you are looking for, or maybe it helps you to >> express what you are looking for (at least ;) ). >> >> Cheers, >> >> >> Bo >> >> >> [1] https://www.w3.org/Submission/CBD/ >> [2] https://en.wikipedia.org/wiki/Named_graph >> [3] https://github.com/dswarm/dswarm-documentation/wiki >> [4] >> https://docs.google.com/presentation/d/1Aa_JM8YjSOF3A4LPm0ZuoFWzu5h-NN7VtygAE0WG97Q/pub?start=false&loop=false&delayms=60000#slide=id.g58f97b25d_0_280 >> [5] >> https://docs.google.com/presentation/d/1Aa_JM8YjSOF3A4LPm0ZuoFWzu5h-NN7VtygAE0WG97Q/pub?start=false&loop=false&delayms=60000#slide=id.g58f97b25d_0_292 >> [6] https://github.com/dswarm/dswarm-graph-neo4j >> [7] https://github.com/dswarm/dswarm-documentation/wiki/Graph-Data-Model >> >> >> On Saturday, March 12, 2016 at 4:39:45 PM UTC+1, John O'Gorman wrote: >>> >>> Maybe I can try to clarify my ideas a bit. >>> >>> When a cluster of nodes is persistent (the same nodes relate to each >>> other to, say, uniquely identify an individual person) I would like to be >>> able to link the cluster without losing the identity of the component >>> nodes. Since all my individual nodes are potentially reusable I can still >>> connect to them if a design requires it, but creating a relationship to a >>> cluster should be similar to doing a join without knowing what other >>> information is attached. >>> >>> Clear as mud? >>> >>> >>> >>> On Thursday, March 10, 2016 at 12:31:49 PM UTC-7, John O'Gorman wrote: >>>> >>>> I am working with a Neo4J model that uses a finite set of Labels based >>>> on the six interrogatives (Who, What, When, Where, Why and How) and on a >>>> similarly constrained set of relationships: Is_A, Is_Has, Is_Part_Has, >>>> Is_Precedent_Has, Is_Equivalent_Has and Is_Property_Has. Since the >>>> nature >>>> of a Relationship in this model uses nodes instead of arbitrary edges >>>> (i.e. >>>> "Lives_In" for the example below, I end up with statements (in pseudo >>>> Cypher) like the following: >>>> >>>> :Person {'Fred Flinstone'} - [:Is_Has] -> :Status {'Resident'} <- >>>> [:Is_Has} - :Place {'Bedrock'} >>>> >>>> My question is: I was wondering if I can assign a unique identifier >>>> (or a URI) to the statement above in order to reference it (establish a >>>> new >>>> relationship to it) later. >>>> >>>> I am thinking it would be a better alternative than hyper-edges. >>>> >>>> Thoughts? Other than (WTH is he thinking?) :D >>>> >>>> Thanks. >>>> >>> -- You received this message because you are subscribed to the Google Groups "Neo4j" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
