SLIDE 1
Cypher for Gremlin And more... And more... And - - PowerPoint PPT Presentation
Cypher for Gremlin And more... And more... And - - PowerPoint PPT Presentation
Cypher for Gremlin And more... And more... And more... MATCH (p:Planet)-[orbit:ORBITS]->(:Star {name: 'Sun'}) WHERE orbit.au < 5 RETURN p AS planet; g.V().as('p').hasLabel('Planet')
SLIDE 2
SLIDE 3
Cypher for Gremlin
And more... And more... And more...
SLIDE 4
MATCH (p:Planet)-[orbit:ORBITS]->(:Star {name: 'Sun'}) WHERE orbit.au < 5 RETURN p AS planet; g.V().as('p').hasLabel('Planet') .outE('ORBITS').has('au', lt(5)) .inV().hasLabel('Star').has('name', eq('Sun')) .select('p').project('planet').by(valueMap().with(tokens))
SLIDE 5
- And more...
SLIDE 6
- ○
- ○
SLIDE 7
SLIDE 8
SLIDE 9
SLIDE 10
- gremlin(...)
- MATCH (n:person {name: 'marko'})
RETURN gremlin("select('n').outE().label()") as r
SLIDE 11
Translator<String, GroovyPredicate> translator = Translator.builder() .gremlinGroovy() .enableCypherExtensions() .enable(TranslatorFeature.EXPERIMENTAL_GREMLIN_FUNCTION) .build();
SLIDE 12
* As suggested in GQL Scope and Features
SLIDE 13
QUERY friends($a VERTEX) { MATCH ($a)-[:FRIEND_OF]-(b) RETURN count(b) AS num_friends } CALL friends(a) YIELD num_friends QUERY friends($a VERTEX) { FOREIGN "gremlin" CALL "a.outE('FRIEND_OF').count().as('num_friends')" YIELD num_friends::NUMERIC } Prototype
SLIDE 14
- MATCH (n)
FOREIGN "gremlin" USING n CALL "n.hasLabel('person').as('p').values('age').as('b')" YIELD p, b RETURN labels(p)[0] as a, b LIMIT 1 Prototype
SLIDE 15
MATCH (n) FOREIGN "gremlin" CALL "select('n').hasLabel('person').as('p').values('age').as('b')" YIELD p, b RETURN labels(p)[0] as a, b LIMIT 1 Prototype
SLIDE 16
- MATCH (n)
FOREIGN "gremlin" CALL "select('n').hasLabel('person').as('p').values('age').as('b')" YIELD p::NODE, b::NUMERIC RETURN labels(p)[0] as a, b LIMIT 1 Prototype
SLIDE 17
- WITH 1 as n
FOREIGN "gremlin" CALL "constant(2).as('n')" RETURN n //n = 1 Prototype
SLIDE 18
SLIDE 19
SLIDE 20
- gremlin> g.cypher("MATCH (n) RETURN n").select("n").outE().label().dedup()
==>created ==>knows
SLIDE 21
SLIDE 22
1. 2. 3.
SLIDE 23
SELECT ?a ?b ?c WHERE { ?a v:label "person" . ?a e:knows ?b . ?a e:created ?c . ?b e:created ?c . ?a v:age ?d . FILTER (?d <= 30) } g.V().match( .as(‘a’).hasLabel(‘person’), .as(‘a’).out(‘knows’).as(‘b’), .as(‘a’).out(‘created’).as(‘c’), .as(‘b’).out(‘created’).as(‘c’), .as(‘a’).values(‘age’).as(‘d’).where('d',lte(30))).select(‘a’,’b’,’c’)
match()-step
SLIDE 24
SLIDE 25
SLIDE 26
- gremlin> :install org.apache.tinkerpop sparql-gremlin 3.4.0
==>Loaded: [org.apache.tinkerpop, sparql-gremlin, 3.4.0] gremlin> :plugin use tinkerpop.sparql ==>tinkerpop.sparql activated gremlin> graph = TinkerFactory.createModern() ==>tinkergraph[vertices:6 edges:6] gremlin> g = graph.traversal(SparqlTraversalSource) ==>sparqltraversalsource[tinkergraph[vertices:6 edges:6], standard] gremlin> g.sparql("""SELECT ?name ?age WHERE { ?person v:name ?name . ?person v:age ?age } ORDER BY ASC(?age)""") ==>[name:vadas,age:27] ==>[name:marko,age:29] ==>[name:josh,age:32] ==>[name:peter,age:35]
SLIDE 27
- gremlin>g.sparql("SELECT * WHERE { }").outE().label().dedup()
==>created ==>knows similar to …
gremlin> g.cypher("MATCH (n) RETURN n").select("n").outE().label().dedup() ==>created ==>knows
SLIDE 28
- conceptual example:
SELECT ?a WHERE { ?a v:label "person" . { GREMLIN(select(“a”).values(“name”)) } }
SLIDE 29
SELECT
SLIDE 30
http://gremlinator.iai.uni-bonn.de:8080/Demo/ http://195.201.31.31:8080/Demo/ (mirror)
SLIDE 31
SLIDE 32
- Cypher for Gremlin