2010-12-08 18 views
5

J'ai un XSL et sa sortie XML. Puis-je produire un exemple de fichier d'entrée en utilisant ceux-ci? J'ai besoin de voir comment la structure de l'entrée XML doit être.Sortie XSL inversée

+0

Oui, vous pouvez, mais pas univoquely. Supposons que la fonction 'f()' de A à B et a1, a2 de A et b de B: par définition, vous pourriez avoir 'f (a1) = b' et' f (a2) = b' –

+0

Bonne question, + 1. Voir ma réponse pour une explication détaillée pourquoi cela ne peut généralement pas être fait. –

+0

Bonne question, mais je suis plus intéressé par la façon dont vous vous trouvez dans une position où vous avez le XSLT et la sortie, mais pas d'accès à l'entrée. La reconstruction en inversant le XSLT est-elle vraiment le seul moyen d'obtenir un échantillon? –

Répondre

1

Vous pourriez avoir une idée de certains du format original, mais il est probable que vous ne serez pas en mesure de reconstruire l'original complet.

Si le XSLT n'utilise pas une partie du code XML d'origine pour construire la sortie, vous ne pouvez pas reconstruire la structure d'origine. De plus, si votre XSLT utilise correctement des modèles, il peut être difficile de discerner quels modèles ont été appelés quand (et en particulier comment le XML original a été traité).

+0

Merci pour votre réponse. C'est OK si je perds une partie de la structure d'origine - j'ai juste besoin d'un exemple de fichier d'entrée. Savez-vous quels outils je peux utiliser pour faire ceci? – Michael

+0

@Michael - Je ne connais pas un tel outil. Probablement parce que le flux est inversé (sortie -> entrée) et parce qu'un original ne peut pas être reconstruit de manière fiable. – Oded

3

J'ai un XSL et sa sortie XML. Can Je produis un exemple de fichier d'entrée en utilisant ces?

Pour toute fonction f() d'avoir une marche arrière, il est nécessaire que le f() est une bidirectionnelle 1: 1 cartographie.

Toutes les fonctions ne sont pas des mappages 1: 1 bidirectionnels. L'exemple le plus simple qui vient à l'esprit est:

f(x) = x^2 

La quadrature n'est donc pas un mappage 1: 1 bidirectionnel. L'application de l'inverse de l'équerrage à 9 devrait produire deux valeurs - -3 et 3, mais par définition une fonction ne peut produire qu'une seule valeur.

Généralement, si une fonction n'est pas un mappage 1: 1 bidirectionnel, elle est à perte et toutes les informations qu'elle contient en entrée sont présentes (ou peuvent être déduites) du résultat. En cas d'équerrage, l'information perdue est celle de savoir si l'argument était positif ou négatif.

Il y a des fonctions qui perdent tout à 100%, comme les constantes:

f(x) = 1 

En général, une transformation XSLT est une fonction qui transforme le document XML source à un résultat de sortie. Généralement, une telle transformation est à perte (par exemple, on nous dit souvent de rejeter/ignorer certains attributs ou éléments).

Ainsi, la réponse que l'entrée à une transformation peut être récupérée à partir de la sortie est généralement négative.

Même s'il ne s'agit pas de l'entrée exacte, mais d'un "exemple d'entrée", cela ne peut pas toujours être produit et ne contiendra jamais les données perdues par la transformation.

+2

Merci pour cela. Je n'ai pas besoin de l'inverse pour produire la même entrée cependant. Si je commence par le fichier A et récupère le fichier B après la transformation, la transformation inverse prendra le fichier B et produira le fichier C (qui est différent de A). Cependant, une transformation vers l'avant à partir du fichier A ou C produit B. Je suppose qu'il n'y a pas d'outil qui fait cela, et je n'ai pas le temps de l'écrire. – Michael