Как протестировать функцию XQuery с аргументом карты

Я хочу протестировать функцию XQuery eXist-db, которая принимает тип данных Map< /а> аргумент. Согласно руководству по платформе тестирования eXist-db:

Параметры аннотаций XQuery должны быть литеральными значениями, поэтому допускаются только строки и числа. Таким образом, XQSuite применяет преобразование типов к каждому аргументу, а также к значениям, используемым в утверждениях.

Однако я не смог найти, как указать тип данных Map в виде строки. Вот пример кода, который у меня есть:

declare 
    %test:arg("input", "{p1}?id={id}") 
    %test:arg("props", "id") 
    %test:arg("props", "ABC") 
    %test:assertEquals("{p1}?id=ABC")
function properties:substitute($input as xs:string, $props as map (xs:string, xs:string)) as xs:string {
    let $keys := map:keys($props)
    let $tokens := $keys ! concat('\{', ., '\}')
    let $replacements := $keys ! $props(.)
    return functx:replace-multi($input, $tokens, $replacements)
};

Тест завершается со следующей ошибкой:

<testcase name="substitute"  class="properties:substitute">
<error type="java:org.exist.xquery.XPathException"  message="exerr:ERROR XPTY0004: The actual cardinality for parameter 2 does not match the cardinality declared in the function's signature: properties:substitute($input as xs:string, $props as map) xs:string. Expected cardinality: exactly one, got 3. [at line 7, column 5]
In function:
    properties:substitute(xs:string, map) [7:5:/db/apps/ssg/modules/properties.xql]
    test:apply(function, item()*) [327:9:jar:file:/C:/Programs/eXist-db/exist.jar!/org/exist/xquery/lib/xqsuite/xqsuite.xql]
    test:apply(function, element(), item()*) [234:9:jar:file:/C:/Programs/eXist-db/exist.jar!/org/exist/xquery/lib/xqsuite/xqsuite.xql]
    test:call-test(function, element(), element()*) [135:32:jar:file:/C:/Programs/eXist-db/exist.jar!/org/exist/xquery/lib/xqsuite/xqsuite.xql]"/>
</testcase>

Любые идеи, как заставить его работать?


person lagivan    schedule 17.09.2014    source источник


Ответы (1)


Получил следующий ответ в списке рассылки:

Извините, это невозможно. Карта не имеет простого строкового представления. Вам нужно будет написать вспомогательную функцию для теста, которая генерирует карту, например. взяв фрагмент xml и преобразовав его.

Вольфганг

person lagivan    schedule 17.09.2014