/A>Иллюстрация предлагаемого подхода
В данном разделе рассматривается пример, иллюстрирующий последующее изложение предлагаемого в данной статье алгоритма вычисления обратных осей языка XPath.
Пример 1 Рассмотрим следующее выражение языка XPath: /doc/head/../body
Данное выражение представляет собой путь доступа (location path) и состоит из 4 шагов доступа:
- На первом шаге выбирается элемент документа, имеющий имя
doc.
- На 2-м шаге выбирается дочерний элемент с именем
head.
- На 3-м шаге возвращаемся к родительскому элементу элемента
head.
- На последнем шаге переходим к дочернему элементу с именем
body.
- На первом шаге доступа мы, как и прежде, выбираем элемент документа, имеющий имя doc.
- Допустим, что на 2-м шаге, когда нужно выбрать дочерний элемент с именем head, мы уже каким-то образом знаем, что следующим 3-м шагом потребуется возвращаться по дереву документа обратно, на тот самый узел, который на текущем 2-м шаге является контекстным узлом. Ввиду данного наблюдения, мы поступим более расчетливо: на 2-м шаге доступа не только выберем требуемый дочерний элемент с именем
head, но также сохраним текущий контекстный узел, поскольку он потребуется при вычислении оси parent на следующем шаге.
- Благодаря проделанной предварительной подготовке, вычисление оси parent на 3-м шаге доступа теперь сводится к простому извлечению ранее сохраненного узла.
- Последний шаг вычисляется как обычно: мы выбираем дочерний элемент с именем body.
Заметим, что на 3-м шаге рассматриваемого нами пути доступа имеется обратная ось parent [8] (записанная в терминах сокращенного синтаксиса XPath в виде двух точек). Ввиду того, что в SXML отсутствуют указатели с дочерних узлов на родительские узлы, реализовать стратегию прямолинейного пошагового вычисления данного пути доступа в SXML невозможно, поскольку, имея на входе лишь контекстный узел, невозможно получить никаких сведений об его родительском узле.
Даже не имея указателей с дочерних узлов на родительские узлы, тем не менее возможно вычислить путь доступа из примера 1, если задействовать дополнительные соображения о структуре вычисляемого выражения:
Благодаря анализу вычисляемого пути доступа из примера , содержащего обратную ось, оказалось возможным вычислить его даже при отсутствии указателей с дочерних узлов на родительские узлы в дереве документа. В следующем разделе рассмотренный на данном примере способ вычисления обратных осей формализуется более строго и обобщается в виде алгоритма на случай произвольного выражения языка XPath.