xquery

The xquery module provides a Python API for the XQuery 3.1 specification. This Python interface enables the user to compile an xquery expression and to execute it with different input data. The typical starting point would be the functions xquery.Expression.compile() and xquery.Expression.execute().

There are also utility functions xquery.compile() and xquery.execute() for simplified usage.

from altova_api.v2 import xquery
from altova_api.v2.xpath import SerializationParams, Session, MapItem, Sequence, AtomicItem
import altova_api.v2.xsd as xsd

expr_str = '''
    declare variable $iterations external := 5;
    <out>{(1 to $iterations)!<child nr="{.}"/>}</out>
'''
s = Session()
ext_vars = MapItem(s)
ext_vars.set_value(AtomicItem.create_from_QName(xsd.QName('iterations'), s), Sequence.create_from_item(AtomicItem.create_from_int(3, s)))
res = xquery.execute(
    expr_str,
    session=s,
    external_variables=ext_vars,
    delivery_format=DeliveryFormat.SERIALIZED,
    default_serialization_params=SerializationParams(s, indent=False, omit_xml_declaration=True)
)
assert res.main_value[0].anySimpleType().value == '''<out><child nr="1"/><child nr="2"/><child nr="3"/></out>'''

Classes

Functions

xquery.compile(expression, *, Session session, **kwargs)

Validate the provided expression and create a compiled expression from it. Internally uses the xquery.Expression.compile() classmethod but has different return values. Returns an xquery.Expression object on success or raises an exception if there are syntax or static errors detected. The keyword arguments corresponding to the properties of xquery.CompileOptions are supported and are used to initialize the internally created options object.

xquery.execute(expression, *, Session session, initial_context=None, **kwargs)
Compile and execute the xquery expression.

Returns an xpath.ResultList, or raises an exception if an error is encountered. The keyword arguments corresponding to the properties of xquery.CompileOptions and xquery.RuntimeOptions are supported and are used in the initialization of the respective objects.

from altova_api.v2 import xquery
from altova_api.v2.xpath import SerializationParams, Session, MapItem, Sequence, AtomicItem, TypeConverter
import altova_api.v2.xsd as xsd

expr_str = 'fold-left((1 to ($max - 1) idiv 2), 2, function($primes, $val){$primes, (2*$val+1)[every $i in $primes satisfies . mod $i]})'
s = Session()
ext_vars = MapItem(s)
ext_vars.set_value(AtomicItem.create_from_QName(xsd.QName('max'), s), Sequence.create_from_item(AtomicItem.create_from_int(16, s)))
res = xquery.execute(
     expr_str,
     session=s,
     external_variables=ext_vars,
     allow_undeclared_variables=True
)
tc = TypeConverter()
tc.to_python(res.main_value)
(2, 3, 5, 7, 11, 13)