Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Formal Specification of Cypher Nadime Francis University of Edinburgh Wednesday, May, 10th 1 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Property Graphs knows since : 2010 Person , Postdoc Person , Professor name : ‘Nadime’ name : ‘Leonid’ institute : ‘UoE’ institute : ‘UoE’ colleague since : 2015 A property graph is a tuple G = ( N , R , s , t , ι, λ, τ ), where: N ⊆ N : finite set of nodes R ⊆ R : finite set of relationships s : R → N : maps each relationship to its source t : R → N : maps each relationship to its target ι : ( N ∪ R ) × K → V : maps each x and k to x . k . λ : N → 2 L : associates a set of label to each node τ : R → T : associates a type to each relationship 2 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Records and Tables A record is a tuple with named fields : ( a 1 : v 1 , . . . , a n : v n ). A table is a bag of uniform records. � ( a : 1 , b : 3) , ( a : ‘oCIM 2’ , b : ‘London’ ) , � Example: ( a : ‘oCIM’ , b : ‘Walldorf’ ) , ( a : 1 , b : 3) a b a b 1 3 ‘oCIM’ ‘Walldorf’ = 1 3 ‘oCIM 2’ ‘London’ ‘oCIM’ ‘Walldorf’ ‘oCIM 2’ ‘London’ 1 3 1 3 3 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Operations and Expressions An Example ◮ MATCH ( n : Person ) − [: knows ] − > ( m : Person ) WHERE n . institute = m . institute RETURN n . name , m . name , n . institute AS institute 4 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Operations and Expressions An Example ◮ MATCH ( n : Person ) − [: knows ] − > ( m : Person ) WHERE n . institute = m . institute RETURN n . name , m . name , n . institute AS institute � 4 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Operations and Expressions An Example MATCH ( n : Person ) − [: knows ] − > ( m : Person ) ◮ WHERE n . institute = m . institute RETURN n . name , m . name , n . institute AS institute n m { name : ‘Nadime’ , institute : ‘UoE’ } { name : ‘Leonid’ , institute : ‘UoE’ } { name : ‘Paolo’ , institute : ‘UoE’ } { name : ‘Nadime’ , institute : ‘UoE’ } { name : ‘Nadime’ , institute : ‘UoE’ } { name : ‘Stefan’ , institute : ‘Neo’ } { name : ‘Alastair’ , institute : ‘Neo’ } { name : ‘Stefan’ , institute : ‘Neo’ } 4 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Operations and Expressions An Example MATCH ( n : Person ) − [: knows ] − > ( m : Person ) WHERE n . institute = m . institute ◮ RETURN n . name , m . name , n . institute AS institute n m { name : ‘Nadime’ , institute : ‘UoE’ } { name : ‘Leonid’ , institute : ‘UoE’ } { name : ‘Paolo’ , institute : ‘UoE’ } { name : ‘Nadime’ , institute : ‘UoE’ } { name : ‘Alastair’ , institute : ‘Neo’ } { name : ‘Stefan’ , institute : ‘Neo’ } 4 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Operations and Expressions An Example MATCH ( n : Person ) − [: knows ] − > ( m : Person ) WHERE n . institute = m . institute ◮ RETURN n . name , m . name , n . institute AS institute n . name m . name institute ‘Nadime’ ‘Leonid’ UoE ‘Paolo’ ‘Nadime’ UoE ‘Alastair’ ‘Stefan’ Neo 4 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Operations and Expressions ( α ) MATCH ( n : Person ) − [: knows ] − > ( m : Person ) Q = ( β ) WHERE n . institute = m . institute ( γ ) RETURN n . name , m . name , n . institute AS institute 5 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Operations and Expressions ( α ) MATCH ( n : Person ) − [: knows ] − > ( m : Person ) Q = ( β ) WHERE n . institute = m . institute ( γ ) RETURN n . name , m . name , n . institute AS institute Operations ] G : Tables → Tables [ [ op ] Semantics of a query by composition ] G ◦ [ ] G ◦ [ Ex: [ [ Q ] ] G = [ [ α ] [ β ] [ γ ] ] G Answers to Q on G : [ [ Q ] ] G ( {} ) 5 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Operations and Expressions ( α ) MATCH ( n : Person ) − [: knows ] − > ( m : Person ) Q = ( β ) WHERE n . institute = m . institute ( γ ) RETURN n . name , m . name , n . institute AS institute Operations ] G : Tables → Tables [ [ op ] Semantics of a query by composition ] G ◦ [ ] G ◦ [ Ex: [ [ Q ] ] G = [ [ α ] [ β ] [ γ ] ] G Answers to Q on G : [ [ Q ] ] G ( {} ) Expressions [ [ exp ] ] G , u ∈ V where u is a record, giving binding to variables � � u ∈ T | [ Ex: [ [ β ] ] G ( T ) = [ n . institute = m . institute ] ] G , u = true 5 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Pattern Matching Rigid pattern satisfaction Rigid path pattern: no variable length edge patterns. Ex: ( n : Person ) − [: knows ∗ 2] − > () − [: likes ] − > ( m : Movie ) Unique way for a path p to satisfy a rigid pattern π wrt G , u . Notation: ( p , G , u ) | = π 6 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Pattern Matching Rigid pattern satisfaction Rigid path pattern: no variable length edge patterns. Ex: ( n : Person ) − [: knows ∗ 2] − > () − [: likes ] − > ( m : Movie ) Unique way for a path p to satisfy a rigid pattern π wrt G , u . Notation: ( p , G , u ) | = π Variable-length paths and free variables rigid( π ) = { π ′ | π ′ is rigid and π ⊐ π ′ } Ex: () − [ ∗ 2] − > () − [ ∗ 4] − > () ⊏ () − [ ∗ 1 .. 3] − > () − [ ∗ ] − > () free( π, u ): all names that occur in π and not in u 6 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Pattern Matching Rigid pattern satisfaction Rigid path pattern: no variable length edge patterns. Ex: ( n : Person ) − [: knows ∗ 2] − > () − [: likes ] − > ( m : Movie ) Unique way for a path p to satisfy a rigid pattern π wrt G , u . Notation: ( p , G , u ) | = π Variable-length paths and free variables rigid( π ) = { π ′ | π ′ is rigid and π ⊐ π ′ } Ex: () − [ ∗ 2] − > () − [ ∗ 4] − > () ⊏ () − [ ∗ 1 .. 3] − > () − [ ∗ ] − > () free( π, u ): all names that occur in π and not in u u ′ is uniform with free( π ′ , u ) � � � � ( u , u ′ ) � [ [ MATCH π ] ] G ( T ) = � and ( p , G , ( u , u ′ )) | = π ′ � π ′ ∈ rigid( π ) u ∈ T , p ∈ paths 6 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Ambiguous and Edge Cases 7 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Nulls in Patterns MATCH ( n : Person { name : null } ) RETURN ( n ) 8 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Nulls in Patterns MATCH ( n : Person { name : null } ) RETURN ( n ) 1 Every node n with a name property? 2 Every node n such that n . name IS NULL = true ? 3 Nothing? 8 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Nulls in Patterns MATCH ( n : Person { name : null } ) RETURN ( n ) 1 Every node n with a name property? 2 Every node n such that n . name IS NULL = true ? 3 Nothing! Because Q is actually equivalent to: MATCH ( n : Person ) WHERE n . name = null RETURN ( n ) 8 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Map Comparisons When does { k 1 : v 1 , . . . , k n : v n } = { ℓ 1 : w 1 , . . . , ℓ m : w m } return true , false or null ? { name : null } = {} { a : 1 , b : 2 } = { b : 2 , a : 1 } { name : null } = { name : null } { a : 1 , a : 2 } = { a : 2 } 9 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Map Comparisons When does { k 1 : v 1 , . . . , k n : v n } = { ℓ 1 : w 1 , . . . , ℓ m : w m } return true , false or null ? false true { a : 1 , b : 2 } = { b : 2 , a : 1 } { name : null } = {} true true { name : null } = { name : null } { a : 1 , a : 2 } = { a : 2 } Neither purely syntactic, nor ∀ k , m 1 . k = m 2 . k . 9 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Setting Properties using a Map WITH { name : null } AS map CREATE ( n ) SET n = map RETURN ( n ) 10 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases Setting Properties using a Map WITH { name : null } AS map CREATE ( n ) SET n = map RETURN ( n ) Returns n as {} . The property map of n is not equal to the map it was set to. In particular, n { . ∗} = map returns false . 10 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases MATCH with no Free Variables MATCH () MATCH () RETURN ∗ RETURN 1 11 / 16
Semantics Overview Ambiguous and Edge Cases Incomplete and Inconsistent Cases MATCH with no Free Variables Fail Pass MATCH () MATCH () RETURN ∗ RETURN 1 RETURN ∗ is not allowed with Returns as many copies of 1 no variable in scope. as nodes in the database. After MATCH (), the active table is a bag containing multiple copies of the empty record. 11 / 16
Recommend
More recommend