XPTY0002 элемент контекста

Я хочу выполнить файл xQuery в файле XML; При компиляции запроса у меня возникает следующая ошибка. Я не понимаю эту ошибку "контекстного элемента".

КОД (пример)

String xmlFileName = "D:/fichierContenu.XML";
FileInputStream XmlStream = new FileInputStream(xmlFileName);

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

FileInputStream fis = new FileInputStream(xmlFileName);
InputSource is = new InputSource(fis);
Document doc = builder.parse(is);

Element element = doc.getDocumentElement();

InputStream queryStream = queryStream = new FileInputStream("D:/TestsAuto.xq");
Processor proc = new Processor(false);
XQueryCompiler comp = proc.newXQueryCompiler();
XQueryExecutable exp = comp.compile(queryStream);  

XQuery

declare function local:checkRefTest() as xs:string {
    (:text and explication here. :)
    let $REFTEST := /dmodule/descendant::REFTEST  ***(=> line 363 HERE)***
    return 
        let $refTestKO := 
            for $item in $REFTEST
            return
                if(fn:string-length($item/@RefTest)= 13) then
                    let $RefTest := fn:substring($item/@RefTest, 1, 6)
                    return
                        if ($RefTest = "      ") then
                            if(fn:exists($item/@refval) and fn:exists($item/@refval2)) then 
                                ()
                            else
                                ()
                        else 
                            ()
                else
                    $item
        return 
            if(fn:empty($refTestKO)) then
                "OK"
            else
                fn:concat("NOK : test here ", "'",fn:string-join($refTestKO/@RefTest, "', '"),"'")
};

ОШИБКА

Ошибка в строке 363 модуля без идентификатора системы: XPDY0002: начальный символ «/» не может выбрать корневой узел дерева, содержащего элемент контекста: элемент контекста не определен Исключение в потоке «main» net.sf .saxon.s9api.SaxonApiException: «/» в начале не может выбрать корневой узел дерева, содержащего элемент контекста: элемент контекста не определен в net.sf.saxon.s9api.XQueryCompiler.compile(XQueryCompiler.java:504) в utils .xquery.essai.main(essai.java:92) Причина: net.sf.saxon.trans.XPathException: начальный '/' не может выбрать корневой узел дерева, содержащего элемент контекста: элемент контекста не определен в сети .sf.saxon.expr.SingleNodeExpression.typeCheck(SingleNodeExpression.java:29) в net.sf.saxon.expr.parser.ExpressionVisitor.typeCheck(ExpressionVisitor.java:206)

Не могли бы вы объяснить или показать мне фрагмент кода, который позволил бы мне решить эту проблему?
В чем моя проблема?


person Paul JONSAQ    schedule 17.01.2017    source источник
comment
Как насчет просмотра строки 363 и публикации ее здесь, если вы не можете ее понять? Или еще лучше попытаться сократить код до минимума, чтобы воспроизвести проблему и опубликовать полный код. Например, этот код находится внутри функции?   -  person Martin Honnen    schedule 17.01.2017


Ответы (1)


Согласно https://www.w3.org/TR/xquery-30/#FunctionDeclns, для определяемой пользователем функции "компонент статического типа элемента контекста отсутствует". Итак, я думаю, что ваш код объявляет функцию, но пытается получить доступ к /, предполагая, что узел контекста не будет работать, вам нужно будет объявить параметр для этой функции и передать узел при вызове функции и использовать, например. declare function local:checkRefTest($input) as xs:string { (:text and explication here. :) let $REFTEST := $input/dmodule/descendant::REFTEST.

person Martin Honnen    schedule 17.01.2017
comment
Есть ли решение, если я не могу изменить файл моего клиента? Это файл из индустрии, и я не могу его изменить :( - person Paul JONSAQ; 30.01.2017
comment
Если в коде есть ошибка, я думаю, что эту ошибку необходимо исправить. Если он создается каким-либо инструментом, то этот инструмент необходимо исправить. Или он предназначен для выполнения каким-то более снисходительным процессором XQuery, но я боюсь, что не знаю, в каком контексте предполагается использовать этот код. - person Martin Honnen; 30.01.2017