2010-12-08 17 views
5

Tengo un XSL y su salida XML. ¿Puedo producir un archivo de entrada de muestra usando estos? Necesito ver cómo debe ser la estructura del XML de entrada.Revertir salida XSL

+0

Sí, puede, pero no de manera unívoca. Supongamos que la función 'f()' de A a B y a1, a2 de A y b de B: por definición, usted podría tener 'f (a1) = b' y' f (a2) = b' –

+0

Buena pregunta, + 1. Vea mi respuesta para una explicación detallada de por qué esto generalmente no se puede hacer. –

+0

Buena pregunta, pero estoy más interesado en cómo te encuentras en una posición donde tienes el XSLT y la salida, pero no acceso a la entrada. ¿La reconstrucción mediante la inversión del XSLT es realmente la única forma de obtener una entrada de muestra? –

Respuesta

1

Puede obtener una idea de algunos del formato original, sin embargo, es probable que no pueda reconstruir el original completo.

Si el XSLT no usa parte del XML original para construir el resultado, no puede reconstruir la estructura original.

Además, si su XSLT usa plantillas correctamente, puede ser difícil discernir a qué plantillas se llamó cuando (y en particular cómo se procesó el XML original).

+0

Gracias por su respuesta. Está bien si pierdo parte de la estructura original, solo necesito un archivo de entrada de muestra. ¿Sabes qué herramientas puedo usar para hacer esto? – Michael

+0

@Michael - No conozco ninguna de esas herramientas. Probablemente porque el flujo se invierte (salida -> entrada) y porque un original no se puede reconstruir de manera confiable. – Oded

3

Tengo un XSL y su salida XML. ¿Puedo producir un archivo de entrada de muestra usando estos?

Para cualquier función f() tener un inverso, es necesario que el f() es una bidireccional 1: 1 de mapeo.

No todas las funciones son asignaciones bidireccionales 1: 1. El ejemplo más simple que me viene a la mente es:

f(x) = x^2 

Por lo tanto, la cuadratura no es una asignación bidireccional 1: 1. La aplicación del reverso de escuadrar al 9 tendría que producir dos valores: -3 y 3, pero, por definición, una función solo puede producir un valor.

Generalmente, si una función no es una asignación bidireccional 1: 1, es con pérdida, y no toda la información que tiene en la entrada está presente en (o puede deducirse de) el resultado.

En el caso de cuadrar, la información que se pierde es si el argumento fue positivo o negativo.

Hay algunas funciones que pierden el 100% todo, como las constantes:

f(x) = 1 

lo general una transformación XSLT es una función que transforma el documento XML de origen a algún resultado de salida. En general, dicha transformación es con pérdida (por ejemplo, a menudo se nos dice que descartemos/ignoremos algunos atributos o elementos).

Por lo tanto, la respuesta si la entrada a una transformación se puede recuperar de la salida es generalmente negativa.

Incluso si no es necesaria la entrada exacta, sino "una entrada de muestra", esto no siempre se puede producir y nunca contendrá los datos que se pierden por la transformación.

+2

Gracias por eso. Sin embargo, no necesito lo contrario para producir la misma entrada. Si comienzo con el archivo A y obtengo el archivo B después de la transformación, la transformación inversa tomará el archivo B y producirá el archivo C (que es diferente de A). Sin embargo, una transformación directa del archivo A o C produce B. Supongo que no hay una herramienta que lo haga, y no tengo tiempo para escribirlo. – Michael