OK cool, that gives me some context. I'll put together some ideas over the next few days and we can compare notes :-)
*Nigel Small* Phone: +44 7814 638 246 Blog: http://nigelsmall.name/ GTalk: ni...@nigelsmall.name MSN: nasm...@live.co.uk Skype: technige Twitter: @technige <https://twitter.com/#%21/technige> LinkedIn: http://uk.linkedin.com/in/nigelsmall On 2 December 2011 01:02, Michael Hunger <michael.hun...@neotechnology.com>wrote: > Peter and I have been discussing what interchange format we'd like to have > for applications feeding data into a graph. > > And geoff seems to be quite a good choice. > > Modifying and accessing indexes (much like in-file-hooks) would be a part > of that. > > So what I imagine is a set of connectors to outside services which are > producing geoff which is then consumed by a server plugin (e.g. for hosted > neo4j services on heroku). Much like STDIN and STDOUT between unix command > line tools. > > Having a declarative format that aligns more with cypher is preferable to > a imperative format like the REST API or Gremlin. > > That's why I would also like to look into aligning the syntax with the > cypher syntax, actually I'm more fond of the iconographic syntax but there > are some drawbacks on readability for people. > > That's some of the reasoning behind it. > > Cheers > > Michael > > Am 02.12.2011 um 01:49 schrieb Nigel Small: > > > Hi Michael > > > > GEOFF was originally conceived as a graph serialisation format and, as > > such, was intended to represent a snapshot of entities at a particular > > point in time instead of, as you are discussing, a programmatic set of > > actions (add, replace, remove, etc). That said, these ideas are still > worth > > exploring... > > > > First off, since hooks are the "variables" of GEOFF, it would seem > > consistent to use those for assigning the return values of index lookups > > and queries. Something like the following could be used to perform an > index > > query, assign the result to a hook and use that hook to build a > > relationship: > > > > {foo} := |index| @ {"key": "value"} > > {foo}-[:KNOWS]->(bar) > > > > Actually, since the index query may result in multiple returned entities, > > we might want to limit to the first item returned: > > > > {foo} := |index| @ {"key":"value"} > > {foo.1}-[:KNOWS]->(bar) > > > > Using the other operators for adding, removing and replacing index > entries, > > this would make... > > > > # add node bert to index at foo:bar > > |index| @ {"foo": "bar"} += (bert) > > > > # remove node bert from index at foo:bar > > |index| @ {"foo": "bar"} -= (bert) > > > > # replace node with bert in index at foo:bar > > |index| @ {"foo": "bar"} := (bert) > > > > So essentially, we would be looking at at least the following > requirements: > > > > 1. Allow hooks to hold multiple entities instead of just a single > entity > > 2. Allow assignment to hooks > > 3. Implement an "@" operator to allow inline index queries > > 4. Implement assignment, addition and removal operators to indexes > > > > These ideas would turn GEOFF into much more of a programming language > than > > a notation for serialisation: a big change and one which would > potentially > > require another significant rewrite. I'm not against doing this but I'm > > wondering if this is a valuable direction to go in and whether, if we > were > > to do this, it would be better to start from first principles instead. > > Would this fill a gap that none of the other current options can? > > Cheers > > > > Nige > > > > *Nigel Small* > > Phone: +44 7814 638 246 > > Blog: http://nigelsmall.name/ > > GTalk: ni...@nigelsmall.name > > MSN: nasm...@live.co.uk > > Skype: technige > > Twitter: @technige <https://twitter.com/#%21/technige> > > LinkedIn: http://uk.linkedin.com/in/nigelsmall > > > > > > > > On 1 December 2011 21:47, Michael Hunger > > <michael.hun...@neotechnology.com>wrote: > > > >> Nigel, > >> > >> is it possible to also do index-lookups in geoff? > >> and use those as nodes or rels or even as hooks for later on? > >> > >> I'm also toying with two other ideas: > >> #1 using indexes as the third primitive besides nodes and rels in geoff > >> just with a different delimeter (e.g. | as you already have) > >> #2 giving indexes a similar semantics as relationships to category nodes > >> (which is the same for in-graph indexes, where the index-name is the > >> category-type and indexed key-values are properties on the relationship > or > >> relationships) > >> > >> I'm not really satisfied with the syntaxes I came up with and would like > >> to brainstorm that. > >> > >> |index| -{"foo":"bar"} ->(bert) > >> > >> > >> some ideas for alternative index syntaxes > >> #add > >> |index:{"foo":"bar"}|+={foo} > >> # replace > >> |index:{"foo":"bar"}|={foo} > >> # remove > >> |index:{"foo":"bar"}|-={foo} > >> > >> #query > >> |index:{"foo":"bar"}| -[:KNOWS]->(bert) > >> |index:"querystring"| -[:KNOWS]->(bert) > >> > >> Am 01.12.2011 um 01:32 schrieb Nigel Small: > >> > >>> Peter: I am happy with the current state of the neo4j-geoff code so > feel > >> it > >>> should be stable enough to adopt when you wish to do so. I have also > >> made a > >>> couple of recent updates to the documentation, most notably the > GEOFF.md > >>> file. > >>> > >>> Cheers > >>> > >>> Nige > >>> > >>> *Nigel Small* > >>> Phone: +44 7814 638 246 > >>> Blog: http://nigelsmall.name/ > >>> GTalk: ni...@nigelsmall.name > >>> MSN: nasm...@live.co.uk > >>> Skype: technige > >>> Twitter: @technige <https://twitter.com/#%21/technige> > >>> LinkedIn: http://uk.linkedin.com/in/nigelsmall > >>> > >>> > >>> > >>> On 29 November 2011 23:33, Michael Hunger > >>> <michael.hun...@neotechnology.com>wrote: > >>> > >>>> #1 Thanks > >>>> #2 You're probably right > >>>> > >>>> #3 You can do the index lookup outside and pass in the IndexHits<Node> > >> as > >>>> being and Iterator > >>>> #3 I rather thought of {name} for |people| -> {name: {hook}} as a > >> shortcut > >>>> for that > >>>> > >>>> Michael > >>>> > >>>> But #2 and #3 are probably overkill anyway. > >>>> > >>>> Cheers > >>>> > >>>> Michael > >>>> > >>>> Am 29.11.2011 um 23:59 schrieb Nigel Small: > >>>> > >>>>> Hi Michael > >>>>> > >>>>>> Probably better to just return the full map and let the client code > >> deal > >>>>> with it ? (If it isn't interested it would either just ignore the > >> return > >>>>> result or discard it quickly). > >>>>> Done. Now works as: > >>>>> > >>>>> Map<String,PropertyContainer> entities = > >>>> GEOFFLoader.loadIntoNeo4j(reader, > >>>>> db, hooks); > >>>>> Node nodeFoo = (Node) entities.get("(foo)"); > >>>>> Node nodeBar = (Node) entities.get("(bar)"); > >>>>> > >>>>>> Intention behind longs, is when I get them from an external source > >> then > >>>>> they can be used to be look up nodes during import. > >>>>> This can be done but not sure it's the right place... I'm cautious > >> about > >>>>> using IDs directly as they aren't very portable. Also, it's not > >> intuitive > >>>>> whether an ID is for a node or relationship. Would like to get a few > >>>> votes > >>>>> on this - I'm happy to be outvoted if the consensus is to do it! > >>>>> > >>>>>> Also can hooks be used for index lookups? (Just asking) > >>>>> Are you thinking of something like "{People:name=bert}"? If so, this > is > >>>>> quite a distance from where we are currently since every token can > only > >>>>> refer to a single entity, whereas an index lookup could return > multiple > >>>>> results. > >>>>> > >>>>> Nige > >>>>> > >>>>> *Nigel Small* > >>>>> Phone: +44 7814 638 246 > >>>>> Blog: http://nigelsmall.name/ > >>>>> GTalk: ni...@nigelsmall.name > >>>>> MSN: nasm...@live.co.uk > >>>>> Skype: technige > >>>>> Twitter: @technige <https://twitter.com/#%21/technige> > >>>>> LinkedIn: http://uk.linkedin.com/in/nigelsmall > >>>>> > >>>>> > >>>>> > >>>>> On 29 November 2011 22:09, Michael Hunger > >>>>> <michael.hun...@neotechnology.com>wrote: > >>>>> > >>>>>> Hmm good question, that means the namespace keeps everything around > >>>> until > >>>>>> it is gc'ed ? > >>>>>> > >>>>>> Probably better to just return the full map and let the client code > >> deal > >>>>>> with it ? (If it isn't interested it would either just ignore the > >> return > >>>>>> result or discard it quickly). > >>>>>> > >>>>>> Intention behind longs, is when I get them from an external source > >> then > >>>>>> they can be used to be look up nodes during import. > >>>>>> > >>>>>> Also can hooks be used for index lookups? (Just asking) > >>>>>> > >>>>>> Thanks a lot > >>>>>> > >>>>>> Michael > >>>>>> > >>>>>> Am 29.11.2011 um 22:58 schrieb Nigel Small: > >>>>>> > >>>>>>> Hi Michael > >>>>>>> > >>>>>>> Doesn't handle iterables (yet) but should be quite easy to add in. > >> What > >>>>>>> purpose did you have behind longs? > >>>>>>> > >>>>>>> I've just committed a few new methods allowing the Neo4jNamespace > >>>>>> returned > >>>>>>> from a loadIntoNeo4j call to be used to retrieve new entities by > name > >>>>>> (or a > >>>>>>> map of such). The new methods are: > >>>>>>> > >>>>>>> public Node getPreexistingNode(String name) > >>>>>>> public Map<String, Node> getPreexistingNodes(String... names) > >>>>>>> public Node getNewlyCreatedNode(String name) > >>>>>>> public Map<String, Node> getNewlyCreatedNodes(String... names) > >>>>>>> public Relationship getPreexistingRelationship(String name) > >>>>>>> public Map<String, Relationship> > >> getPreexistingRelationships(String... > >>>>>>> names) > >>>>>>> public Relationship getNewlyCreatedRelationship(String name) > >>>>>>> public Map<String, Relationship> > >> getNewlyCreatedRelationships(String... > >>>>>>> names) > >>>>>>> > >>>>>>> One of the tests in GraphDescriptionTest illustrates simple usage, > >>>> thus: > >>>>>>> > >>>>>>> Neo4jNamespace ns = GEOFFLoader.loadIntoNeo4j(reader, db, hooks); > >>>>>>> Node nodeFoo = ns.getNewlyCreatedNode("foo"); > >>>>>>> Node nodeBar = ns.getNewlyCreatedNode("bar"); > >>>>>>> > >>>>>>> Hope this helps - I'll have a play with iterables next. > >>>>>>> > >>>>>>> Cheers > >>>>>>> > >>>>>>> Nige > >>>>>>> > >>>>>>> *Nigel Small* > >>>>>>> Phone: +44 7814 638 246 > >>>>>>> Blog: http://nigelsmall.name/ > >>>>>>> GTalk: ni...@nigelsmall.name > >>>>>>> MSN: nasm...@live.co.uk > >>>>>>> Skype: technige > >>>>>>> Twitter: @technige <https://twitter.com/#%21/technige> > >>>>>>> LinkedIn: http://uk.linkedin.com/in/nigelsmall > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> On 29 November 2011 15:58, Michael Hunger > >>>>>>> <michael.hun...@neotechnology.com>wrote: > >>>>>>> > >>>>>>>> does it also handle iterables of nodes/rels (and probably Longs?) > >>>>>>>> > >>>>>>>> while thinking about it > >>>>>>>> it would be great if the loader could also return a map of > variables > >>>> of > >>>>>>>> the things generated to be used further in processing > >>>>>>>> > >>>>>>>> that could also interesting for cascading geoff and/or cypher > >>>>>>>> > >>>>>>>> cool stuff big thanks > >>>>>>>> > >>>>>>>> michael > >>>>>>>> > >>>>>>>> mobile mail please excuse brevity and typos > >>>>>>>> > >>>>>>>> Am 29.11.2011 um 16:18 schrieb Peter Neubauer < > >>>>>>>> peter.neuba...@neotechnology.com>: > >>>>>>>> > >>>>>>>>> That sounds great! Let me know when you are stable, and I will > see > >> if > >>>>>>>>> I can do some more on the server plugin side, so we can shoot in > >>>>>>>>> things there! > >>>>>>>>> > >>>>>>>>> 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 - NOSQL for the Enterprise. > >>>>>>>>> http://startupbootcamp.org/ - Ă–resund - Innovation happens > >> HERE. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On Mon, Nov 28, 2011 at 9:52 PM, Nigel Small < > >> ni...@nigelsmall.name> > >>>>>>>> wrote: > >>>>>>>>>> Hi Peter > >>>>>>>>>> > >>>>>>>>>> Bulk of the work is now done on the Java version of the GEOFF > >>>>>>>> enhancements. > >>>>>>>>>> There have been some significant changes to the classes and a > >> number > >>>>>> of > >>>>>>>>>> extra tests inserted. The signature of the load method has now > >> been > >>>>>>>>>> extended to: > >>>>>>>>>> > >>>>>>>>>> public static Neo4jNamespace loadIntoNeo4j(Reader reader, > >>>>>>>>>> GraphDatabaseService graphDB, Map<String, ? extends > >>>> PropertyContainer> > >>>>>>>>>> hooks) > >>>>>>>>>> > >>>>>>>>>> ...where the final parameter expects a Map full of names > >>>>>>>>>> Nodes/Relationships which may then be referenced from within the > >>>> GEOFF > >>>>>>>>>> source. > >>>>>>>>>> > >>>>>>>>>> Let me know how you get on and give me a shout if I've forgotten > >>>>>>>> anything > >>>>>>>>>> :-) > >>>>>>>>>> > >>>>>>>>>> Cheers > >>>>>>>>>> > >>>>>>>>>> Nige > >>>>>>>>>> > >>>>>>>>>> *Nigel Small* > >>>>>>>>>> Phone: +44 7814 638 246 > >>>>>>>>>> Blog: http://nigelsmall.name/ > >>>>>>>>>> GTalk: ni...@nigelsmall.name > >>>>>>>>>> MSN: nasm...@live.co.uk > >>>>>>>>>> Skype: technige > >>>>>>>>>> Twitter: @technige <https://twitter.com/#%21/technige> > >>>>>>>>>> LinkedIn: http://uk.linkedin.com/in/nigelsmall > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> On 23 November 2011 10:12, Peter Neubauer <pe...@neubauer.se> > >>>> wrote: > >>>>>>>>>> > >>>>>>>>>>> Looks great to me Nigel! I think this is a very good first step > >> on > >>>>>>>>>>> parameters. Let me know when you are done with the Java code, > >> would > >>>>>>>>>>> like to bring this into the @Graph annotations after our next > >>>>>>>>>>> milestone release, 1.6.M01. > >>>>>>>>>>> > >>>>>>>>>>> /peter > >>>>>>>>>>> > >>>>>>>>>>> On Tue, Nov 22, 2011 at 10:14 PM, Nigel Small < > >>>> ni...@nigelsmall.name > >>>>>>> > >>>>>>>>>>> wrote: > >>>>>>>>>>>> Hi all > >>>>>>>>>>>> > >>>>>>>>>>>> I have just completed a set of GEOFF enhancements within > py2neo > >>>> (as > >>>>>>>> yet > >>>>>>>>>>>> only available from GitHub). Named parameters (hooks) and > >>>> composite > >>>>>>>>>>>> descriptors are now supported, please see the following sample > >>>> file > >>>>>>>> for > >>>>>>>>>>> an > >>>>>>>>>>>> illustration of the new capabilites: > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>> > >>>>>> > >>>> > >> > https://github.com/nigelsmall/py2neo/blob/master/src/py2neo-examples/geoff/node-hooks.geoff > >>>>>>>>>>>> > >>>>>>>>>>>> In addition, a change has been made for index entries to use > >> |foo| > >>>>>>>> syntax > >>>>>>>>>>>> instead of {foo} syntax as previously (although the old syntax > >>>> will > >>>>>>>> still > >>>>>>>>>>>> work for now). > >>>>>>>>>>>> > >>>>>>>>>>>> Finally, there is a new wiki page detailing the current format > >> in > >>>>>>>> full: > >>>>>>>>>>>> > >>>>>>>>>>>> https://github.com/nigelsmall/py2neo/wiki/GEOFF > >>>>>>>>>>>> > >>>>>>>>>>>> I will now start planning the set of work required for the > >>>>>> neo4j-geoff > >>>>>>>>>>>> project to bring that up to the same level. > >>>>>>>>>>>> > >>>>>>>>>>>> Cheers > >>>>>>>>>>>> > >>>>>>>>>>>> Nige > >>>>>>>>>>>> > >>>>>>>>>>>> *Nigel Small* > >>>>>>>>>>>> Phone: +44 7814 638 246 > >>>>>>>>>>>> Blog: http://nigelsmall.name/ > >>>>>>>>>>>> GTalk: ni...@nigelsmall.name > >>>>>>>>>>>> MSN: nasm...@live.co.uk > >>>>>>>>>>>> Skype: technige > >>>>>>>>>>>> Twitter: @technige <https://twitter.com/#!/technige> > >>>>>>>>>>>> LinkedIn: http://uk.linkedin.com/in/nigelsmall > >>>>>>>>>>>> _______________________________________________ > >>>>>>>>>>>> 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 > >>>>>> > >>>>> _______________________________________________ > >>>>> 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