- From: Christophe Marchand <cmarchand@oxiane.com>
- Date: Thu, 17 Dec 2020 09:34:16 +0100
- To: public-xslt-40@w3.org
+1 !
Le 17/12/2020 à 09:26, Reece Dunn a écrit :
> With XQuery 3.0 annotations were extended to support any EQName, and
> allow optional values. These have been used by vendors to implement
> REST capabilities (via the EXQuery RESTXQ specification) and unit test
> capabilities (such as in BaseX's test module).
>
> However, support for user-defined annotations is lacking. This means
> that external projects implementing the RESTXQ module (such as the rqx
> library for MarkLogic) need to rely on vendor extensions and vendor
> APIs to implement that functionality to take advantage of annotations.
> A similar case applies to unit test libraries like XRay which use
> annotations to define which functions are unit tests.
>
> The general approach for this (some of which have been raised as
> xpath-ng proposals) can be broken down into 3 parts:
>
> 1. Annotation Item Types -- similar to a FunctionTest, making
> annotations a concrete part of the XQuery type system.
>
> 2. Annotation Declarations -- similar to function declarations, that
> define the form an annotation can take; that is, the annotation name
> along with the supported parameter names and types.
>
> 3. Functions and Operators support -- allowing annotations to be
> queried, along with the annotation argument values, and possibly other
> operations.
>
> I'm wondering if it makes sense for annotation declarations to be
> function declarations. This would avoid the need for having a separate
> parallel system to functions (including in-scope definitions).
>
> For example, you could create a simple test framework as follows:
>
> declare %annotation function test:case() {};
> declare %annotation function test:values($values as item() ...) {};
>
> declare function test:run-tests() {
> for $f in in-scope-functions()
> let $a as annotation()? :=
> annotation-for-function($f, test:case#0)
> let $with-values as annotation(xs:string ...)* :=
> annotation-for-function($f, test:values#*) (: any arity :)
> where exists($a)
> return if (exists($with-values))
> then
> for $value in $with-values
> return $f(annotation-arguments($value))
> else $f()
> };
>
> and have it work on any XQuery 4.0 capable processor.
>
> The other use case for this is for tooling, so things like xqDoc can
> provide documentation for annotations and annotation parameters, as
> well as accessing the annotation information in a vendor-agnostic
> manner to generate the function signatures in the documentation.
> Editors/IDEs could also provide features like validation,
> auto-complete, and parameter signature tooltips for user-defined
> annotations.
>
> Kind regards,
> Reece
Received on Thursday, 17 December 2020 08:34:41 UTC