<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
-->
<functions>
    <!-- fn:abs($arg as  numeric?) as numeric? -->
    <function name="fn:abs">
        <param name="arg" type="xsext:numeric?"/>
        <return type="xsext:numeric?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.numeric.FnAbsScalarEvaluatorFactory"/>
    </function>

    <!-- fn:adjust-date-to-timezone( $arg as xs:date?) as  xs:date? -->
    <function name="fn:adjust-date-to-timezone">
        <param name="arg" type="xs:date?"/>
        <return type="xs:date?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnAdjustDateToTimezoneScalarEvaluatorFactory"/>
    </function>

    <!-- fn:adjust-date-to-timezone( $arg as xs:date?, $timezone as xs:dayTimeDuration?)  as xs:date? -->
    <function name="fn:adjust-date-to-timezone">
        <param name="arg" type="xs:date?"/>
        <param name="timezone" type="xs:dayTimeDuration?"/>
        <return type="xs:date?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnAdjustDateToTimezoneScalarEvaluatorFactory"/>
    </function>

    <!-- fn:adjust-dateTime-to-timezone( $arg as xs:dateTime?)  as xs:dateTime? -->
    <function name="fn:adjust-dateTime-to-timezone">
        <param name="arg" type="xs:dateTime?"/>
        <return type="xs:dateTime?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnAdjustDateTimeToTimezoneScalarEvaluatorFactory"/>
    </function>

    <!-- fn:adjust-dateTime-to-timezone( $arg as xs:dateTime?, $timezone as xs:dayTimeDuration?)  as xs:dateTime? -->
    <function name="fn:adjust-dateTime-to-timezone">
        <param name="arg" type="xs:dateTime?"/>
        <param name="timezone" type="xs:dayTimeDuration?"/>
        <return type="xs:dateTime?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnAdjustDateTimeToTimezoneScalarEvaluatorFactory"/>
    </function>

    <!-- fn:adjust-time-to-timezone( $arg as xs:time?) as  xs:time? -->
    <function name="fn:adjust-time-to-timezone">
        <param name="arg" type="xs:time?"/>
        <return type="xs:time?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnAdjustTimeToTimezoneScalarEvaluatorFactory"/>
    </function>

    <!-- fn:adjust-time-to-timezone( $arg as xs:time?, $timezone as xs:dayTimeDuration?)  as xs:time? -->
    <function name="fn:adjust-time-to-timezone">
        <param name="arg" type="xs:time?"/>
        <param name="timezone" type="xs:dayTimeDuration?"/>
        <return type="xs:time?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnAdjustTimeToTimezoneScalarEvaluatorFactory"/>
    </function>

    <!-- fn:avg($arg as  xs:anyAtomicType*) as xs:anyAtomicType? -->
    <function name="fn:avg">
        <param name="arg" type="xs:anyAtomicType*"/>
        <return type="xs:anyAtomicType?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.aggregate.FnAvgScalarEvaluatorFactory"/>
        <runtime type="aggregate" class="org.apache.vxquery.runtime.functions.aggregate.FnAvgAggregateEvaluatorFactory"/>
    </function>

    <!-- fn:base-uri() as  xs:anyURI? -->
    <function name="fn:base-uri" implicit-context="true">
        <return type="xs:anyURI?"/>
    </function>

    <!-- fn:base-uri($arg  as node()?) as  xs:anyURI? -->
    <function name="fn:base-uri">
        <param name="arg" type="node()?"/>
        <return type="xs:anyURI?"/>
    </function>

    <!-- fn:boolean($arg as  item()*) as xs:boolean -->
    <function name="fn:boolean">
        <param name="arg" type="item()*"/>
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.bool.FnBooleanScalarEvaluatorFactory"/>
    </function>

    <!-- fn:ceiling($arg as  numeric?) as numeric? -->
    <function name="fn:ceiling">
        <param name="arg" type="xsext:numeric?"/>
        <return type="xsext:numeric?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.numeric.FnCeilingScalarEvaluatorFactory"/>
    </function>

    <!-- fn:codepoint-equal($comparand1  as xs:string?, $comparand2 as xs:string?)  as xs:boolean? -->
    <function name="fn:codepoint-equal">
        <param name="comparand1" type="xs:string?"/>
        <param name="comparand2" type="xs:string?"/>
        <return type="xs:boolean?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnCodepointEqualEvaluatorFactory"/>
    </function>

    <!-- fn:codepoints-to-string( $arg as xs:integer*)  as xs:string -->
    <function name="fn:codepoints-to-string">
        <param name="arg" type="xs:integer*"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnCodepointsToStringEvaluatorFactory"/>
    </function>

    <!-- fn:collection() as  node()* -->
    <function name="fn:collection">
        <return type="node()*"/>
    </function>

    <!-- fn:collection($arg  as xs:string?) as  node()* -->
    <function name="fn:collection">
        <param name="arg" type="xs:string?"/>
        <return type="node()*"/>
        <!-- Collection operator is added during the rewrite rules phase.  -->
    </function>

    <!-- fn:build-index-on-collection($arg  as xs:string?, $indexFolder  as xs:string?) as  node()* -->
    <function name="fn:build-index-on-collection">
        <param name="collection-folder" type="xs:string?"/>
        <param name="index-folder" type="xs:string?"/>
        <return type="node()*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.index.IndexConstructorScalarEvaluatorFactory"/>
    </function>

    <!-- fn:update-index($indexFolder  as xs:string?) as  node()* -->
    <function name="fn:update-index">
        <param name="index-folder" type="xs:string?"/>
        <return type="node()*"/>
        <runtime type="scalar"
                 class="org.apache.vxquery.runtime.functions.index.IndexUpdaterEvaluatorFactory"/>
    </function>

    <!-- fn:collection-from-index($indexfolder  as xs:string?, $elementpath as xs:string?) as  node()* -->
    <function name="fn:collection-from-index">
        <param name="index-folder" type="xs:string?"/>
        <param name="element-path" type="xs:string?"/>
        <return type="node()*"/>
        <runtime type="unnesting" class="org.apache.vxquery.runtime.functions.index.CollectionFromIndexUnnestingEvaluatorFactory"/>
        <property type="DocumentOrder" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
        <property type="UniqueNodes" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
    </function>

    <!-- fn:collection-with-tag($arg1  as xs:string?, $arg2 as xs:string?) as  node()* -->
    <function name="fn:collection-with-tag">
        <param name="arg1" type="xs:string?"/>
        <param name="arg2" type="xs:string?"/>
        <return type="node()*"/>
        <!-- CollectionWithTag operator is added during the rewrite rules phase.  -->
    </function>

    <!-- fn:compare($comparand1  as xs:string?, $comparand2 as xs:string?)  as xs:integer?  -->
    <function name="fn:compare">
        <param name="comparand1" type="xs:string?"/>
        <param name="comparand2" type="xs:string?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnCompareEvaluatorFactory"/>
    </function>

    <!-- fn:compare($comparand1  as xs:string?, $comparand2 as xs:string?, $collation as xs:string)  as xs:integer?  -->
    <function name="fn:compare">
        <param name="comparand1" type="xs:string?"/>
        <param name="comparand2" type="xs:string?"/>
        <param name="collation" type="xs:string"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnCompareEvaluatorFactory"/>
    </function>

    <!-- fn:concat($arg1 as  xs:anyAtomicType?, $arg2 as xs:anyAtomicType?, ...) as xs:string -->
    <function name="fn:concat" varargs="true">
        <param name="arg1" type="xs:anyAtomicType?"/>
        <param name="arg2" type="xs:anyAtomicType?"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnConcatEvaluatorFactory"/>
    </function>

    <!-- fn:contains($arg1  as xs:string?, $arg2 as xs:string?)  as xs:boolean -->
    <function name="fn:contains">
        <param name="arg1" type="xs:string?"/>
        <param name="arg2" type="xs:string?"/>
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnContainsEvaluatorFactory"/>
    </function>

    <!-- fn:contains($arg1  as xs:string?, $arg2 as xs:string?, $collation as xs:string)  as xs:boolean -->
    <function name="fn:contains">
        <param name="arg1" type="xs:string?"/>
        <param name="arg2" type="xs:string?"/>
        <param name="collation" type="xs:string"/>
        <return type="xs:boolean"/>
    </function>

    <!-- fn:count($arg as  item()*) as xs:integer -->
    <function name="fn:count">
        <param name="arg" type="item()*"/>
        <return type="xs:integer"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.aggregate.FnCountScalarEvaluatorFactory"/>
        <runtime type="aggregate" class="org.apache.vxquery.runtime.functions.aggregate.FnCountAggregateEvaluatorFactory"/>
    </function>

    <!-- fn:current-date() as  xs:date -->
    <function name="fn:current-date">
        <return type="xs:date"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnCurrentDateScalarEvaluatorFactory"/>
    </function>

    <!-- fn:current-dateTime()  as xs:dateTime -->
    <function name="fn:current-dateTime">
        <return type="xs:dateTime"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnCurrentDateTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:current-time() as  xs:time -->
    <function name="fn:current-time">
        <return type="xs:time"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnCurrentTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:data($arg as  item()*) as xs:anyAtomicType* -->
    <function name="fn:data">
        <param name="arg" type="item()*"/>
        <return type="xs:anyAtomicType*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.misc.FnDataScalarEvaluatorFactory"/>
        <property type="DocumentOrder" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
        <property type="UniqueNodes" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
    </function>

    <!-- fn:size($expr as  item()*) as xs:anyAtomicType* -->
    <function name="fn:size">
        <param name="expr" type="item()*"/>
        <return type="xs:integer"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.misc.FnSizeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:dateTime($arg1  as xs:date?, $arg2 as xs:time?)  as xs:dateTime?  -->
    <function name="fn:dateTime">
        <param name="arg1" type="xs:date?"/>
        <param name="arg2" type="xs:time?"/>
        <return type="xs:dateTime?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnDateTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:day-from-date($arg  as xs:date?) as  xs:integer?  -->
    <function name="fn:day-from-date">
        <param name="arg" type="xs:date?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnDayFromDateScalarEvaluatorFactory"/>
    </function>

    <!-- fn:day-from-dateTime( $arg as xs:dateTime?)  as xs:integer?  -->
    <function name="fn:day-from-dateTime">
        <param name="arg" type="xs:dateTime?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnDayFromDateTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:days-from-duration( $arg as xs:duration?)  as xs:integer?  -->
    <function name="fn:days-from-duration">
        <param name="arg" type="xs:duration?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnDaysFromDurationScalarEvaluatorFactory"/>
    </function>

    <!-- fn:deep-equal($parameter1  as item()*, $parameter2 as item()*)  as xs:boolean -->
    <function name="fn:deep-equal">
        <param name="parameter1" type="item()*"/>
        <param name="parameter2" type="item()*"/>
        <return type="xs:boolean"/>
    </function>

    <!-- fn:deep-equal($parameter1  as item()*, $parameter2 as item()*, $collation as xs:string) as xs:boolean -->
    <function name="fn:deep-equal">
        <param name="parameter1" type="item()*"/>
        <param name="parameter2" type="item()*"/>
        <param name="collation" type="xs:string"/>
        <return type="xs:boolean"/>
    </function>

    <!-- fn:default-collation()  as xs:string -->
    <function name="fn:default-collation">
        <return type="xs:string"/>
    </function>

    <!-- fn:distinct-values($arg  as xs:anyAtomicType*) as  xs:anyAtomicType* -->
    <function name="fn:distinct-values">
        <param name="arg" type="xs:anyAtomicType*"/>
        <return type="xs:anyAtomicType*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnDistinctValuesScalarEvaluatorFactory"/>
    </function>

    <!-- fn:distinct-values($arg  as xs:anyAtomicType*, $collation as xs:string)  as xs:anyAtomicType* -->
    <function name="fn:distinct-values">
        <param name="arg" type="xs:anyAtomicType*"/>
        <param name="collation" type="xs:string"/>
        <return type="xs:anyAtomicType*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnDistinctValuesScalarEvaluatorFactory"/>
    </function>

    <!-- fn:doc($uri as  xs:string?) as document-node()?  -->
    <function name="fn:doc">
        <param name="uri" type="xs:string?"/>
        <return type="document-node()?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.node.FnDocScalarEvaluatorFactory"/>
    </function>

    <!-- fn:doc-available($uri  as xs:string?) as  xs:boolean -->
    <function name="fn:doc-available">
        <param name="uri" type="xs:string?"/>
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.node.FnDocAvailableScalarEvaluatorFactory"/>
    </function>

    <!-- fn:document-uri($arg  as node()?) as  xs:anyURI?  -->
    <function name="fn:document-uri">
        <param name="arg" type="node()?"/>
        <return type="xs:anyURI?"/>
    </function>

    <!-- fn:empty($arg as  item()*) as xs:boolean -->
    <function name="fn:empty">
        <param name="arg" type="item()*"/>
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnEmptyScalarEvaluatorFactory"/>
    </function>

    <!-- fn:encode-for-uri($uri-part  as xs:string?) as  xs:string -->
    <function name="fn:encode-for-uri">
        <param name="uri-part" type="xs:string?"/>
        <return type="xs:string"/>
    </function>

    <!-- fn:ends-with($arg1  as xs:string?, $arg2 as xs:string?)  as xs:boolean -->
    <function name="fn:ends-with">
        <param name="arg1" type="xs:string?"/>
        <param name="arg2" type="xs:string?"/>
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnEndsWithEvaluatorFactory"/>
    </function>

    <!-- fn:ends-with($arg1  as xs:string?, $arg2 as xs:string?, $collation as xs:string)  as xs:boolean -->
    <function name="fn:ends-with">
        <param name="arg1" type="xs:string?"/>
        <param name="arg2" type="xs:string?"/>
        <param name="collation" type="xs:string"/>
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnEndsWithEvaluatorFactory"/>
    </function>

    <!-- fn:error() as  none -->
    <function name="fn:error">
        <return type="none"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.error.FnErrorScalarEvaluatorFactory"/>
    </function>

    <!-- fn:error($error as  xs:QName) as none -->
    <function name="fn:error">
        <param name="error" type="xs:QName"/>
        <return type="none"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.error.FnErrorScalarEvaluatorFactory"/>
    </function>

    <!-- fn:error($error as  xs:QName?, $description as xs:string)  as none -->
    <function name="fn:error">
        <param name="error" type="xs:QName?"/>
        <param name="description" type="xs:string"/>
        <return type="none"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.error.FnErrorScalarEvaluatorFactory"/>
    </function>

    <!-- fn:error($error as  xs:QName?, $description as xs:string, $error-object as item()*)  as none -->
    <function name="fn:error">
        <param name="error" type="xs:QName?"/>
        <param name="description" type="xs:string"/>
        <param name="error-object" type="item()*"/>
        <return type="none"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.error.FnErrorScalarEvaluatorFactory"/>
    </function>

    <!-- fn:escape-html-uri($uri  as xs:string?) as  xs:string -->
    <function name="fn:escape-html-uri">
        <param name="uri" type="xs:string?"/>
        <return type="xs:string"/>
    </function>

    <!-- fn:exactly-one($arg  as item()*) as  item() -->
    <function name="fn:exactly-one">
        <param name="arg" type="item()*"/>
        <return type="item()"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnExactlyOneScalarEvaluatorFactory"/>
        <property type="UniqueNodes" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
    </function>

    <!-- fn:exists($arg as  item()*) as xs:boolean -->
    <function name="fn:exists">
        <param name="arg" type="item()*"/>
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnExistsScalarEvaluatorFactory"/>
    </function>

    <!-- fn:false() as  xs:boolean -->
    <function name="fn:false">
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.bool.FnFalseScalarEvaluatorFactory"/>
    </function>

    <!-- fn:floor($arg as  numeric?) as numeric?  -->
    <function name="fn:floor">
        <param name="arg" type="xsext:numeric?"/>
        <return type="xsext:numeric?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.numeric.FnFloorScalarEvaluatorFactory"/>
    </function>

    <!-- fn:hours-from-dateTime( $arg as xs:dateTime?)  as xs:integer?  -->
    <function name="fn:hours-from-dateTime">
        <param name="arg" type="xs:dateTime?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnHoursFromDateTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:hours-from-duration( $arg as xs:duration?)  as xs:integer?  -->
    <function name="fn:hours-from-duration">
        <param name="arg" type="xs:duration?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnHoursFromDurationScalarEvaluatorFactory"/>
    </function>

    <!-- fn:hours-from-time($arg  as xs:time?) as  xs:integer?  -->
    <function name="fn:hours-from-time">
        <param name="arg" type="xs:time?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnHoursFromTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:id($arg as  xs:string*) as element()* -->
    <function name="fn:id">
        <param name="arg" type="xs:string*"/>
        <return type="element()*"/>
    </function>

    <!-- fn:id($arg as  xs:string*, $node as node())  as element()* -->
    <function name="fn:id">
        <param name="arg" type="xs:string*"/>
        <param name="node" type="node()"/>
        <return type="element()*"/>
    </function>

    <!-- fn:idref($arg as  xs:string*) as node()* -->
    <function name="fn:idref">
        <param name="arg" type="xs:string*"/>
        <return type="node()*"/>
    </function>

    <!-- fn:idref($arg as  xs:string*, $node as node())  as node()* -->
    <function name="fn:idref">
        <param name="arg" type="xs:string*"/>
        <param name="node" type="node()"/>
        <return type="node()*"/>
    </function>

    <!-- fn:implicit-timezone()  as xs:dayTimeDuration -->
    <function name="fn:implicit-timezone">
        <return type="xs:dayTimeDuration"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnImplicitTimezoneScalarEvaluatorFactory"/>
    </function>

    <!-- fn:in-scope-prefixes( $element as element())  as xs:string* -->
    <function name="fn:in-scope-prefixes">
        <param name="element" type="element()"/>
        <return type="xs:string*"/>
    </function>

    <!-- fn:index-of($seqParam  as xs:anyAtomicType*, $srchParam as xs:anyAtomicType)  as xs:integer* -->
    <function name="fn:index-of">
        <param name="seqParam" type="xs:anyAtomicType*"/>
        <param name="srcParam" type="xs:anyAtomicType"/>
        <return type="xs:integer*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnIndexOfScalarEvaluatorFactory"/>
    </function>

    <!-- fn:index-of($seqParam  as xs:anyAtomicType*, $srchParam as xs:anyAtomicType, $collation as xs:string)  as xs:integer* -->
    <function name="fn:index-of">
        <param name="seqParam" type="xs:anyAtomicType*"/>
        <param name="srcParam" type="xs:anyAtomicType"/>
        <param name="collation" type="xs:string"/>
        <return type="xs:integer*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnIndexOfScalarEvaluatorFactory"/>
    </function>

    <!-- fn:insert-before($target  as item()*, $position as xs:integer, $inserts as item()*)  as item()* -->
    <function name="fn:insert-before">
        <param name="target" type="item()*"/>
        <param name="position" type="xs:integer"/>
        <param name="inserts" type="item()*"/>
        <return type="item()*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnInsertBeforeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:iri-to-uri($iri  as xs:string?) as  xs:string -->
    <function name="fn:iri-to-uri">
        <param name="iri" type="xs:string?"/>
        <return type="xs:string"/>
    </function>

    <!-- fn:lang($testlang as  xs:string?) as xs:boolean -->
    <function name="fn:lang">
        <param name="testlang" type="xs:string?"/>
        <return type="xs:boolean"/>
    </function>

    <!-- fn:lang($testlang as  xs:string?, $node as node())  as xs:boolean -->
    <function name="fn:lang">
        <param name="testlang" type="xs:string?"/>
        <param name="node" type="node()"/>
        <return type="xs:boolean"/>
    </function>

    <!-- fn:last() as  xs:integer -->
    <function name="fn:last">
        <return type="xs:integer"/>
    </function>

    <!-- fn:local-name() as  xs:string -->
    <function name="fn:local-name" implicit-context="true">
        <return type="xs:string"/>
    </function>

    <!-- fn:local-name($arg  as node()?) as  xs:string -->
    <function name="fn:local-name">
        <param name="arg" type="node()?"/>
        <return type="xs:string"/>
    </function>

    <!-- fn:local-name-from-QName( $arg as xs:QName?) as  xs:NCName?  -->
    <function name="fn:local-name-from-QName">
        <param name="arg" type="xs:QName?"/>
        <return type="xs:NCName?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.qname.FnLocalNameFromQNameScalarEvaluatorFactory"/>
    </function>

    <!-- fn:lower-case($arg  as xs:string?) as  xs:string -->
    <function name="fn:lower-case">
        <param name="arg" type="xs:string?"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnLowerCaseEvaluatorFactory"/>
    </function>

    <!-- fn:matches($input  as xs:string?, $pattern as xs:string)  as xs:boolean -->
    <function name="fn:matches">
        <param name="input" type="xs:string?"/>
        <param name="pattern" type="xs:string"/>
        <return type="xs:boolean"/>
    </function>

    <!-- fn:matches($input  as xs:string?, $pattern as xs:string, $flags as xs:string)  as xs:boolean -->
    <function name="fn:matches">
        <param name="input" type="xs:string?"/>
        <param name="pattern" type="xs:string"/>
        <param name="flags" type="xs:string"/>
        <return type="xs:boolean"/>
    </function>

    <!-- fn:max($arg as  xs:anyAtomicType*) as xs:anyAtomicType?  -->
    <function name="fn:max">
        <param name="arg" type="xs:anyAtomicType*"/>
        <return type="xs:anyAtomicType"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.aggregate.FnMaxScalarEvaluatorFactory"/>
        <runtime type="aggregate" class="org.apache.vxquery.runtime.functions.aggregate.FnMaxAggregateEvaluatorFactory"/>
    </function>

    <!-- fn:max($arg as  xs:anyAtomicType*, $collation as string)  as xs:anyAtomicType?  -->
    <function name="fn:max">
        <param name="arg" type="xs:anyAtomicType*"/>
        <param name="collation" type="xs:string"/>
        <return type="xs:anyAtomicType"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.aggregate.FnMaxScalarEvaluatorFactory"/>
        <runtime type="aggregate" class="org.apache.vxquery.runtime.functions.aggregate.FnMaxAggregateEvaluatorFactory"/>
    </function>

    <!-- fn:min($arg as  xs:anyAtomicType*) as xs:anyAtomicType?  -->
    <function name="fn:min">
        <param name="arg" type="xs:anyAtomicType*"/>
        <return type="xs:anyAtomicType"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.aggregate.FnMinScalarEvaluatorFactory"/>
        <runtime type="aggregate" class="org.apache.vxquery.runtime.functions.aggregate.FnMinAggregateEvaluatorFactory"/>
    </function>

    <!-- fn:min($arg as  xs:anyAtomicType*, $collation as string)  as xs:anyAtomicType?  -->
    <function name="fn:min">
        <param name="arg" type="xs:anyAtomicType*"/>
        <param name="collation" type="xs:string"/>
        <return type="xs:anyAtomicType"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.aggregate.FnMinScalarEvaluatorFactory"/>
        <runtime type="aggregate" class="org.apache.vxquery.runtime.functions.aggregate.FnMinAggregateEvaluatorFactory"/>
    </function>

    <!-- fn:minutes-from-dateTime( $arg as xs:dateTime?)  as xs:integer?  -->
    <function name="fn:minutes-from-dateTime">
        <param name="arg" type="xs:dateTime?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnMinutesFromDateTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:minutes-from-duration( $arg as xs:duration?)  as xs:integer?  -->
    <function name="fn:minutes-from-duration">
        <param name="arg" type="xs:duration?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnMinutesFromDurationScalarEvaluatorFactory"/>
    </function>

    <!-- fn:minutes-from-time( $arg as xs:time?) as  xs:integer?  -->
    <function name="fn:minutes-from-time">
        <param name="arg" type="xs:time?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnMinutesFromTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:month-from-date($arg  as xs:date?) as  xs:integer?  -->
    <function name="fn:month-from-date">
        <param name="arg" type="xs:date?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnMonthFromDateScalarEvaluatorFactory"/>
    </function>

    <!-- fn:month-from-dateTime( $arg as xs:dateTime?)  as xs:integer?  -->
    <function name="fn:month-from-dateTime">
        <param name="arg" type="xs:dateTime?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnMonthFromDateTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:months-from-duration( $arg as xs:duration?)  as xs:integer?  -->
    <function name="fn:months-from-duration">
        <param name="arg" type="xs:duration?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnMonthsFromDurationScalarEvaluatorFactory"/>
    </function>

    <!-- fn:name() as  xs:string -->
    <function name="fn:name" implicit-context="true">
        <return type="xs:string"/>
    </function>

    <!-- fn:name($arg as  node()?) as xs:string -->
    <function name="fn:name">
        <param name="arg" type="node()?"/>
        <return type="xs:string"/>
    </function>

    <!-- fn:namespace-uri() as  xs:anyURI -->
    <function name="fn:namespace-uri" implicit-context="true">
        <return type="xs:anyURI"/>
    </function>

    <!-- fn:namespace-uri($arg  as node()?) as  xs:anyURI -->
    <function name="fn:namespace-uri">
        <param name="arg" type="node()?"/>
        <return type="xs:anyURI"/>
    </function>

    <!-- fn:namespace-uri-for-prefix( $prefix as xs:string?, $element as element())  as xs:anyURI?  -->
    <function name="fn:namespace-uri-for-prefix">
        <param name="prefix" type="xs:string?"/>
        <param name="element" type="element()"/>
        <return type="xs:anyURI"/>
    </function>

    <!-- fn:namespace-uri-from-QName( $arg as xs:QName?) as  xs:anyURI?  -->
    <function name="fn:namespace-uri-from-QName">
        <param name="arg" type="xs:QName?"/>
        <return type="xs:anyURI?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.qname.FnNamespaceUriFromQNameScalarEvaluatorFactory"/>
    </function>

    <!-- fn:nilled($arg as  node()?) as xs:boolean?  -->
    <function name="fn:nilled">
        <param name="arg" type="node()?"/>
        <return type="xs:boolean?"/>
    </function>

    <!-- fn:node-name($arg  as node()?) as  xs:QName?  -->
    <function name="fn:node-name">
        <param name="arg" type="node()?"/>
        <return type="xs:QName?"/>
    </function>

    <!-- fn:normalize-space() as  xs:string -->
    <function name="fn:normalize-space" implicit-context="true">
        <return type="xs:string"/>
    </function>

    <!-- fn:normalize-space($arg  as xs:string?) as  xs:string -->
    <function name="fn:normalize-space">
        <param name="arg" type="xs:string?"/>
        <return type="xs:string"/>
    </function>

    <!-- fn:normalize-unicode( $arg as xs:string?)  as xs:string -->
    <function name="fn:normalize-unicode">
        <param name="arg" type="xs:string?"/>
        <return type="xs:string"/>
    </function>

    <!-- fn:normalize-unicode( $arg as xs:string?, $normalizationForm as xs:string)  as xs:string -->
    <function name="fn:normalize-unicode">
        <param name="arg" type="xs:string?"/>
        <param name="normalizationForm" type="xs:string"/>
        <return type="xs:string"/>
    </function>

    <!-- fn:not($arg as  item()*) as xs:boolean -->
    <function name="fn:not">
        <param name="arg" type="xs:boolean"/>
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.bool.FnNotScalarEvaluatorFactory"/>
    </function>

    <!-- fn:number() as  xs:double -->
    <function name="fn:number" implicit-context="true">
        <return type="xs:double"/>
    </function>

    <!-- fn:number($arg as  xs:anyAtomicType?) as xs:double -->
    <function name="fn:number">
        <param name="arg" type="xs:anyAtomicType?"/>
        <return type="xs:double"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.node.FnNumberScalarEvaluatorFactory"/>
    </function>

    <!-- fn:one-or-more($arg  as item()*) as  item()+ -->
    <function name="fn:one-or-more">
        <param name="arg" type="item()*"/>
        <return type="item()+"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnOneOrMoreScalarEvaluatorFactory"/>
        <property type="DocumentOrder" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
        <property type="UniqueNodes" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
    </function>

    <!-- fn:position() as  xs:integer -->
    <function name="fn:position">
        <return type="xs:integer"/>
    </function>

    <!-- fn:prefix-from-QName( $arg as xs:QName?) as  xs:NCName?  -->
    <function name="fn:prefix-from-QName">
        <param name="arg" type="xs:QName?"/>
        <return type="xs:NCName?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.qname.FnPrefixFromQNameScalarEvaluatorFactory"/>
    </function>

    <!-- fn:QName($paramURI  as xs:string?, $paramQName as xs:string)  as xs:QName -->
    <function name="fn:QName">
        <param name="paramURI" type="xs:string?"/>
        <param name="paramQName" type="xs:string"/>
        <return type="xs:QName"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.qname.FnQNameScalarEvaluatorFactory"/>
    </function>

    <!-- fn:remove($target  as item()*, $position as xs:integer)  as item()* -->
    <function name="fn:remove">
        <param name="target" type="item()*"/>
        <param name="position" type="xs:integer"/>
        <return type="item()*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnRemoveScalarEvaluatorFactory"/>
    </function>

    <!-- fn:replace($input  as xs:string?, $pattern as xs:string, $replacement as xs:string)  as xs:string -->
    <function name="fn:replace">
        <param name="input" type="xs:string?"/>
        <param name="pattern" type="xs:string"/>
        <param name="replacement" type="xs:string"/>
        <return type="xs:string"/>
    </function>

    <!-- fn:replace($input  as xs:string?, $pattern as xs:string, $replacement as xs:string, $flags as xs:string)  as xs:string -->
    <function name="fn:replace">
        <param name="input" type="xs:string?"/>
        <param name="pattern" type="xs:string"/>
        <param name="replacement" type="xs:string"/>
        <param name="flags" type="xs:string"/>
        <return type="xs:string"/>
    </function>

    <!-- fn:resolve-QName($qname  as xs:string?, $element as element())  as xs:QName?  -->
    <function name="fn:resolve-QName">
        <param name="qname" type="xs:string?"/>
        <param name="element" type="element()"/>
        <return type="xs:QName?"/>
    </function>

    <!-- fn:resolve-uri($relative  as xs:string?) as  xs:anyURI?  -->
    <function name="fn:resolve-uri">
        <param name="relative" type="xs:string?"/>
        <return type="xs:anyURI?"/>
    </function>

    <!-- fn:resolve-uri($relative  as xs:string?, $base as xs:string)  as xs:anyURI?  -->
    <function name="fn:resolve-uri">
        <param name="relative" type="xs:string?"/>
        <param name="base" type="xs:string"/>
        <return type="xs:anyURI?"/>
    </function>

    <!-- fn:reverse($arg as  item()*) as item()* -->
    <function name="fn:reverse">
        <param name="arg" type="item()*"/>
        <return type="item()*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnReverseScalarEvaluatorFactory"/>
    </function>

    <!-- fn:root() as  node() -->
    <function name="fn:root" implicit-context="true">
        <return type="node()"/>
    </function>

    <!-- fn:root($arg as  node()?) as node()?  -->
    <function name="fn:root">
        <param name="arg" type="node()?"/>
        <return type="node()"/>
        <property type="UniqueNodes" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
    </function>

    <!-- fn:round($arg as  numeric?) as numeric?  -->
    <function name="fn:round">
        <param name="arg" type="xsext:numeric?"/>
        <return type="xsext:numeric?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.numeric.FnRoundScalarEvaluatorFactory"/>
    </function>

    <!-- fn:round-half-to-even( $arg as numeric?) as  numeric?  -->
    <function name="fn:round-half-to-even">
        <param name="arg" type="xsext:numeric?"/>
        <return type="xsext:numeric?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.numeric.FnRoundHalfToEvenScalarEvaluatorFactory"/>
    </function>

    <!-- fn:round-half-to-even( $arg as numeric?, $precision as xs:integer)  as numeric?  -->
    <function name="fn:round-half-to-even">
        <param name="arg" type="xsext:numeric?"/>
        <param name="precision" type="xs:integer"/>
        <return type="xsext:numeric?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.numeric.FnRoundHalfToEvenScalarEvaluatorFactory"/>
    </function>

    <!-- fn:seconds-from-dateTime( $arg as xs:dateTime?)  as xs:decimal?  -->
    <function name="fn:seconds-from-dateTime">
        <param name="arg" type="xs:dateTime?"/>
        <return type="xs:decimal?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnSecondsFromDateTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:seconds-from-duration( $arg as xs:duration?)  as xs:decimal?  -->
    <function name="fn:seconds-from-duration">
        <param name="arg" type="xs:duration?"/>
        <return type="xs:decimal?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnSecondsFromDurationScalarEvaluatorFactory"/>
    </function>

    <!-- fn:seconds-from-time( $arg as xs:time?) as  xs:decimal?  -->
    <function name="fn:seconds-from-time">
        <param name="arg" type="xs:time?"/>
        <return type="xs:decimal?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnSecondsFromTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:starts-with($arg1  as xs:string?, $arg2 as xs:string?)  as xs:boolean -->
    <function name="fn:starts-with">
        <param name="arg1" type="xs:string?"/>
        <param name="arg2" type="xs:string?"/>
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnStartsWithEvaluatorFactory"/>
    </function>

    <!-- fn:starts-with($arg1  as xs:string?, $arg2 as xs:string?, $collation as xs:string)  as xs:boolean -->
    <function name="fn:starts-with">
        <param name="arg1" type="xs:string?"/>
        <param name="arg2" type="xs:string?"/>
        <param name="collation" type="xs:string"/>
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnStartsWithEvaluatorFactory"/>
    </function>

    <!-- fn:static-base-uri() as  xs:anyURI?  -->
    <function name="fn:static-base-uri">
        <return type="xs:anyURI?"/>
    </function>

    <!-- fn:string() as  xs:string -->
    <function name="fn:string" implicit-context="true">
        <return type="xs:string"/>
    </function>

    <!-- fn:string($arg as  item()?) as xs:string -->
    <function name="fn:string">
        <param name="arg" type="item()?"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnStringScalarEvaluatorFactory"/>
    </function>

    <!-- fn:string-join($arg1  as xs:string*, $arg2 as xs:string)  as xs:string -->
    <function name="fn:string-join">
        <param name="arg1" type="xs:string*"/>
        <param name="arg2" type="xs:string"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnStringJoinEvaluatorFactory"/>
    </function>

    <!-- fn:string-length() as  xs:integer -->
    <function name="fn:string-length" implicit-context="true">
        <return type="xs:integer"/>
    </function>

    <!-- fn:string-length($arg  as xs:string?) as  xs:integer -->
    <function name="fn:string-length">
        <param name="arg" type="xs:string?"/>
        <return type="xs:integer"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnStringLengthEvaluatorFactory"/>
    </function>

    <!-- fn:string-to-codepoints( $arg as xs:string?)  as xs:integer* -->
    <function name="fn:string-to-codepoints">
        <param name="arg" type="xs:string?"/>
        <return type="xs:integer*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnStringToCodepointsEvaluatorFactory"/>
    </function>

    <!-- fn:subsequence($sourceSeq  as item()*, $startingLoc as xs:double)  as item()* -->
    <function name="fn:subsequence">
        <param name="sourceSeq" type="item()*"/>
        <param name="startingLoc" type="xs:double"/>
        <return type="item()*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnSubsequenceScalarEvaluatorFactory"/>
    </function>

    <!-- fn:subsequence($sourceSeq  as item()*, $startingLoc as xs:double, $length as xs:double)  as item()* -->
    <function name="fn:subsequence">
        <param name="sourceSeq" type="item()*"/>
        <param name="startingLoc" type="xs:double"/>
        <param name="length" type="xs:double"/>
        <return type="item()*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnSubsequenceScalarEvaluatorFactory"/>
    </function>

    <!-- fn:substring($sourceString  as xs:string?, $startingLoc as xs:double)  as xs:string -->
    <function name="fn:substring">
        <param name="sourceSeq" type="xs:string?"/>
        <param name="startingLoc" type="xs:double"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnSubstringEvaluatorFactory"/>
    </function>

    <!-- fn:substring($sourceString  as xs:string?, $startingLoc as xs:double, $length as xs:double)  as xs:string -->
    <function name="fn:substring">
        <param name="sourceSeq" type="xs:string?"/>
        <param name="startingLoc" type="xs:double"/>
        <param name="length" type="xs:double"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnSubstringEvaluatorFactory"/>
    </function>

    <!-- fn:substring-after($arg1  as xs:string?, $arg2 as xs:string?)  as xs:string -->
    <function name="fn:substring-after">
        <param name="arg1" type="xs:string?"/>
        <param name="arg2" type="xs:string?"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnSubstringAfterEvaluatorFactory"/>
    </function>

    <!-- fn:substring-after($arg1  as xs:string?, $arg2 as xs:string?, $collation as xs:string)  as xs:string -->
    <function name="fn:substring-after">
        <param name="arg1" type="xs:string?"/>
        <param name="arg2" type="xs:string?"/>
        <param name="collation" type="xs:string"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnSubstringAfterEvaluatorFactory"/>
    </function>

    <!-- fn:substring-before( $arg1 as xs:string?, $arg2 as xs:string?)  as xs:string -->
    <function name="fn:substring-before">
        <param name="arg1" type="xs:string?"/>
        <param name="arg2" type="xs:string?"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnSubstringBeforeEvaluatorFactory"/>
    </function>

    <!-- fn:substring-before( $arg1 as xs:string?, $arg2 as xs:string?, $collation as xs:string)  as xs:string -->
    <function name="fn:substring-before">
        <param name="arg1" type="xs:string?"/>
        <param name="arg2" type="xs:string?"/>
        <param name="collation" type="xs:string"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnSubstringBeforeEvaluatorFactory"/>
    </function>

    <!-- fn:sum($arg as  xs:anyAtomicType*) as xs:anyAtomicType -->
    <function name="fn:sum">
        <param name="arg" type="xs:anyAtomicType*"/>
        <return type="xs:anyAtomicType"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.aggregate.FnSumScalarEvaluatorFactory"/>
        <runtime type="aggregate" class="org.apache.vxquery.runtime.functions.aggregate.FnSumAggregateEvaluatorFactory"/>
    </function>

    <!-- fn:sum($arg as  xs:anyAtomicType*, $zero as xs:anyAtomicType?)  as xs:anyAtomicType?  -->
    <function name="fn:sum">
        <param name="arg" type="xs:anyAtomicType*"/>
        <param name="zero" type="xs:anyAtomicType?"/>
        <return type="xs:anyAtomicType?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.aggregate.FnSumScalarEvaluatorFactory"/>
        <runtime type="aggregate" class="org.apache.vxquery.runtime.functions.aggregate.FnSumAggregateEvaluatorFactory"/>
    </function>

    <!-- fn:timezone-from-date( $arg as xs:date?) as  xs:dayTimeDuration?  -->
    <function name="fn:timezone-from-date">
        <param name="arg" type="xs:date?"/>
        <return type="xs:dayTimeDuration?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnTimezoneFromDateScalarEvaluatorFactory"/>
    </function>

    <!-- fn:timezone-from-dateTime( $arg as xs:dateTime?)  as xs:dayTimeDuration?  -->
    <function name="fn:timezone-from-dateTime">
        <param name="arg" type="xs:dateTime?"/>
        <return type="xs:dayTimeDuration?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnTimezoneFromDateTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:timezone-from-time( $arg as xs:time?) as  xs:dayTimeDuration?  -->
    <function name="fn:timezone-from-time">
        <param name="arg" type="xs:time?"/>
        <return type="xs:dayTimeDuration?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnTimezoneFromTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:tokenize($input  as xs:string?, $pattern as xs:string)  as xs:string* -->
    <function name="fn:tokenize">
        <param name="input" type="xs:string?"/>
        <param name="pattern" type="xs:string"/>
        <return type="xs:string*"/>
    </function>

    <!-- fn:tokenize($input  as xs:string?, $pattern as xs:string, $flags as xs:string)  as xs:string* -->
    <function name="fn:tokenize">
        <param name="input" type="xs:string?"/>
        <param name="pattern" type="xs:string"/>
        <param name="flags" type="xs:string"/>
        <return type="xs:string*"/>
    </function>

    <!-- fn:trace($value as  item()*, $label as xs:string)  as item()* -->
    <function name="fn:trace">
        <param name="value" type="item()*"/>
        <param name="label" type="xs:string"/>
        <return type="item()*"/>
        <property type="DocumentOrder" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
        <property type="UniqueNodes" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
    </function>

    <!-- fn:translate($arg  as xs:string?, $mapString as xs:string, $transString as xs:string)  as xs:string -->
    <function name="fn:translate">
        <param name="arg" type="xs:string?"/>
        <param name="mapString" type="xs:string"/>
        <param name="transString" type="xs:string"/>
        <return type="xs:string"/>
    </function>

    <!-- fn:true() as  xs:boolean -->
    <function name="fn:true">
        <return type="xs:boolean"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.bool.FnTrueScalarEvaluatorFactory"/>
    </function>

    <!-- fn:unordered($sourceSeq  as item()*) as  item()* -->
    <function name="fn:unordered">
        <param name="sourceSeq" type="item()*"/>
        <return type="item()*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnUnorderedScalarEvaluatorFactory"/>
        <property type="DocumentOrder" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.documentorder.DocumentOrderNOPropagationPolicy"/>
        <property type="UniqueNodes" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
    </function>

    <!-- fn:upper-case($arg  as xs:string?) as  xs:string -->
    <function name="fn:upper-case">
        <param name="arg" type="xs:string?"/>
        <return type="xs:string"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.strings.FnUpperCaseEvaluatorFactory"/>
    </function>

    <!-- fn:year-from-date($arg  as xs:date?) as  xs:integer?  -->
    <function name="fn:year-from-date">
        <param name="arg" type="xs:date?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnYearFromDateScalarEvaluatorFactory"/>
    </function>

    <!-- fn:year-from-dateTime( $arg as xs:dateTime?)  as xs:integer?  -->
    <function name="fn:year-from-dateTime">
        <param name="arg" type="xs:dateTime?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnYearFromDateTimeScalarEvaluatorFactory"/>
    </function>

    <!-- fn:years-from-duration( $arg as xs:duration?)  as xs:integer?  -->
    <function name="fn:years-from-duration">
        <param name="arg" type="xs:duration?"/>
        <return type="xs:integer?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.datetime.FnYearsFromDurationScalarEvaluatorFactory"/>
    </function>

    <!-- fn:zero-or-one($arg  as item()*) as  item()?  -->
    <function name="fn:zero-or-one">
        <param name="arg" type="item()*"/>
        <return type="item()?"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnZeroOrOneScalarEvaluatorFactory"/>
        <property type="UniqueNodes" class="org.apache.vxquery.compiler.rewriter.rules.propagationpolicies.InputPropertyPropagationPolicy">
            <argument value="0"/>
        </property>
    </function>

    <!-- jn:keys($arg as item()*) as xs:string* -->
    <function name="jn:keys">
        <param name="arg" type="item()*"/>
        <return type="xs:string*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.json.JnKeysScalarEvaluatorFactory"/>
    </function>

    <!-- jn:null() as js:null -->
    <function name="jn:null">
        <return type="xs:string*"/>
        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.json.JnNullScalarEvaluatorFactory"/>
    </function>
</functions>
