Un problème avec cette idée est que xpath "détruit" l'information.
Il existe un nombre infini d'arbres xml qui peuvent correspondre à de nombreux xpaths. Dans certains cas, comme l'exemple que vous donnez, il existe un arbre xml minimal évident qui correspond à votre xpath, où vous avez un prédicat qui utilise "=".
Mais par exemple, si le prédicat utilise l'opérateur non égal, ou tout autre opérateur arithmétique autre qu'égal, il existe un nombre infini de possibilités. Vous pourriez essayer de choisir un arbre xml "canonique" qui nécessite, disons, le moins de bits possible pour être représenté.
Supposons par exemple que vous ayez xpath /feed/entry/content[@source > 0]
. Maintenant, tout arbre xml de la structure appropriée dans lequel le contenu des nœuds a un attribut source dont la valeur est > 0 correspondrait, mais il y a un nombre infini de nombres supérieurs à zéro. En choisissant la valeur "minimale", vraisemblablement 1, vous pourriez tenter de canoniser votre xml.
Les prédicats Xpath peuvent contenir des expressions arithmétiques assez arbitraires, donc la solution générale à ce problème est assez difficile, voire impossible. On pourrait imaginer une énorme équation, et il faudrait la résoudre à l'envers pour trouver des valeurs qui correspondent à l'équation ; mais comme il peut y avoir un nombre infini de valeurs correspondantes (tant qu'il s'agit vraiment d'une inégalité et non d'une équation), il faudrait trouver une solution canonique.
De nombreuses expressions d'autres formes détruisent également des informations. Par exemple, un opérateur comme "ou" détruit toujours de l'information. Si vous savez que (X or Y) == 1
Vous ne savez pas si X est égal à 1, si Y est égal à 1 ou si les deux sont égaux à 1 ; tout ce dont vous êtes sûr, c'est que l'un des deux est égal à 1 ! Par conséquent, si vous avez une expression utilisant un OU, vous ne pouvez pas dire lequel des nœuds ou des valeurs qui sont des entrées du OU doit être 1 (vous pouvez faire un choix arbitraire et mettre les deux 1, car cela satisfera l'expression à coup sûr, tout comme les deux choix dans lesquels un seul d'entre eux est 1).
Supposons maintenant qu'il y a plusieurs expressions dans le xpath qui font référence au même ensemble de valeurs. Vous vous retrouvez alors avec un système d'équations ou d'inégalités simultanées qui peut être pratiquement impossible à résoudre. Encore une fois, si vous limitez le xpath autorisé à un petit sous-ensemble de sa pleine puissance, vous pouvez résoudre ce problème. Je soupçonne cependant que le cas général est similaire au problème de l'arrêt de Turing ; dans ce cas, étant donné un programme arbitraire (le xpath), il faut trouver un ensemble de données cohérentes qui correspondent au programme, et qui sont en quelque sorte minimales.
1 votes
Que voulez-vous dire par "une transformation fixe ne fonctionnera pas" ?
0 votes
L'objectif final est de faire correspondre des valeurs d'une base de données à différents emplacements dans un document XML. Dans les cas où la valeur n'existe pas dans la base de données, je ne veux pas créer la hiérarchie correspondante.