User Tools

Site Tools


groimp-platform:xl-query

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
groimp-platform:xl-query [2025/01/10 11:41] – created gaetangroimp-platform:xl-query [2025/01/24 09:51] (current) – [Nested Transitive closures] Tim
Line 39: Line 39:
 |**Combined** ||| |**Combined** |||
 | %%f:F, A +> f, A < f %% | {f1} | patterns combined by comma |  | %%f:F, A +> f, A < f %% | {f1} | patterns combined by comma | 
 +
 +
 +====== Additional information ======
 +
 +
 +===== Field based conditions=====
 +
 +{{:groimp-platform:parametric_example_graph_queries.png?direct&400 |}}
 +
 +|Query | Result | Description |
 +| A(2,2.3)| a1  | all fields are defined |
 +| A(2,)   | a1,a3,a4| only the first field is defined and considered |
 +| A(2,x),(x>2) | a1,a3 | the first field is set, the second is a query variable used in a condition |
 +| A(,x),(x>2) | a1,a2,a3 | the first field undefined, the second is a query variable used in a condition |
 +| A(x,y),(x>y) | a4 | both fields are query variables used in the same condition |
 +
 +The condition part behind the comma can be replaced by any boolean condition, including predefined functions that return a boolean value.
 +The query variables defined here can also be used in the production of the rewriting rule or in followup expressions of a lambda expression.
 +===== Queries as query conditions =====
 +
 +As said above a query condition can be any boolean condition, this includes also queries and lambda expressions, as long as the return a boolean value for example the [[groimp-platform:xl-builtin-methods|Analytical Operator]] empty(), here used to find the last F of each branch and remove it using a [[:groimp-platform:xl-rules |SPO rule]].  
 +<code>
 +[f:F,(empty((*f (-->)+ F*))) ==>>;]
 +</code>
 +
 +Or a query as a part of a boolean condition, for example used with the count operator to get the order of an internode in a tree model:
 +<code>
 +(*f:F,(count((*f ((<)*<+)+F*))==0)*) //all F of order 0
 +(*f:F,(count((*f ((<)*<+)+F*))==1)*) //all F of order 1
 +</code>
 +
 +The inner query of this is explained below.
 +
 +===== Transitive closures =====
 +
 +As shown above transitive closure can be used to define a range of edges between two nodes, e.g. ''%% A (>)* B %%'' for all B with A successor of an A. This can be combined with other edges: ''%%  A (>)* +> B %%'' to show 
 +
 +| query  | description |
 +| ''%% A (>)+ B %%'' | All B's that have a A above connected only by successor edges | 
 +| ''%% A (>)* +> B %%'' | All B's that have a A above connected only by successor edges and one branch-edge directly before the B| 
 +| ''%% A ((>)* +>)+ B %%'' | All B's where the edge pattern of as many successors and one branch, comes at least once between the B and an A| 
 +| ''%% A (>)* +> (>)* B %%'' | As many sucessors followed by a branch followed by as many successors |
 +| ''%% A (-->)* C (-->)* B %%''| All B' that have an ancestor of the type A and an ancestor of the type C with C between the A and the B |
 +
 +Using transitive closure it is possible to find the same node several times!!! for instance  in a graph 
 +
 +%%Axiom ==> A A A B;%%
 +
 +the pattern (*A (>)* B*) would return B three times.
 +
groimp-platform/xl-query.1736505714.txt.gz · Last modified: 2025/01/10 11:41 by gaetan