Tree Editing with Zippers
Alex MillerRevelytix
aka @puredangeraka “Dr. Strange Loop”
Zipper node protocol
Some records
Two “child” variants
seq of records
fields holding records
Use the record zipperComparison
:op := :left :right
ScalarFunction
:f :+ :exprs
ScalarFunction
:f :- :exprs
2 3 6 1
“(2 + 3) = (6 - 1)”
Use the record zipperComparison
:op := :left :right
ScalarFunction
:f :+ :exprs
ScalarFunction
:f :- :exprs
2 3 6 1
“(2 + 3) = (6 - 1)”
Use the record zipperComparison
:op := :left :right
ScalarFunction
:f :+ :exprs
ScalarFunction
:f :- :exprs
2 3 6 1
“(2 + 3) = (6 - 1)”
Use the record zipperComparison
:op := :left :right
ScalarFunction
:f :+ :exprs
ScalarFunction
:f :- :exprs
2 3 6 1
“(2 + 3) = (6 - 1)”
Tree pattern mutator
Apply evaluation ruleComparison
:op := :left :right
ScalarFunction
:f :- :exprs
5
6 1
Comparison
:op := :left :right
5 5
Revelytix
• Data integration using semantic web
• SPARQL -> SQL translation
• SPARQL federation
• Business rules engine
• Emergent analytics
SPARQL to SQL Parse, translate to SPARQL algebra
Plan using mappingOptimize plan
Generate SQL
SELECT ?Person ?NameWHERE { ?Person <http://domain/Person/Name> ?name }
SPARQL algebra tree
SQL query plan
SELECT 'http://domain/Person/' || ID, NameFROM People
SQL query plan
tree rules