Hi, BaseX creators and users.
I have several questions about XQuery versions:
1. The main documentation page [1] for BaseX 12.0 calls it an XQuery 4.0 processor. The XQuery 4.0 draft specification [2] says in section 5.1, "The XQuery 4.0 specification does not attempt to define the semantics of a query in which different modules use different version numbers. One approach is to process all modules as if they specified version "4.0". Another approach (which may be appropriate if modules are separately compiled) is to process each module using its own version number; but it is then implementation defined what happens if (say) a 3.1 module imports a 4.0 library module that declares a function with a signature that 3.1 does not recognize." The question is: What does BaseX do if a 3.0 main module imports a 1.0 library module?
2. That same section 5.1 says, "An XQuery 4.0 processor must accept a module in which the version number is given as "1.0", "3.0", or "3.1". It is then implementation defined whether the module is processed using the syntax and semantics of the XQuery 4.0 specification, or the rules of the relevant earlier version." What does BaseX do for pre-4.0 queries?
3. For the BaseX versions in the not-too-distant past that called themselves XQuery 3.1 processors, is the answer to question 2 analogous? (I don't see the same "processor must accept..." verbiage in the XQuery 3.1 specification [3], though.)
4. (Not BaseX-specific) If a main module declares version "1.0" and uses a post-1.0 feature like URI-qualified names, that's a bug in the module, right? Even if the main module imports a 1.0 module, and even if the processor doesn't complain about the post-1.0 feature usage?
5. (Not BaseX-specific) The 3.1 and 4.0 (draft) specifications explain the version declaration in terms of intent ("intent that the module be processed by an XQuery [...] processor"), which is a different criterion compared to stating the *minimum* XQuery version that would work for that module. If anyone on this list uses the "minimum" interpretation in practice, do you have any tips for efficiently determining the minimum required XQuery version for each module in a set of modules?
The background behind my questions involves an XSpec test for an XQuery module, where the test gets compiled to a main module that imports the module you are testing. The main module uses features from 3.0, so I'm trying to determine the extent to which someone can test a 1.0 module using XSpec.
Thanks, Amanda
References:
[1] https://docs.basex.org/main/Main_Page [2] https://qt4cg.org/specifications/xquery-40/xquery-40.html#id-version-declara...] https://www.w3.org/TR/xquery-31/#id-version-declaration