diff --git a/spec/index.html b/spec/index.html index 99422cc0..2c08e7d9 100644 --- a/spec/index.html +++ b/spec/index.html @@ -8924,28 +8924,6 @@
Expand abbreviations for IRIs and triple patterns given in section 4.
-FILTER ElementsFILTER expressions apply to the whole group graph pattern in which they
- appear. The algebra operators to perform filtering are added to the group after
- translation of each group element. We collect the filters together here and remove them
- from group, then apply them to the whole translated group
- graph pattern.
In this step, we also translate graph patterns within FILTER expressions
- EXISTS and
- NOT EXISTS.
-Let FS := empty set
-For each form FILTER(expr) in the group graph pattern
- In expr, replace NOT EXISTS{P} with fn:not(exists(translate(P)))
- In expr, replace EXISTS{P} with exists(translate(P))
- FS := FS ∪ {expr}
- End
-
- The set of filter expressions FS is used
- later.
The following table gives the translation @@ -9137,15 +9115,18 @@
-+If the form is
+GroupGraphPattern:If the form is
+GroupGraphPatternwith childP:
The result is Translate(P).+
+If the form is
GroupGraphPatternSub:
-Let FS := the empty set
+Let FS := the empty sequence
Let G := the empty pattern, a basic graph pattern which is the empty set.
-For each element E in the sequence of elements in the GroupGraphPattern
+For each element E in the sequence of elements that are the GroupGraphPattern's TriplesBlock children and the children of its other children, in order:
If E is of the form OPTIONAL{P}
Let A := Translate(P)
@@ -9160,6 +9141,12 @@ Translate Graph Patterns
G := Minus(G, Translate(P))
End
+ If E is of the form FILTER(expr)
+ In expr, replace NOT EXISTS{P} with fn:not(exists(translate(P)))
+ In expr, replace EXISTS{P} with exists(translate(P))
+ FS := FS + expr
+ End
+
If E is of the form BIND(expr AS var)
G := Extend(G, var, expr)
End
@@ -9171,6 +9158,11 @@ Translate Graph Patterns
End
+If FS is not empty
+ Let X := Conjunction of expressions in FS
+ G := Filter(X, G)
+ End
+
The result is G.
@@ -9190,17 +9182,6 @@Translate Graph Patterns
The result is ToMultiset(Translate(SubSelect))
After the group has been translated, the filter expressions are added so they wil - apply to the whole of the rest of the group:
--If FS is not empty - Let G := output of preceding step - Let X := Conjunction of expressions in FS - G := Filter(X, G) -End-
Some groups of one graph pattern become join(Z, A), where Z is the empty