Одной из проблем этой идеи является то, что xpath «уничтожает» информацию.
Существует бесконечное количество деревьев XML, которые могут соответствовать многим путям. Теперь в некоторых случаях, например в приведенном вами примере, существует очевидное минимальное xml-дерево, которое соответствует вашему xpath, где у вас есть предикат, использующий «=».
Но, например, если предикат использует не равно или любой другой арифметический оператор, кроме равного, существует бесконечное число возможностей. Вы можете попытаться выбрать «каноническое» дерево xml, которое, скажем, требует наименьшего количества битов для представления.
Предположим, например, что у вас был xpath /feed/entry/content[@source > 0]
. Теперь любое дерево XML соответствующей структуры, в котором содержимое узла имеет источник атрибута, значение которого> 0, будет соответствовать, но существует бесконечное число чисел, больше нуля. Выбрав «минимальное» значение, предположительно 1, вы можете попытаться канонизировать ваш xml.
Предикаты Xpath могут содержать довольно произвольные арифметические выражения, поэтому общее решение этого достаточно сложное, если не невозможное. Вы можете вообразить огромное уравнение там, и оно должно быть решено в обратном порядке, чтобы найти значения, которые будут соответствовать уравнению; но поскольку может быть бесконечное количество совпадающих значений (если это действительно неравенство, а не уравнение), необходимо найти каноническое решение.
Многие выражения других форм также уничтожают информацию. Например, оператор типа «или» всегда уничтожает информацию. Если вы знаете, что (X or Y) == 1
, вы не знаете, если X равен 1, Y равен 1, или оба они равны 1; все, что вы точно знаете, это то, что один из них - 1! Поэтому, если у вас есть выражение, использующее OR, вы не можете сказать, какой из узлов или значений, которые являются входными данными для OR, должен быть 1 (вы можете сделать произвольный выбор и установить оба значения 1, так как это наверняка удовлетворит выражение, а также два варианта, в которых только один из них - 1).
Теперь предположим, что в xpath есть несколько выражений, которые ссылаются на один и тот же набор значений. Затем вы получаете систему уравнений или неравенств, которые практически невозможно решить. Опять же, если вы ограничите допустимый xpath небольшим подмножеством его полной мощности, вы можете решить эту проблему. Я подозреваю, что полностью общий случай похож на проблему остановки Тьюринга; в этом случае, учитывая произвольную программу (xpath), определите набор согласованных данных, которые соответствуют программе, и в некотором смысле минимальны.