Реализация с использованием версий
Функциональные update-выражения допускают эффективную реализацию на основе использования версий узлов XML-документа. Неформально алгоритм можно сформулировать следующим образом. Функциональные update-выражения возвращают последовательность новых узлов {N}, возможно, изменяя некоторые узлы {I}, содержащиеся внутри этих узлов.
Тогда:
- для каждого из изменяемых узлов i последовательности {I} стоится узел i', соответствующий измененному состоянию, и помечается некоторым номером версии x; изменяемые узлы из последовательности {I} в исходном документе не изменяются;
- каждый узел из последовательности {N} помечается номером версии x и возвращается как часть результата;
- для каждого функционального update-выражения номер версии новых узлов больше номеров версий, использовавшхся в предшествующих update-выражениях; начальное состояние данных соответствует некоторой нулевой версии;
- При навигации по данным, начиная с некоторого начального узла, выбираются узлы с версией, номер которой равен или меньше номера версии начального узла.
Такой подход наименьшим образом ограничивает семантику функциональных update-выражений, но требует сложной реализации с поддержкой версий. При таком подходе в выражениях доступно как начальное, так и измененное состояние данных, и возможна произвольная композиция выражений, что обеспечивает наибольшую выразительность расширенного языка.