Graph Algebra Query Processor

from clause is optional, where clause is optional, (hover over terms for details): select
Projection
Projection Tree: * ├── nodes │ ├── nodes.id │ ├── nodes.signature │ ├── nodes.type │ ├── nodes.lastmodified │ └── nodes.attributes │ └── nodes.attributes.ATTRIBUTENAME └── edges ├── edges.id ├── edges.type ├── edges.lastmodified ├── edges.attributes │ └── edges.attributes.ATTRIBUTENAME └── edges.links ├── edges.links.attributes │ └── edges.links.attributes.ATTRIBUTENAME ├── edges.links.role ├── edges.links.dir └── edges.links.nid
from
Path
Path Grammar: pathstart = path1 | path2 path1 = pathstep1 | pathseq1 | pathalt path2 = pathstep2 | pathseq2 | pathalt pathseq1 = pathstep1 | pathstep1 pathseq2 pathseq2 = pathstep2 | pathstep2 pathseq1 pathalt = pathstart ( "|" pathstart )+ pathstep1 = nodes pathstep2 = "<" edges ">" nodes = comp ( "," comp )* | "{" node_id ( "," node_id )* "}" edges = edge ( "," edge )* | "{" edge_id ( "," edge_id )* "}" edge = comp | rrsrc ":" comp ":" rrtar rrsrc = rsrc | "(" rsrc ( "|" rsrc )+ ")" rrtar = rtar | "(" rtar ( "|" rtar )+ ")" rsrc = "*" | "+" | "-" | "-+" | "=" | "=+" | "-=" | "-=+" | comp rtar = "*" | "+" | "-" | "+-" | "=" | "+=" | "=-" | "+=-" | comp comp = ( "-"? digit+ | letter (letter | digit)* ) node_id = digit* edge_id = digit* digit = [0-9] letter = [A-Za-z_]
where
Node Selection
Node Selection Rules: node.id (<,<=,=,!=,=>,>) integer node.signature (=,!=) "String" node.type (=,!=) "String" node.type (<,<=,=,!=,=>,>) integer node.lastmodified (<,<=,=,!=,=>,>) (DD.MM.YYYY|DD.MM.YYYY;HH:MM) node.attribute.ATTRIBUTENAME (<,<=,=,!=,=>,>) (integer|double) node.attribute.ATTRIBUTENAME (=, !=) "String" node.attribute.ATTRIBUTENAME (=, !=) true|false for boolean more general selection conditions with or, and as well as bracketing with ( and ) in "String" use \" to escape "
|
Edge Selection
Edge Selection Rules: Selection Predicate: edge.id (<,<=,=,!=,=>,>) integer edge.type (=,!=) "String" edge.type (<,<=,=,!=,=>,>) integer edge.lastmodified (<,<=,=,!=,=>,>) (DD.MM.YYYY|DD.MM.YYYY;HH:MM) edge.attribute.ATTRIBUTENAME (=, !=) "String" edge.link.role (=,!=) "String" edge.link.nid (<,<=,=,!=,=>,>) integer edge.link.attribute.ATTRIBUTENAME (=, !=) "String" more general selection conditions with or, and as well as bracketing with ( and ) in "String" use \" to escape "
combine Querys with union|intersect|except as well as bracketing with ( and )
Projection from each Query must contain the same elements!

Result: