xquery version "1.0";

(:
 : Copyright 2006-2009 The FLWOR Foundation.
 :
 : Licensed under the Apache License, Version 2.0 (the "License");
 : you may not use this file except in compliance with the License.
 : You may obtain a copy of the License at
 :
 : http://www.apache.org/licenses/LICENSE-2.0
 :
 : Unless required by applicable law or agreed to in writing, software
 : distributed under the License is distributed on an "AS IS" BASIS,
 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 : See the License for the specific language governing permissions and
 : limitations under the License.
:)

(:~
 : Intospection Module for the Static Context components.
 :
 : @see http://www.w3.org/TR/xquery/#id-xq-static-context-components
 :
 : @author Nicolae Brinza
 : @project introspection
 :
 :)

module namespace sctx = "http://www.zorba-xquery.com/modules/introspection/sctx";

declare namespace ver = "http://www.zorba-xquery.com/options/versioning";
declare option ver:module-version "2.0";

(:~
 : The function returns a list of known statically known namespaces as prefixes
 : (fn, xml, xs, xsi, etc).
 : @return A sequence of xs:strings, one for each known namespace prefix.
 :
 : @see http://www.w3.org/TR/xquery/#dt-static-namespaces
 :)
declare function sctx:statically-known-namespaces() as xs:string* external;

(:~
 : For any statically know namespace prefix, the bound URI can be retrieved
 : with the statically-known-namespace-bindings() function.
 :
 : @param $prefix The prefix of the known namespace, for which the bound URI
 : is being requested.
 : @return The URI bound to the prefix is returned, or an empty sequence if
 : the prefix is not known.
 :
 : @see http://www.w3.org/TR/xquery/#dt-static-namespaces
 :)
declare function sctx:statically-known-namespace-binding($prefix as xs:string) as xs:string? external;

(:~
 : The function returns the URI of the default function namespace.
 :
 : @return The URI of the of the default function namespace.
 :
 : @see http://www.w3.org/TR/xquery/#dt-def-fn-ns
 :)
declare function sctx:default-function-namespace() as xs:string external;

(:~
 : The function returns the base URI.
 :
 : @return The base URI.
 :
 : @see http://www.w3.org/TR/xquery/#dt-base-uri
 :)
declare function sctx:base-uri() as xs:string? external;

(:~
 : The function returns the statically known default collection type. This
 : is the type of the sequence of nodes that would result from calling the
 : fn:collection function with no arguments.
 :
 : @return The type of the default collection.
 :
 : @see http://www.w3.org/TR/xquery/#dt-known-default-collection
 :)
declare function sctx:default-collection-type() as xs:string external;

(:~
 : The function return a sequence of QNames identifying declared variables
 : from the static context.
 :
 : @return A sequence of QNames, one for each variable.
 :
 : @see http://www.w3.org/TR/xquery/#dt-in-scope-variables
 :)
declare function sctx:in-scope-variables() as xs:QName* external;

(:~
 : The function returns a sequence of QNames identifying in-scope schema types,
 : including all the predefined schema types and all definitions found in
 : imported schemas.
 :
 : @return A sequence of QNames, one for each defined type.
 :
 : @see http://www.w3.org/TR/xquery/#dt-is-types
 :)
declare function sctx:in-scope-schema-types() as xs:QName* external;

(:~
 : The function return a sequence of QNames identifying declared elements
 : in the imported schemas.
 :
 : @return A sequence of QNames, one for each declared element.
 :
 : @see http://www.w3.org/TR/xquery/#dt-is-elems
 :)
declare function sctx:in-scope-element-declarations() as xs:QName* external;

(:~
 : The function return a sequence of QNames identifying declared attributes
 : in the imported schemas.
 :
 : @return A sequence of QNames, one for each attribute.
 :
 : @see http://www.w3.org/TR/xquery/#dt-is-attrs
 :)
declare function sctx:in-scope-attribute-declarations() as xs:QName* external;

(:~
 : The function returns a sequence of QNames identifying declared in-scope
 : schema element groups.
 :
 : @return A sequence of QNames, one for each element group.
 :)
declare function sctx:in-scope-element-groups() as xs:QName* external;

(:~
 : The function returns a sequence of QNames identifying declared in-scope
 : schema attribute groups.
 :
 : @return A sequence of QNames, one for each attribute group.
 :)
declare function sctx:in-scope-attribute-groups() as xs:QName* external;

