/A>Ограничения алгоритма
Для некоторых выражений языка XPath возможно их вычисление с использованием меньшего количества предков, чем это предписывается рассмотренным алгоритмом. В качестве примера рассмотрим приведенный ниже шаг доступа XPath (который может выступать в качестве полноправного выражения XPath или быть частью более сложного выражения):
ancestor::*[position()<3]
Нетрудно видеть, что в соответствии со Спецификацией XPath [1] данный шаг доступа выбирает всех тех предков контекстного узла, контекстная позиция которых меньше 3; т.е., другими словами, родителя и прародителя контекстного узла. Рассматривая данный шаг доступа как единое целое, представляется разумным, чтобы он требовал для себя количество предков, равное 2, поскольку предки контекстного узла, имеющие контекстную позицию, большую 2, отсекаются предикатом. Однако предлагаемый алгоритм вычисления выражений XPath строит свою работу по принципу анализа подвыражений, входящих в состав анализируемого выражения. В данном примере, обнаружив спецификатор оси
ancestor, входящей в состав шага доступа, алгоритм принимает решение о необходимости сохранения в контексте всех предков контекстного узла. Алгоритм не распознает семантическую зависимость, существующую в данном примере между спецификатором оси и предикатом в отношении количества предков.
Выявление на фазе статического анализа выражения зависимостей между его подвыражениями, аналогичных показанным в данном примере, является более общей задачей оптимизации вычисления выражений языка XPath. Предложенный в данной работе алгоритм ориентировался на подмножество способов оптимизации – оптимизацию вычисления обратных осей языка XPath, – и поэтому использовал ограниченные возможности статического анализа рассматриваемого выражения.