XQuery для изменения значения атрибута и возврата предыдущего

Я пытаюсь обновить значение атрибута узла и вернуть его предыдущее значение в одном запросе, и я не могу найти способ сделать это. Я использую BaseX в качестве базы данных XML/XQuery.

На данный момент я попытался сделать это:

/Root/Elem/properties/property[@id='17']/@format,
replace value of node /Root/Elem/properties/property[@id='17']/@format with 'URL'

а еще это:

for $prop in /Root/Elem/properties/property[@id='17']
    let $format := $prop/@format
    return (replace value of node $prop/@format with 'URL', $format)

И несколько других тестов, но все они приводят к следующей ошибке:

List expression: no updating expression allowed.

Это ограничение BaseX или это невозможно в XQuery?


person koopajah    schedule 20.02.2013    source источник


Ответы (1)


Обновление XQuery не позволяет возвращать результаты запроса на обновление. Однако для этого можно использовать проприетарную функцию BaseX update:output($seq):

for $prop in /Root/Elem/properties/property[@id='17']
let $format := $prop/@format
return (replace value of node $format with 'URL', update:output($format))
person Leo Wörteler    schedule 20.02.2013
comment
Да, я видел проприетарную функцию в документации BaseX, но надеялся на более общий метод. Значит, в Xquery вам придется выполнять два последовательных запроса, чтобы получить значение, а затем изменить его? Другого метода нет? как насчет методов преобразования? - person koopajah; 20.02.2013
comment
В BaseX/XQuery Update нет другого метода. Преобразования не являются постоянными, поэтому вы можете изменить только временную копию. Возможно, это также возможно с помощью XQuery Scripting Extension, но я не знаете это, и BaseX еще не поддерживает это. - person Jens Erat; 20.02.2013
comment
Что касается официального средства обновления XQuery, вам, возможно, посчастливится услышать, что есть планы по поддержке как обновлений, так и результатов в XQUF 3.1. - person Christian Grün; 20.02.2013
comment
Спасибо за ваши Коментарии. По крайней мере, теперь я знаю, что это реальное ограничение XQuery (на данный момент) и что BaseX предоставляет альтернативу. - person koopajah; 20.02.2013