Во-первых, я озадачен вашим фрагментом Java, потому что он не будет компилироваться (из-за вложенных кавычек), поэтому я не вижу, как вы добираетесь до того, как Saxon сообщает об ошибке синтаксиса XQuery. Также я представляю, что '/ n' действительно должно быть '\ n'. Итак, давайте предположим, что Java на самом деле говорит:
comp.compile("return \n"+
"if ( funcJavaDict:CheckString('em andamento','EM Andamento') ) then \n" +
" String('são iguais') \n"
"else \n"+
" String('são diferente') ");
Ключевые слова XQuery распознаются, только если они отображаются в правильном контексте. «return» в начале выражения не распознается как ключевое слово, поэтому оно интерпретируется как выражение пути, означающее child::element(return)
.
(На самом деле последние саксонские выпуски часто сообщают о предупреждении, если вы неправильно используете ключевое слово, подобное этому, но в данном конкретном случае это не срабатывает).
Таким образом, «return» - это законченное выражение, которое выбирает дочерние элементы с именем return
, и единственное, что может прийти после полного выражения, - это либо конец ввода, либо инфиксный оператор, такой как and
или union
. Ключевое слово if
не является ни одной из этих вещей, поэтому компилятор сообщает об ошибке синтаксиса. Решение состоит в том, чтобы удалить ключевое слово return
.
Но это не единственная ошибка в вашем запросе. Не существует функции с именем String
. Вы можете изменить его на string
, и запрос будет работать, но написание string('xyz')
- это просто скучный способ написания 'xyz'
, поэтому лучше полностью отказаться от вызова функции.