(:~
 : The function returns a sequence containing the QNames of all defined
 : functions, which are available to be called from within an expression.
 :
 : @return A sequence for QNames identifying all functions.
 :
 : @see http://www.w3.org/TR/xquery/#dt-function-signature
 :)
declare function sctx:function-names() as xs:QName* external;

(:~
 : The function returns the number of arguments the given XQuery $function
 : takes.
 :
 : @param $function A QName identifying a function.
 : @return A sequence of zero or more integers, one for each overloaded version
 : of the given function. An empty sequence is returned if the function is not
 : defined.
 :
 : @see http://www.w3.org/TR/xquery/#dt-function-signature
 :)
declare function sctx:function-arguments-count($function as xs:QName) as xs:int* external;

(:~
 : Retrieves the list of annotations declared for the given function.
 :
 : @param $name the name of the function
 : @param $arity the number of arguments the function takes
 : @return the list of annotations
 :)
declare function sctx:function-annotations($name as xs:QName, $arity as xs:integer) as xs:QName* external;

(:~
 : The function returns true or false depending on whether rules for
 : compatibility with XPath 1.0 are in effect. XQuery set the value
 : of this component to false.
 :
 : @return The function should return false
 :
 : @see http://www.w3.org/TR/xquery/#dt-xpath-compat-mode
 :)
declare function sctx:xpath10-compatibility-mode() as xs:boolean external;

(:~
 : The function returns one of statically known collations that is used by
 : functions and operators for comparing and ordering values of type xs:string
 : or xs:anyURI when no explicit collation is specified.
 :
 : @return The collations that is used by default.
 :
 : @see http://www.w3.org/TR/xquery/#dt-def-collation
 :)
declare function sctx:default-collation() as xs:string external;

(:~
  : The function returns a sequence that contains the URIs of all statically known documents.
  :
  : @return The sequence of document URIs.
  :
  : @see http://www.w3.org/TR/xquery/#dt-known-docs
  :)
declare function sctx:statically-known-documents() as xs:anyURI* external;

(:~
  : For the given document, the function returns the static type of its root node.
  :
  : @param $document An URI of a document.
  : @return The static type of the given document.
  :
  : @see http://www.w3.org/TR/xquery/#dt-known-docs
  :)
declare function sctx:statically-known-document-type($document as xs:string) as xs:QName external;

(:~
 : The function returns a sequence that contains the statically known collations.
 :
 : @return The sequence of collations.
 :
 : @see http://www.w3.org/TR/xquery/#dt-static-collations
 :)
declare function sctx:statically-known-collations() as xs:anyURI* external;

(:~
 : The function returns the static context construction mode of element and
 : document nodes.
 :
 : @return Either "preserve" or "strip", as strings.
 :
 : @see http://www.w3.org/TR/xquery/#dt-construction-mode
 :)
declare function sctx:construction-mode() as xs:string external;

(:~
 : The function returns the static context ordering mode, which affects the
 : ordering of the result sequences returned by certain expressions.
 :
 : @return Either "ordered" or "unordered", as strings.
 :
 : @see http://www.w3.org/TR/xquery/#dt-ordering-mode
 :)
declare function sctx:ordering-mode() as xs:string external;

(:~
 : The function returns the static context component which controls the
 : processing of empty sequences and NaN values as ordering keys in an order
 : by clause in a FLWOR expression.
 :
 : @return Either "greatest" or "least", as strings.
 :
 : @see http://www.w3.org/TR/xquery/#dt-default-empty-order
 :)
declare function sctx:default-order() as xs:string external;

(:~
 : The function returns the static context component which controls the
 : processing of boundary whitespace by direct element constructors.
 :
 : @return Either "preserve" or "strip", as strings.
 :
 : @see http://www.w3.org/TR/xquery/#dt-boundary-space-policy
 :)
declare function sctx:boundary-space-policy() as xs:string external;

(:~
 : The function returns the static context components which control the
 : the namespace bindings that are assigned when an existing element node
 : is copied by an element constructor
 :
 : @return A sequence containing exactly two strings, of which the first
 : has a value of either "preserve" or "no-preserve" and the second a value
 : of either "inherit" or "no-inherit".
 :
 : @see http://www.w3.org/TR/xquery/#dt-copy-namespaces-mode
 :)
declare function sctx:copy-namespaces-mode() as xs:string+ external;

(:~
 : Retrieves the value of an option that is declared in the prolog
 : of the module.
 :
 : @param $name the name of the option value to retrieve
 : @return the value of the option if contained in the static context
 :         or the empty sequence otherwise.
 :)
declare function sctx:option($name as xs:QName) as xs:string? external;