diff --git a/QUERY-SPEC.md b/QUERY-SPEC.md index 114a75c..70e4906 100644 --- a/QUERY-SPEC.md +++ b/QUERY-SPEC.md @@ -30,6 +30,11 @@ properties, node names, etc). With the exception of `top()` and `()`, they are a used inside a `[]` selector. Some matchers are unary, but most of them involve binary operators. +The `top()` matcher can only be used as the first matcher of a selector. This means +that it cannot be the right operand of the `>`, `>>`, `+`, or `++` operators. As `||` +combines selectors, the `top()` can appear just after it. For instance, + `a > b || top() > b` is valid, but `a > top()` is not. + * `top()`: Returns all toplevel children of the current document. * `top() > []`: Equivalent to `top()` on its own. * `(foo)`: Selects any element whose type annotation is `foo`. @@ -111,7 +116,8 @@ what they expand to. ``` query-str := $bom? query query := selector q-ws* "||" q-ws* query | selector -selector := filter q-ws* selector-operator q-ws* selector | filter +selector := filter q-ws* selector-operator q-ws* selector-subsequent | filter +selector-subsequent := matchers q-ws* selector-operator q-ws* selector-subsequent | matchers selector-operator := ">>" | ">" | "++" | "+" filter := "top(" q-ws* ")" | matchers matchers := type-matcher $string? accessor-matcher* | $string accessor-matcher* | accessor-matcher+