5. Vergleich mit bekannten Verfahren


[ XML und Haskell Seminar ] ... [ Thema XML Verarbeitung mit Haskell ] ... [ 6. Literatur ]

Übersicht


5.1. Einleitung

Bei der Verarbeitung durch XSLT sowie DOM/JDOM wird das XML-Dokument in eine hierachische Baumstruktur überführt.
Wie in den vorangegangenen Kapiteln bereits erläutert arbeitet auch HaXML mit einer Baumstruktur.
Im Gegensatz zu XSLT und DOM/JDOM wurden bei der Haskell-Implementierung die mathematischen Belange zum Traversieren von Baumstrukturen (Konjunktion, Diskunktion und Negation) umgesetzt.
Weder im Design von XSLT noch im Design von DOM/JDOM wurde dieses vollständig berücksichtigt. Das Kombinieren mehrerer Constraints ist genausowenig möglich wie das Bilden von Negationen von Contraints.
Anhand einiger kurzer Beispiele sollen nun die Vorteile von HaXML aufgezeigt werden.
Haskell besticht in diesen Beispielen mit besonders kurzem Code, guter Lesbarkeit, Eleganz und einer breiterer Anwendbarkeit.

5.2. HaXML vs. XSLT

Einige Leute meinen, dass die non-XML Syntax dieser Kombinatoren eine gute Alternative zu XSLT ist. Aus diesem Grunde sollen an dieser Stelle einige Beispiele gebracht werden, die HaXML (Haskell) mit XSLT vergleichen lassen. Negationen können in XSLT nicht formuliert werden.

Kopieren von Elementen

XSL

HaXML

<xsl:template match="title">
  <xsl:copy>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>
multi(tag "title")
 
 

Löschen von Elementen

XSL

HaXML

<xsl:template match="nickname">
</xsl:template>
foldXml(keep `without` tag "nickname")
 
 

Verändern von Elementnamen

XSL

HaXML

<xsl:template match="article">
  <html>
    <xsl:apply-templates/>
  </html>
</xsl:template>
foldXml(mkElem "html" [children] `when` tag "article")
 
oder
 
mkElem "html" [children] `when` tag "article"
 
oder
 
replaceTag "html" `o` tag "article"

 

 

 

5.3. HaXML vs. DOM/JDOM

Die klaren Vorteile gegenüber DOM/JDOM sind in der Umsetzung der mathematischen Funktionen (Konjunktion, Disjunktion und Negation) begründet.

Erzeugen eines neuen (Wurzel) Elements

JDOM

HaXML

Document doc = new Document(root);
 
Element newRoot = new Element(“neue Wurzel”);
doc.setRootElement(new Root);
mkElem “neue Wurzel” [children] doc
 

Löschen von Elementen

JDOM

HaXML

List children = element.getChildren();

children.removeAll(“jack”);
foldXml(keep `without` tag "jack")
 
 

 

 




[ XML und Haskell Seminar ] ... [ Thema XML Verarbeitung mit Haskell ] ... [ 6. Literatur ]