2010-12-08 9 views
5

Ich habe ein XSL und seine XML-Ausgabe. Kann ich mit diesen eine Beispiel-Eingabedatei erstellen? Ich muss sehen, wie die Struktur der Eingabe-XML sein muss.Reverse XSL-Ausgabe

+0

Ja, Sie können, aber nicht univocol. Angenommen, die 'f()' Funktion von A nach B und a1, a2 von A und b von B: per Definition könnte man 'f (a1) = b' und' f (a2) = b' –

+0

Gute Frage, + 1. Sehen Sie meine Antwort für eine detaillierte Erklärung, warum dies nicht allgemein getan werden kann. –

+0

Gute Frage, aber ich bin mehr daran interessiert, wie Sie sich in einer Position befinden, wo Sie die XSLT und die Ausgabe haben, aber keinen Zugriff auf die Eingabe. Ist die Rekonstruktion durch Invertieren der XSLT wirklich die einzige Möglichkeit, eine Beispieleingabe zu erhalten? –

Antwort

1

Sie könnten eine Idee von einige des ursprünglichen Formats bekommen, aber es ist wahrscheinlich, dass Sie nicht in der Lage sein werden, das vollständige Original zu rekonstruieren.

Wenn die XSLT keinen Teil des ursprünglichen XML verwendet, um die Ausgabe zu erstellen, können Sie die ursprüngliche Struktur nicht rekonstruieren.

Wenn Ihr XSLT Vorlagen korrekt verwendet, ist es möglicherweise schwierig zu erkennen, welche Vorlagen wann aufgerufen wurden (und insbesondere wie die ursprüngliche XML verarbeitet wurde).

+0

Danke für Ihre Antwort. Es ist in Ordnung, wenn ich etwas von der ursprünglichen Struktur verliere - ich brauche nur eine Beispiel-Eingabedatei. Weißt du, mit welchen Werkzeugen ich das machen kann? – Michael

+0

@Michael - Ich kenne kein solches Werkzeug. Wahrscheinlich weil der Fluss umgekehrt ist (Ausgabe -> Eingabe) und weil ein Original nicht zuverlässig rekonstruiert werden kann. – Oded

3

Ich habe ein XSL und seine XML-Ausgabe. Kann ich eine Beispiel-Eingabedatei mit diese?

für jede Funktion einen umgekehrten f() haben, ist es notwendig, dass die f() ein bidirektionaler 1: 1-Zuordnung.

Nicht alle Funktionen sind bidirektionale 1: 1-Mappings. Das einfachste Beispiel, das in den Sinn kommt, ist:

f(x) = x^2 

So Quadrierung ist keine bidirektionale 1: 1-Abbildung. Das Anwenden der Umkehrung der Quadrierung auf 9 müsste zwei Werte erzeugen - -3 und 3, aber per Definition kann eine Funktion nur einen einzigen Wert erzeugen.

Wenn eine Funktion kein bidirektionales 1: 1-Mapping ist, ist sie im Allgemeinen verlustbehaftet, und nicht alle Informationen, die sie zur Eingabe hat, sind im Ergebnis enthalten (oder können davon abgezogen werden).

Im Falle der Quadrierung ist die Information verloren, ob das Argument positiv oder negativ war.

Es gibt Funktionen, die 100% alles, wie die Konstanten verlieren:

f(x) = 1 

Typischerweise wird eine XSLT-Transformation ist eine Funktion, die die Quelle XML-Dokument zu einem gewissen Ausgabeergebnis transformiert. Im Allgemeinen ist eine solche Transformation verlustbehaftet (zum Beispiel werden wir oft angewiesen, einige Attribute oder Elemente zu verwerfen/zu ignorieren).

Somit ist die Antwort, ob der Eingang zu einer Transformation aus der Ausgabe wiederhergestellt werden kann, im Allgemeinen negativ.

Auch wenn nicht die exakte Eingabe, sondern "eine Beispieleingabe" notwendig ist, kann diese nicht immer erzeugt werden und sie enthält niemals die Daten, die durch die Transformation verloren gehen.

+2

Danke dafür. Ich brauche die Rückseite nicht, um den gleichen Input zu erzeugen. Wenn ich mit Datei A beginne und Datei B nach der Umwandlung erhalte, nimmt die umgekehrte Umwandlung Datei B und erzeuge Datei C (die sich von A unterscheidet). Eine Vorwärtstransformation aus Datei A oder C erzeugt jedoch B. Ich gehe davon aus, dass es kein Tool gibt, das das tut, und ich habe keine Zeit, es zu schreiben. – Michael