Difference between revisions of "Inspection Module"
Line 20: | Line 20: | ||
|'''Examples''' | |'''Examples''' | ||
|Invokes the declared functions and returns their values:<br/> | |Invokes the declared functions and returns their values:<br/> | ||
− | < | + | <syntaxhighlight lang="xquery"> |
declare %private function local:one() { 12 }; | declare %private function local:one() { 12 }; | ||
declare %private function local:two() { 34 }; | declare %private function local:two() { 34 }; | ||
for $f in inspect:functions() return $f() | for $f in inspect:functions() return $f() | ||
− | </ | + | </syntaxhighlight> |
Compiles all functions in {{Code|code.xqm}} and invokes the function named {{Code|run}}: | Compiles all functions in {{Code|code.xqm}} and invokes the function named {{Code|run}}: | ||
− | < | + | <syntaxhighlight lang="xquery"> |
let $uri := 'code.xqm' | let $uri := 'code.xqm' | ||
let $name := "run" | let $name := "run" | ||
Line 32: | Line 32: | ||
where local-name-from-QName(function-name($f)) = $name | where local-name-from-QName(function-name($f)) = $name | ||
return $f() | return $f() | ||
− | </ | + | </syntaxhighlight> |
|} | |} | ||
Line 48: | Line 48: | ||
| | | | ||
* Returns an empty map: | * Returns an empty map: | ||
− | < | + | <syntaxhighlight lang="xquery"> |
inspect:function-annotations(true#0) | inspect:function-annotations(true#0) | ||
− | </ | + | </syntaxhighlight> |
* Returns a map with a single key <code><nowiki>Q{http://www.w3.org/2012/xquery}private</nowiki></code> and an empty sequence as value: | * Returns a map with a single key <code><nowiki>Q{http://www.w3.org/2012/xquery}private</nowiki></code> and an empty sequence as value: | ||
− | < | + | <syntaxhighlight lang="xquery"> |
declare %private function local:f() { 'well hidden' }; | declare %private function local:f() { 'well hidden' }; | ||
inspect:function-annotations(local:f#0) | inspect:function-annotations(local:f#0) | ||
− | </ | + | </syntaxhighlight> |
|} | |} | ||
Line 82: | Line 82: | ||
| | | | ||
* Returns the static base URI (same as {{Code|static-base-uri()}}): | * Returns the static base URI (same as {{Code|static-base-uri()}}): | ||
− | < | + | <syntaxhighlight lang="xquery"> |
inspect:static-context((), 'base-uri') | inspect:static-context((), 'base-uri') | ||
− | </ | + | </syntaxhighlight> |
* Returns a map with all namespaces that are statically known in the module of the specified function: | * Returns a map with all namespaces that are statically known in the module of the specified function: | ||
− | < | + | <syntaxhighlight lang="xquery"> |
import module namespace data = 'data.xqm'; | import module namespace data = 'data.xqm'; | ||
inspect:static-context(data:get#1, 'namespaces') | inspect:static-context(data:get#1, 'namespaces') | ||
− | </ | + | </syntaxhighlight> |
|- | |- | ||
| '''Errors''' | | '''Errors''' | ||
Line 131: | Line 131: | ||
|'''Examples''' | |'''Examples''' | ||
|The query {{Code|inspect:function(count#1)}} yields: | |The query {{Code|inspect:function(count#1)}} yields: | ||
− | < | + | <syntaxhighlight lang="xml"> |
<function name="count" uri="http://www.w3.org/2005/xpath-functions" external="false"> | <function name="count" uri="http://www.w3.org/2005/xpath-functions" external="false"> | ||
<argument type="item()" occurrence="*"/> | <argument type="item()" occurrence="*"/> | ||
<return type="xs:integer"/> | <return type="xs:integer"/> | ||
</function> | </function> | ||
− | </ | + | </syntaxhighlight> |
The function… | The function… | ||
− | < | + | <syntaxhighlight lang="xquery"> |
(:~ | (:~ | ||
: This function simply returns the specified integer. | : This function simply returns the specified integer. | ||
Line 147: | Line 147: | ||
$number | $number | ||
}; | }; | ||
− | </ | + | </syntaxhighlight> |
…is represented by {{Code|inspect:function(local:same#1)}} as… | …is represented by {{Code|inspect:function(local:same#1)}} as… | ||
− | < | + | <syntaxhighlight lang="xml"> |
<function name="local:same" uri="http://www.w3.org/2005/xquery-local-functions" external="false"> | <function name="local:same" uri="http://www.w3.org/2005/xquery-local-functions" external="false"> | ||
<argument type="xs:integer" name="number">number to return</argument> | <argument type="xs:integer" name="number">number to return</argument> | ||
Line 156: | Line 156: | ||
<return type="xs:integer">specified number</return> | <return type="xs:integer">specified number</return> | ||
</function> | </function> | ||
− | </ | + | </syntaxhighlight> |
|} | |} | ||
Line 171: | Line 171: | ||
| '''Examples''' | | '''Examples''' | ||
|Evaluate all user-defined functions with zero arguments in the query context:<br/> | |Evaluate all user-defined functions with zero arguments in the query context:<br/> | ||
− | < | + | <syntaxhighlight lang="xquery"> |
inspect:context()/function ! function-lookup(QName(@uri, @name), 0) ! .() | inspect:context()/function ! function-lookup(QName(@uri, @name), 0) ! .() | ||
− | </ | + | </syntaxhighlight> |
Return the names of all private functions in the current context: | Return the names of all private functions in the current context: | ||
− | < | + | <syntaxhighlight lang="xquery"> |
for $f in inspect:context()/function | for $f in inspect:context()/function | ||
where $f/annotation/@name = 'private' | where $f/annotation/@name = 'private' | ||
return $f/@name/string() | return $f/@name/string() | ||
− | </ | + | </syntaxhighlight> |
|} | |} | ||
Line 218: | Line 218: | ||
This is the {{Code|sample.xqm}} library module: | This is the {{Code|sample.xqm}} library module: | ||
− | < | + | <syntaxhighlight lang="xquery"> |
(:~ | (:~ | ||
: This module provides some sample functions to demonstrate | : This module provides some sample functions to demonstrate | ||
Line 240: | Line 240: | ||
$number | $number | ||
}; | }; | ||
− | </ | + | </syntaxhighlight> |
If {{Code|inspect:module('sample.xqm')}} is run, the following output will be generated: | If {{Code|inspect:module('sample.xqm')}} is run, the following output will be generated: | ||
− | < | + | <syntaxhighlight lang="xml"> |
<module prefix="samples" uri="http://basex.org/modules/samples"> | <module prefix="samples" uri="http://basex.org/modules/samples"> | ||
<description>This module provides some sample functions to demonstrate | <description>This module provides some sample functions to demonstrate | ||
Line 261: | Line 261: | ||
</function> | </function> | ||
</module> | </module> | ||
− | </ | + | </syntaxhighlight> |
The output looks as follows if {{Code|inspect:xqdoc('sample.xqm')}} is called: | The output looks as follows if {{Code|inspect:xqdoc('sample.xqm')}} is called: | ||
− | < | + | <syntaxhighlight lang="xml"> |
<xqdoc:xqdoc xmlns:xqdoc="http://www.xqdoc.org/1.0"> | <xqdoc:xqdoc xmlns:xqdoc="http://www.xqdoc.org/1.0"> | ||
<xqdoc:control> | <xqdoc:control> | ||
Line 319: | Line 319: | ||
</xqdoc:functions> | </xqdoc:functions> | ||
</xqdoc:xqdoc> | </xqdoc:xqdoc> | ||
− | </ | + | </syntaxhighlight> |
=Errors= | =Errors= |
Revision as of 16:30, 27 February 2020
This XQuery Module contains functions for extracting internal information about modules and functions and generating documentation.
Contents
Conventions
All functions and errors in this module are assigned to the http://basex.org/modules/inspect
namespace, which is statically bound to the inspect
prefix.
xqDoc document instances are assigned to the http://www.xqdoc.org/1.0
namespace, which is statically bound to the xqdoc
prefix.
Reflection
inspect:functions
Signatures | inspect:functions() as function(*)* inspect:functions($uri as xs:string) as function(*)*
|
Summary | Returns function items for all user-defined functions (both public and private) that are known in the current query context. If a $uri is specified, the specified resource will be retrieved as string and compiled, and its functions will be added to the query context and returned to the user. A relative URI will be resolved against the static base URI of the query.
|
Examples | Invokes the declared functions and returns their values:declare %private function local:one() { 12 };
declare %private function local:two() { 34 };
for $f in inspect:functions() return $f()
Compiles all functions in let $uri := 'code.xqm'
let $name := "run"
for $f in inspect:functions($uri)
where local-name-from-QName(function-name($f)) = $name
return $f()
|
inspect:function-annotations
Signatures | inspect:function-annotations($function as function(*)?) as map(xs:QName, xs:anyAtomicType*) |
Summary | Returns the annotations of the specified $function in a map.
|
Examples |
inspect:function-annotations(true#0)
declare %private function local:f() { 'well hidden' };
inspect:function-annotations(local:f#0)
|
inspect:static-context
Signatures | inspect:static-context($function as function(*)?, $name as xs:string) as item()* |
Summary | Returns a component of the static context of a $function with the specified $name . If no function is supplied, the current static context is considered.The following components can be requested:
|
Examples |
inspect:static-context((), 'base-uri')
import module namespace data = 'data.xqm';
inspect:static-context(data:get#1, 'namespaces')
|
Errors | unknown : The specified component does not exist.
|
Documentation
inspect:type
Signatures | inspect:type($value as item()*) as xs:string
|
Summary | Returns a string representation of the type of a value:
|
Examples |
|
inspect:function
Signatures | inspect:function($function as function(*)) as element(function)
|
Summary | Inspects the specified $function and returns an element that describes its structure. The output of this function is similar to eXist-db’s inspect:inspect-function function.
|
Examples | The query inspect:function(count#1) yields:
<function name="count" uri="http://www.w3.org/2005/xpath-functions" external="false">
<argument type="item()" occurrence="*"/>
<return type="xs:integer"/>
</function>
The function… (:~
: This function simply returns the specified integer.
: @param $number number to return
: @return specified number
:)
declare %private function local:same($number as xs:integer) as xs:integer {
$number
};
…is represented by <function name="local:same" uri="http://www.w3.org/2005/xquery-local-functions" external="false">
<argument type="xs:integer" name="number">number to return</argument>
<annotation name="private" uri="http://www.w3.org/2012/xquery"/>
<description>This function simply returns the specified integer.</description>
<return type="xs:integer">specified number</return>
</function>
|
inspect:context
Signatures | inspect:context() as element(context)
|
Summary | Generates an element that describes all variables and functions in the current query context. |
Examples | Evaluate all user-defined functions with zero arguments in the query context:inspect:context()/function ! function-lookup(QName(@uri, @name), 0) ! .()
Return the names of all private functions in the current context: for $f in inspect:context()/function
where $f/annotation/@name = 'private'
return $f/@name/string()
|
inspect:module
Signatures | inspect:module($uri as xs:string) as element(module)
|
Summary | Retrieves the resource located at the specified $uri , parses it as XQuery module, and generates an element that describes the module's structure. A relative URI will be resolved against the static base URI of the query.
|
Examples | An example is shown below. |
inspect:xqdoc
Signatures | inspect:xqdoc($uri as xs:string) as element(xqdoc:xqdoc)
|
Summary | Retrieves the resource located at the specified $uri , parses it as XQuery module, and generates an xqDoc element. A relative URI will be resolved against the static base URI of the query.xqDoc provides a simple vendor-neutral solution for generating documentation from XQuery modules. The documentation conventions have been inspired by the JavaDoc standard. Documentation comments begin with (:~ and end with :) , and tags start with @ . xqDoc comments can be specified for main and library modules and variable and function declarations.We have slightly extended the xqDoc conventions to do justice to more recent versions of XQuery (Schema: xqdoc-1.1.30052013.xsd):
|
Examples | An example is shown below. |
Examples
This is the sample.xqm
library module:
(:~
: This module provides some sample functions to demonstrate
: the features of the Inspection Module.
:
: @author BaseX Team
: @see http://docs.basex.org/wiki/XQDoc_Module
: @version 1.0
:)
module namespace samples = 'http://basex.org/modules/samples';
(:~ This is a sample string. :)
declare variable $samples:test-string as xs:string := 'this is a string';
(:~
: This function simply returns the specified integer.
: @param $number number to return
: @return specified number
:)
declare %private function samples:same($number as xs:integer) as xs:integer {
$number
};
If inspect:module('sample.xqm')
is run, the following output will be generated:
<module prefix="samples" uri="http://basex.org/modules/samples">
<description>This module provides some sample functions to demonstrate
the features of the Inspection Module.</description>
<author>BaseX Team</author>
<see>http://docs.basex.org/wiki/XQDoc_Module</see>
<version>1.0</version>
<variable name="samples:test-string" uri="http://basex.org/modules/samples" type="xs:string" external="false">
<description>This is a sample string.</description>
</variable>
<function name="samples:same" uri="http://basex.org/modules/samples" external="false">
<argument name="number" type="xs:integer">number to return</argument>
<annotation name="private" uri="http://www.w3.org/2012/xquery"/>
<description>This function simply returns the specified integer.</description>
<return type="xs:integer">specified number</return>
</function>
</module>
The output looks as follows if inspect:xqdoc('sample.xqm')
is called:
<xqdoc:xqdoc xmlns:xqdoc="http://www.xqdoc.org/1.0">
<xqdoc:control>
<xqdoc:date>2013-06-01T16:59:33.654+02:00</xqdoc:date>
<xqdoc:version>1.1</xqdoc:version>
</xqdoc:control>
<xqdoc:module type="library">
<xqdoc:uri>http://basex.org/modules/samples</xqdoc:uri>
<xqdoc:name>sample.xqm</xqdoc:name>
<xqdoc:comment>
<xqdoc:description>This module provides some sample functions to demonstrate
the features of the Inspection Module.</xqdoc:description>
<xqdoc:author>BaseX Team</xqdoc:author>
<xqdoc:see>http://docs.basex.org/wiki/XQDoc_Module</xqdoc:see>
<xqdoc:version>1.0</xqdoc:version>
</xqdoc:comment>
</xqdoc:module>
<xqdoc:namespaces>
<xqdoc:namespace prefix="samples" uri="http://basex.org/modules/samples"/>
</xqdoc:namespaces>
<xqdoc:imports/>
<xqdoc:variables>
<xqdoc:variable>
<xqdoc:name>samples:test-string</xqdoc:name>
<xqdoc:comment>
<xqdoc:description>This is a sample string.</xqdoc:description>
</xqdoc:comment>
<xqdoc:type>xs:string</xqdoc:type>
</xqdoc:variable>
</xqdoc:variables>
<xqdoc:functions>
<xqdoc:function arity="1">
<xqdoc:comment>
<xqdoc:description>This function simply returns the specified integer.</xqdoc:description>
<xqdoc:param>$number number to return</xqdoc:param>
<xqdoc:return>specified number</xqdoc:return>
</xqdoc:comment>
<xqdoc:name>samples:same</xqdoc:name>
<xqdoc:annotations>
<xqdoc:annotation name="private"/>
</xqdoc:annotations>
<xqdoc:signature>declare %private function samples:same($number as xs:integer) as xs:integer</xqdoc:signature>
<xqdoc:parameters>
<xqdoc:parameter>
<xqdoc:name>number</xqdoc:name>
<xqdoc:type>xs:integer</xqdoc:type>
</xqdoc:parameter>
</xqdoc:parameters>
<xqdoc:return>
<xqdoc:type>xs:integer</xqdoc:type>
</xqdoc:return>
</xqdoc:function>
</xqdoc:functions>
</xqdoc:xqdoc>
Errors
Code | Description |
---|---|
unknown
|
The specified component does not exist. |
Changelog
- Version 9.3
- Added: inspect:type
- Version 8.5
- Added: inspect:function-annotations, inspect:static-context
- Updated:
external
attribute added to variables and functions - Updated: Relative URIs will always be resolved against the static base URI of the query
- Version 7.9
- Updated: a query URI can now be specified with inspect:functions.
This module was introduced with Version 7.7.