XSLT und mögliche Alternativen [geschlossen]

14

Ich habe mir XSLT angesehen, um eine XML-Datei in eine andere umzuwandeln (HTML usw.). Jetzt, wo ich sehe, dass XSLT (ein standardisiertes und verwendetes Tool) Vorteile bringt, bin ich aus mehreren Gründen zurückhaltend

  • XSLT-Prozessoren scheinen ziemlich riesig zu sein / ressourcenhungrig
  • XML ist eine schlechte Schreibweise für die Programmierung und genau darum geht es bei XSLT.

Es möchte XSLT hier nicht trollen, obwohl ich nur darauf hinweisen möchte, was ich daran nicht mag, um Ihnen eine Vorstellung davon zu geben, was ich von einer Alternative erwarten würde.

Ich habe einen Lisp-Hintergrund und frage mich, ob es bessere Möglichkeiten für Baumstrukturtransformationen gibt, die auf etwas Lispel basieren. Ich habe Verweise auf DSSSL gesehen, leider sind die meisten Links zu DSSSL tot, daher ist es schon eine Herausforderung, Code zu sehen, der dies veranschaulicht. Wird DSSSL noch verwendet? Ich erinnere mich, dass ich openjade einmal installiert hatte, als ich Docbook-Sachen ausgecheckt habe.

Jeff Atwoods Blogpost scheint darauf hinzudeuten, Ruby anstelle von XSLT zu verwenden.

Gibt es sinnvolle Möglichkeiten, XML-Transformationen ähnlich wie XSLT in einer Nicht-XML-Programmiersprache durchzuführen? Ich wäre offen für Input

  • Nützliche Bibliotheken für Skriptsprachen, die XML-Transformationen erleichtern
  • besonders (aber nicht ausschließlich) lisp-ähnliche Transformationssprachen oder Ruby usw.

Ein paar Dinge, die ich bisher gefunden habe:

wirrbel
quelle
Ich benutze HXT und Haskell ziemlich oft, es ist sehr angenehm
Daniel Gratzer
5
Um ehrlich zu sein, ist es nicht Jeff Atwood, der Ruby befürwortet, sondern er zitiert Martin Fowler, der Ruby bevorzugt. Der ursprüngliche Beitrag von Fowler ist hier: martinfowler.com/bliki/MovingAwayFromXslt.html Und er wurde vor 10 Jahren im Jahr 2003 geschrieben. Ich denke, XSLT 2.0 wurde 2007 mit vielen Verbesserungen veröffentlicht und XPath 2.0 im Jahr 2010.
FrustratedWithFormsDesigner

Antworten:

17

Es ist schwierig, Technologien zu bewerten, wenn Sie keine tiefgreifende Erfahrung mit ihnen haben, aber natürlich müssen Sie genau dann Ihre Entscheidungen treffen, sodass es keine einfache Antwort auf dieses Dilemma gibt.

Sie führen zwei Bedenken an: Leistung und Benutzerfreundlichkeit. Ich werde versuchen, beide unten zu adressieren.

