Very cool Johann. Mind writing this into a short blog post? Would love to see this code and some short illustration on this, even for others to learn from it ...
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 Tue, Nov 29, 2011 at 1:59 PM, jschweigl <johann.schwe...@gmail.com> wrote: > Thanks for all the replies. To explain what I am doing: I'm harvesting > information from the software engineering tool some guys here are using: > Excel (gawk!). Excel sheets are parsed and converted to graphs, > incrementally enriched with properties as I digest subsequent sheets so that > at the end I get a database of everything which I intend to use for export > into something useful like Enterprise Architect from Sparx. > > The queries I write should do some kind of QA, showing inconsistencies > introduced by typos in the sheets or incorrect parsing of free text in the > cells. The model excerpt we are looking at is > > http://neo4j-community-discussions.438527.n3.nabble.com/file/n3545086/mockups.png > > There are some phenomena I do not understand regarding the query syntax and > the resulting nodes: > > - Query 6 lists all mockups with no relations: 27 items, fine > - Query 7 lists all mockups linked to a scenario but not linked to any > subprocess: 53 > - Query 8 lists all mockups linked to a subprocess but not linked to any > scenario: 53. Exactly the same ones > - Query 9 lists all mockups linked to both at least one subprocess and > scenario: 53. Again, exactly the same ones > > Query 10 and 11 are the same as 9 and 10, but written according to the hints > from the forum. > - Query 10 returns no nodes, which I believe is correct, at least according > to an overview supplied with the Excel sheet and a few random samples > - Query 11 returns a node with _id and mockupName being <null> - huh? I'm > using a quickly hacked POJO mapping layer. jo4neo only works up to neo 1.4 > so I came up with my own which does the absolute minimum I needed for the > job, but as _id is the primary key, I'm pretty sure I don't store such > nodes. A bug is always possible, but > - Query 19 lists all mockup nodes and there is no one with <null> in both > fields. > > The math: there are 27 unlinked nodes, queries 7, 8, and 9 retrieve the very > same 53 nodes which I believe to be linked to both scenarios and > subprocesses so either the query or the result must be wrong and query 19 > delivers a total of 80 nodes. 27 + 53 = 80. > > As I already said I'm not familiar with neo and cypher yet, but I do not see > the semantic difference between queries 7 and 8 vs. 10 and 11, yet the > results differ significantly, and this even between 10 and 11. > > As an overview, here are the queries and the (shortened) output: > > > 6: Unused mockups > START mock=node:nodeIndex(_simpleType = 'Mockup') MATCH > ()-[r?:HAS_MOCKUP]->mock WHERE r IS NULL RETURN distinct mock._id, > mock.mockupName ORDER BY mock.mockupName > +--------------------------------------------------------+ > | mock._id | mock.mockupName | > +--------------------------------------------------------+ > | e80cdb81-9283-3279-9ec4-1c27ace2a3fd | K01-05 | > | 5095c15a-3230-3b5a-aa03-acd45057470b | K01-07-0 | > ... > | 6ba433d8-5989-399a-b463-8a088eafe756 | P2-P04-8-2 | > | b3209a20-2081-3444-9047-4615bc6b95b3 | RAO-4-2 | > +--------------------------------------------------------+ > 27 rows, 37 ms > > 7: Mockup linked to scenario not used by any subprocess > START scenario=node:nodeIndex(_simpleType = 'Scenario'), > sub=node:nodeIndex(_simpleType = 'Subprocess') MATCH > scenario-[:HAS_MOCKUP]->mock<-[r?:HAS_MOCKUP]-sub WHERE r IS NULL RETURN > distinct mock._id, mock.mockupName ORDER BY mock.mockupName > +--------------------------------------------------------+ > | mock._id | mock.mockupName | > +--------------------------------------------------------+ > | 81a05542-99b2-3672-8498-a31770562416 | K00-1-1 | > | 7bc08fcc-6380-3ba3-810c-b61d85e9d5d4 | K00-2-2 | > ... > | 0adf74e4-b28f-3301-b903-c65697129c24 | P2-P05-2-1 | > | 4db08241-c9d7-3ac4-a453-6e8b5957efdb | P2-P05-2-2 | > +--------------------------------------------------------+ > 53 rows, 739 ms > > 8: Mockup linked to subprocess not used by any scenario > START scenario=node:nodeIndex(_simpleType = 'Scenario'), > sub=node:nodeIndex(_simpleType = 'Subprocess') MATCH > sub-[:HAS_MOCKUP]->mock<-[r?:HAS_MOCKUP]-scenario WHERE r IS NULL RETURN > distinct mock._id, mock.mockupName ORDER BY mock.mockupName > +--------------------------------------------------------+ > | mock._id | mock.mockupName | > +--------------------------------------------------------+ > | 81a05542-99b2-3672-8498-a31770562416 | K00-1-1 | > | 7bc08fcc-6380-3ba3-810c-b61d85e9d5d4 | K00-2-2 | > ... > | 0adf74e4-b28f-3301-b903-c65697129c24 | P2-P05-2-1 | > | 4db08241-c9d7-3ac4-a453-6e8b5957efdb | P2-P05-2-2 | > +--------------------------------------------------------+ > 53 rows, 987 ms > > 9: Test: Mockups linked to both scenario and subprocess > START scenario=node:nodeIndex(_simpleType = 'Scenario'), > sub=node:nodeIndex(_simpleType = 'Subprocess') MATCH > sub-[:HAS_MOCKUP]->mock<-[:HAS_MOCKUP]-scenario RETURN distinct mock._id, > mock.mockupName ORDER BY mock.mockupName > +--------------------------------------------------------+ > | mock._id | mock.mockupName | > +--------------------------------------------------------+ > | 81a05542-99b2-3672-8498-a31770562416 | K00-1-1 | > | 7bc08fcc-6380-3ba3-810c-b61d85e9d5d4 | K00-2-2 | > ... > | 0adf74e4-b28f-3301-b903-c65697129c24 | P2-P05-2-1 | > | 4db08241-c9d7-3ac4-a453-6e8b5957efdb | P2-P05-2-2 | > +--------------------------------------------------------+ > 53 rows, 430 ms > > 10: Test: Mockup linked to scenario not used by any subprocess > START scenario=node:nodeIndex(_simpleType = 'Scenario'), > sub=node:nodeIndex(_simpleType = 'Subprocess') MATCH > scenario-[:HAS_MOCKUP]->mock, subprocess-[r?:HAS_MOCKUP]->mock WHERE r IS > NULL RETURN distinct mock._id, mock.mockupName ORDER BY mock.mockupName > +----------------------------+ > | mock._id | mock.mockupName | > +----------------------------+ > +----------------------------+ > 0 rows, 1997 ms > > 11: Test: Mockup linked to subprocess not used by any scenario > START scenario=node:nodeIndex(_simpleType = 'Scenario'), > sub=node:nodeIndex(_simpleType = 'Subprocess') MATCH > scenario-[r?:HAS_MOCKUP]->mock, subprocess-[:HAS_MOCKUP]->mock WHERE r IS > NULL RETURN distinct mock._id, mock.mockupName ORDER BY mock.mockupName > +----------------------------+ > | mock._id | mock.mockupName | > +----------------------------+ > | <null> | <null> | > +----------------------------+ > 1 rows, 1750 ms > > 19: All Mockups > START mock=node:nodeIndex(_simpleType = 'Mockup') RETURN mock.mockupName > ORDER BY mock.mockupName > +-----------------+ > | mock.mockupName | > +-----------------+ > | K00-1-1 | > | K00-2-2 | > ... > | P2-P05-2-2 | > | RAO-4-2 | > +-----------------+ > 80 rows, 3 ms > > -- > View this message in context: > http://neo4j-community-discussions.438527.n3.nabble.com/cypher-question-subqueries-possible-tp3543685p3545086.html > Sent from the Neo4j Community Discussions mailing list archive at Nabble.com. > _______________________________________________ > 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