Ray Denenberg, Library of Congress wrote:

>How's this:
>1. change:
>         cql-query::= cql-query boolean search-clause +AHw- search-clause
>   to:
>         cql-query::= +AHs-prefix-assignment+AH0-base-cql-query
>(note that the curly brackets mean zero or more)
>2. Change other occurences of "cql-query" to "base-cql-query"
>(only one, in search-clause definition)
>3. add:
>    prefix-assignment ::= ">" index-prefix "=" index-identifier
>    index-identifer ::= string
Ray, what is wrong with the ability to define prefixes for any given
subquery? We allow in XCQL. Why not in CQL as well? It may sound
complex, but the CQL parsers I know of - all have this capability. I'll
repeat (more or less what Rob wrote way back), the ability to define
prefixes for "sub queries" makes it easy to combine them. If you have
two arbitrary queries a and b and want to combine them, it becomes
rather tricky with up-front prefixes only. First you have parse the
front of a, then front of b. Then collect the prefixes, then possibly
rename the prefixes inside a, then b to avoid conflicts. For example,
had you had the two queries:
 >dc="core-v1" dc.title=first
 >dc="core-v2" dc.title=second
you would have to tranform that to something like:
 >dc1="core-v1" >dc2="core-v2" dc1.title=first and dc2.title=second

Allow me to repeat the grammar in used by parsers and semantics for it:

search-clause ::= ">" [identifier "="] term cql-query

meaning: define prefix (identifer) to uri (term) for cql-query. The prefix
applies to the cql-query on the right-hand side. Nothing more.

-- Adam