Erstens Leistung. Die Leistung hängt natürlich nicht nur von der Sprache, sondern auch von der Implementierung und dem Fachwissen der Benutzer ab. Verschiedene XSLT-Prozessoren können sich in der Leistung stark unterscheiden, und der gleiche Prozessor kann sich in Abhängigkeit von seiner Verwendung stark unterscheiden (bei Saxon zum Beispiel wird sehr häufig festgestellt, dass Menschen mit Leistungsproblemen ihn mit DOM verwenden, was eine schlechte Kombination ist , und die Leistung kann sich verzehnfachen, wenn Sie stattdessen das native Baummodell von Saxon verwenden. Der erste Ratschlag ist also, nicht das Hörensagen zu messen. und der zweite Rat ist, sicherzustellen, dass die Person, die die Messung durchführt, über genügend Erfahrung verfügt, um keine dummen Fehler zu machen. Leichter gesagt als getan.

Grob gesagt können Sie Transformationsjobs in zwei Kategorien unterteilen: einfach und komplex. Für einfache Transformationen ist mit einem guten XSLT-Prozessor nur das Parsen und Serialisieren erforderlich, und die XSLT-Verarbeitungszeit kommt kaum ins Spiel. Da bei jeder anderen Technologie die gleichen Kosten für Parsing und Serialisierung anfallen, wird die Wahl der Transformationstechnologie keinen großen Unterschied machen (außer vielleicht sehr für sehr einfache Codierung mit Streaming, aber nicht viele Leute können sich die Programmierung leisten Zeit und Fähigkeiten, um dies umzusetzen). Bei komplexen Transformationen großer Dokumente treten die gleichen Probleme auf wie bei der SQL-Programmierung: Um eine gute Leistung zu erzielen, ist eine gute Interaktion zwischen den Fähigkeiten und Kenntnissen des Programmierers und den Fähigkeiten des Optimierers erforderlich. Wie bei SQL ist es Es ist sehr einfach, in solch einer Hochsprache ein paar einfache Anweisungen zu schreiben, die dazu führen, dass der Prozessor sehr viel Arbeit erledigen muss. Aber auch wie bei SQL können Programmierer, die wissen, was sie tun, viel besser als Anfänger.

Zweitens Benutzerfreundlichkeit. Die XML-basierte Syntax für XSLT ist für viele Menschen sehr abstoßend, wenn sie zum ersten Mal mit der Sprache in Berührung kommen. Dafür gibt es gute Gründe und echte Vorteile: Es gibt das Argument "template", dass ein Großteil des Codes aus XML besteht, das in das Ergebnisdokument geschrieben werden soll, und dass XML am besten in XML geschrieben wird. Und da ist das Argument "Reflektion"; In großen komplexen Systemen werden häufig Stylesheets gefunden, die Stylesheets generieren. Dann gibt es das Argument "Werkzeuge"; Wenn Sie sich in einem XML-Shop befinden, verfügen Sie wahrscheinlich über viele XML-Tools, z. B. syntaktisch gesteuerte Editoren, und es ist gut, dieselben Tools für die Verwaltung Ihrer Programme und Daten zu verwenden. Die Nachteile erweisen sich im Vergleich als ziemlich kosmetisch: s Die Anzahl der Tastenanschläge bei der Bearbeitung (leicht mit einem guten Bearbeitungswerkzeug zu beheben) und die Ausführlichkeit des Codes (die Lesbarkeit wird verringert). Die Ausführlichkeit wird in XSLT 2.0 durch die Einführung von Funktionen wie regulären Ausdrücken und Stylesheet-Funktionen erheblich reduziert: Viele Stylesheets werden auf die Hälfte oder ein Drittel verkleinert, wenn sie XSLT 2.0 voll ausnutzen.

Ihre Erwähnung von DSSSL hinterlässt ein schiefes Lächeln. Ich habe noch nie DSSSL verwendet, aber die Geschichten, die ich gehört habe, waren, dass es nicht erfolgreich war, weil seine Syntax arkan war und nichts mit der Syntax der Daten (SGML) zu tun hatte. Die Verwendung einer XML-Syntax für XSLT war stark von den Erfahrungen mit DSSSL motiviert.

Es gibt Leute, die XSLT lieben und es gibt Leute, die es hassen. Es überrascht nicht, dass diejenigen, die es häufig verwenden, in die erste Kategorie fallen. Diejenigen, die es nicht mögen, sind im Allgemeinen diejenigen, die nicht gelernt haben, wie man XSLT denkt. Sie könnten argumentieren, dass eine Programmiersprache nicht die Art und Weise beeinflussen sollte, wie Sie denken, aber es tut dies: Das Schreiben in einer regelbasierten Sprache unterscheidet sich von dem Schreiben in einer imperativen Sprache. Die erste Reaktion vieler Programmierer ist, dass sie sich weniger unter Kontrolle fühlen (das Problem beschreiben, anstatt dem Computer Schritt für Schritt mitzuteilen, was zu tun ist). Es ist der Reaktion sehr ähnlich, die Sie beim ersten Kennenlernen von SQL gesehen haben. Heutzutage lernen die Leute SQL zu einem früheren Zeitpunkt in ihrer Karriere, sodass weniger mentale Anpassungen erforderlich sind.

Letztendlich sollten Sie eine Technologie wählen, die auf objektiven messbaren Kriterien basiert, nicht auf Liebes- / Hassreaktionen. Es ist schwierig, diese Messungen durchzuführen. Aber es gibt viele Leute, die XSLT sehr intensiv und sehr erfolgreich nutzen, daher besteht kein Zweifel, dass dies möglich ist.

Michael Kay
quelle
2
Die gebräuchlichste Bezeichnung für "Regelbasierte Sprache" ist eine deklarative Sprache.
Daniel Gratzer
@ Michael Kay - Gut gesagt. Ich persönlich liebe XSLT und benutze es mit C #. Außerdem verwende ich es mit XSL-FO, um PDF-Dokumente zu erstellen. XSLT ist leistungsstark, sehr leistungsstark und ermöglicht mir, große Datenmengen schnell in HTML, XSL-FO, XML oder Text zu konvertieren.
PhillyNJ
3

Ohne zusätzliche Informationen zum Kontext ist die Beantwortung schwierig.

Trotzdem verstehe ich nicht, warum Sie XSLT nicht verwenden möchten. Es ist das richtige und leistungsstarke Werkzeug für diesen Job. Dies geschieht speziell, um eine XML in eine andere umzuwandeln.

XSLT-Prozessoren scheinen ziemlich riesig zu sein / ressourcenhungrig

Haben Sie harte Daten, um das zu unterstützen? Haben Sie die Lösung unter Verwendung von XSLT implementiert und festgestellt , dass XSLT ist der Engpass , der es unmöglich macht , ein Produkt zu liefern , während alle nicht-funktionalen Anforderungen an die Leistung im Zusammenhang erfüllen?

Ohne statistische Daten und Profilerstellung können Sie nicht behaupten, dass eine bestimmte Lösung nicht funktioniert. Sind die nichtfunktionalen Anforderungen angemessen genug? Würden Sie es vorziehen, beispielsweise zehn Tage Entwicklerarbeit zu verschwenden, um ein paar Hundert Millisekunden zu gewinnen, indem Sie XSLT durch eine andere Alternative ersetzen? Lohnt es sich?

XML ist eine schlechte Schreibweise für die Programmierung und genau darum geht es bei XSLT.

Sie möchten also eine XML in eine andere umwandeln, möchten aber nicht XSLT verwenden, weil "XML eine schlechte Notation ist"?

Wenn es die Tatsache ist, dass Sie XML als eine Art Programmiersprache verwenden, die Sie so nervt, dann sehen Sie es nicht als Programmierung, sondern als eine Reihe von Transformationsregeln.

Sie müssen nicht einmal XSLT von Hand schreiben. Es gibt viele ETL-Editoren, mit denen Sie eine XML-Datei grafisch in eine andere abbilden können: Es ist keinerlei Programmierung erforderlich. Einige von ihnen verwenden XSLT als Ausgabe.

Arseni Mourzenko
quelle
Bei XSLT-basierten Arbeitsblättern sind Ressourcenprobleme aufgetreten. Sie wurden mit einem grafischen Tool erstellt, funktionieren jedoch nicht mehr mit größeren Dateien.
Wirrbel
1
dann gibt es wahrscheinlich Probleme mit dir selbst XSLT filenichtXSLT Transformations
Malachi
Jetzt verurteile ich XML nicht. Ich denke sogar, dass es für die Darstellung von Daten geeignet ist (insbesondere für Markups). Als "Programmiersprache" - und XSLT ist eine domänenspezifische Programmiersprache - ist es unpraktisch. <xsl: whatever> Tags, Metasprachen (wie xpath, $ notation usw.) in den Abfrageattributen, alles, was nicht in XML abgebildet ist, wird in Attribut-Anführungszeichen gesetzt. Für einen Eindruck von s-Ausdruck Darstellung von XML: blog.getprismatic.com/blog/2013/1/22/... in solchen weg können XML und und proglang Arbeit seemless
wirrbel
1

Wenn Sie XSLT zum Generieren von XML verwenden, das auf dem unformatierten XSLT und einigen Parametern basiert, die Sie an die XSLT-Engine übergeben, ist die Verwendung eines Vorlagen-XML-Ansatzes viel einfacher zu verstehen und zu verwalten.

Ich war in einem Projekt, in dem Mustache verwendet wurde, um XSLT zu ersetzen, und das Ergebnis waren viel einfachere XML-Basisdateien, die jeder bearbeiten und anpassen konnte, anstatt dass die Projektarbeit an ein oder zwei mutige Seelen weitergegeben wurde, die in völliger Stille saßen mit Schweißperlen abfließen ...

Der Template-Ansatz ist nicht für die Verwendung geeignet, wenn das Basis-XML auch für sich selbst gültige Daten enthält und XSLT verwendet wird, um eine alternative Darstellung oder einen Auszug aus dem Quell-XML bereitzustellen.

Michael Shaw
quelle
Würde es Ihnen etwas ausmachen, mehr darüber zu erklären, was es tut, und warum empfehlen Sie es als Antwort auf die gestellte Frage? „Link-only Antworten“ sind nicht ganz willkommen bei Stapelaustausch
gnat
1
Geprüfte Antwort entsprechend Ihrem Feedback
Michael Shaw
0

XML ist keine Programmiersprache

XML ist eine Möglichkeit zum Übertragen / Transportieren von Daten.
Eine XSLT-Anweisung verwendet Xpath, um die Daten auf eine bestimmte Weise abzufragen und in ein anderes Datentransportobjekt / -dokument zu verschieben.

UND / ODER

XSLT kann Ihr XML in HTML umwandeln. Dies ist eine weitere Möglichkeit, die in einem XML-Dokument enthaltenen Daten anzuzeigen / zu transportieren.

Wenn Sie das XML ändern oder ein XML-Dokument erstellen möchten, können Sie eine beliebige Anzahl von Sprachen verwenden: C #, VB, Ruby usw.

Wenn Sie zum Transformieren eines XML-Dokuments eine XSLT-Datei verwenden, haben Sie normalerweise immer noch das ursprüngliche XML-Dokument. Sie ändern das ursprüngliche Dokument nicht, sondern erstellen ein neues.

Malachi
quelle
1
Wikipedia sagt: "XSLT ist eine Turing-vollständige Sprache, dh es kann jede Berechnung spezifizieren, die von einem Computer ausgeführt werden kann." Ich habe nie gesagt, dass XML per se eine Programmiersprache ist.
Wirrbel
Sie sagten, "XML ist eine schlechte Notation für die Programmierung" in den von mir verwendeten Programmiersprachen, mit denen Sie Daten ziemlich einfach aus XML-Dateien abrufen können. XSLT gewinnt an Bedeutung, weil es in der Lage ist, viele Berechnungen durchzuführen und diese Daten auf ein anderes Datentransportobjekt / -dokument zu verteilen. Es ist wie SQL zu SQL Server, es kann eine Menge Dinge tun, aber es ist meistens Back-End, nicht Front-End. SQL wie XSLT fragt Daten auf eine bestimmte Weise ab, aber Sie möchten die Ergebnisse dieser Abfrage niemals als Bericht bereitstellen. Sie möchten die Informationen an einen Berichtsersteller senden
Malachi,
2
XSLT fragt keine Daten ab, XPATH fragt ab. Ist XSLT nicht eine deklarative Sprache, die Anweisungen für geparste XML definiert?
PhillyNJ
XSLT definiert Transformationsregeln basierend auf Mustern, für die es Xpath verwenden kann. Das heißt, Sie können über Programmierkonstrukte auf hoher Ebene verfügen xsl:for-each xsl:apply-templates, xsl:if xsl:call-template xsl:value-ofum Transformationsregeln zu definieren.
Wirrbel
1
@ PhilVallone Ich stimme zu. Ich habe mich dort geirrt. Wirrbel, ich werde nicht mit Ihnen darüber streiten, was XSLT / XSL ist und was nicht. Wenn Sie Ihr XML-Dokument in ein anderes XML-Dokument umwandeln möchten, möchten Sie XSLT / XSL verwenden.
Malachi,
0

Ich habe an mehreren XML-Verarbeitungssystemen gearbeitet, die XSLT-Bibliotheken mit Java oder C ++ für die Teile kombinieren, in denen XSLT nicht so gut ist. Es gibt Bibliotheken, die selbst bei XML-Dateien mit 20 MB eine sehr gute XSLT-Leistung erzielen. Bei XSLT gibt es jedoch einige Einschränkungen hinsichtlich Kontext, Variablen und sehr komplexen Zeichenfolgenmustern. Jedes System, an dem ich gearbeitet habe, hat einige Dinge in Java / C ++ erledigt, weil der Kontext wichtig war oder ein komplexer regulärer Ausdruck geholfen hat. Ich gehe davon aus, dass XSLT und zusätzlicher Code in der Sprache Ihrer Wahl eine gute Möglichkeit sind, XML zu transformieren.

Michael Shopsin
quelle