Классика баз данных - статьи

XUpdate


К настоящему времени рабочая группа XQuery в W3C еще не разработала стандартный язык изменения частей XML-документов. В нашей работе мы используем подмножество языка изменения частей XML-документов, который был предложен в статье И. Татаринова []. В дальнейшем язык изменений мы будем называть XUpdate. Синтаксис этого языка выглядит следующим образом:

update := 'InsertInto' '(' constr1 ',' locpath ')' | 'InsertBefore' '(' constr2 ',' locpath ')' | 'InsertAfter' '(' constr2 ',' locpath ')' | 'Delete' '(' locpath ')' 'Rename' '(' locpath, QName ')' constr1:= 'element' '{' QName '}' content | 'attribute' '{' QName '}' content constr2 := 'element' '{' QName '}' content content := '{' PCDATA '}' | '{' '}'

Каждая операция принимает на вход несколько аргументов (constr1, constr2 и locpath). Выражения constr1 и constr2 определяют новые узлы. Выражение locpath1 определяет путь адресации узлов в XML-документе, которые являются целевыми узлами операции изменения. Ниже приводится описание каждой операции.

  • InsertInto(constr1, locpath): вставляет новый узел (элемент или атрибут) в каждый целевой узел в позицию последнего дочернего узла.
  • InsertBefore(constr2, locpath): вставляет новый узел (только элемент) для каждого целевого узла в позицию предшествующего брата. InsertAfter(constr2, locpath) вставляет новый узел (только элемент) для каждого целевого узла в позицию последующего брата .
  • Delete(locpath): осуществляет глубокое удаление узлов (вместе со всеми потомками), определяемых locpath.
  • Rename(locapth, QName): присваивает новое имя QName целевым узлам операции.

Далее в статье мы будем использовать обозначения II, IA, IB, D и RN для ссылок на операции InsertInto, InsertAfter, InsertBefore, Delete и Rename соответственно. Кроме того, мы будем использовать обозначение I* для ссылки на произвольную операцию вставки.



Содержание раздела