Skeeve: saxon und non-validating parser

Moin!

Ich rufe über Kommandozeile saxon auf um eine XML Datei zu transformieren. Sie lädt weitere XML Dateien nach. Dummerweise haben diese einen DOCTYPE angegeben und die angegebene DTD kann nicht geladen werden (unknown protocol). Einfluß auf diese Dateien habe ich nicht, muß sie also akzeptieren wie sie sind.

Nun meine ich das ganze, was ich mir bisher aus dem Netz gesucht habe, soweit verstanden zu haben, daß ich einen nicht-validierenden Parser verwenden muß. aelfred soll so einer sein, allerdings bekomem ich nur Fehlermeldungen, wenn ich saxon aufrufe.

Ich habe mehrere Varianten versucht. Alle enden mit:
Transformation failed: net.sf.saxon.trans.DynamicError: Failed to load net.sf.saxon.aelfred.SAXDriver

Hier ein Beispielaufruf:
java -cp saxon-aelfred.jar -jar saxon8.jar -x net.sf.saxon.aelfred.SAXDriver mein.xml mein.xsl

Beide jars liegen im aktuellen Verzeichnis.

Was mache ich beim Aufruf verkehrt?

Ist mein Ansatz vielleicht per se schon falsch?

-- Skeeve

  1. Hallo,

    Nun meine ich das ganze, was ich mir bisher aus dem Netz gesucht habe, soweit verstanden zu haben, daß ich einen nicht-validierenden Parser verwenden muß. aelfred soll so einer sein, allerdings bekomem ich nur Fehlermeldungen, wenn ich saxon aufrufe.

    Was mache ich beim Aufruf verkehrt?
    Ist mein Ansatz vielleicht per se schon falsch?

    An sich machst du nichts flasch, aber AElfred kann nicht gelade werden, weil es dafür keine Main-Classe im jar definiert ist.

    Verwende Saxon 6.5.2 (so fern du nur XSLT 1 verwendest), darin ist AElfred inkludiert
    http://saxon.sourceforge.net/saxon6.5.2/

    Grüße
    Thomas

    1. Danke!

      An sich machst du nichts flasch, aber AElfred kann nicht gelade werden, weil es dafür keine Main-Classe im jar definiert ist.

      Ich werde Java wohl nie so ganz verstehen ;-)

      Verwende Saxon 6.5.2 (so fern du nur XSLT 1 verwendest), darin ist AElfred inkludiert

      Unglücklicherweise ist es XSLT 2.0 - und zwar bis zum Exszess ;-) Inklusive selbstdefinierter Funktionen.

      -- Skeeve

      1. Hallo,

        An sich machst du nichts flasch, aber AElfred kann nicht gelade werden, weil es dafür keine Main-Classe im jar definiert ist.
        Ich werde Java wohl nie so ganz verstehen ;-)

        Na ja, wenn du AELfred in deine eigene Java-Class-Files inkludierst, kannst du mit import ....; auf die darin definierten Klassen und deren Methoden zugreifen.
        Sollte er dagegen allein laufen, braucht es einen Einstiegspunkt z.B.: "public static void main(String[] args)", wenn so ein Punkt nicht definiert ist, weiß Java nicht wo und in welche Klasse er einsteigen soll und es gibt einen Fehler.

        Verwende Saxon 6.5.2 (so fern du nur XSLT 1 verwendest), darin ist AElfred inkludiert
        Unglücklicherweise ist es XSLT 2.0 - und zwar bis zum Exszess ;-) Inklusive selbstdefinierter Funktionen.

        Hmm .... versuche es mit AltovaXML: http://www.altova.com/download_components.html

        Ebenfalls XSLT 2.0.

        Grüße
        Thomas

        1. Moin!

          » Sollte er dagegen allein laufen, braucht es einen Einstiegspunkt

          Ich hatte das so verstanden, daß dies über Jaxp(?) von Saxon aus angestoßen wird.

          Hmm .... versuche es mit AltovaXML: http://www.altova.com/download_components.html
          Ebenfalls XSLT 2.0.

          Aber dummerweise für WinDOS. Ich verwende aber Mac OS X.

          -- Skeeve

          1. Hallo,

            Hmm .... versuche es mit AltovaXML: http://www.altova.com/download_components.html
            Ebenfalls XSLT 2.0.

            Aber dummerweise für WinDOS. Ich verwende aber Mac OS X.

            Ich liebe es, wenn der Fragende wichtige Infos für sich behält!

            Grüße
            Thomas

            1. Moin!

              Aber dummerweise für WinDOS. Ich verwende aber Mac OS X.

              Ich liebe es, wenn der Fragende wichtige Infos für sich behält!

              ??? Es geht um Java! Sollte das nicht überall laufen? Es ist zwar nett, daß Du Alternativen vorschlägst, aber wenn es um Java geht, denke ich nicht, daß das zugrundeliegende System dermaßen wichtig ist.

              -- Skeeve

              1. Hallo,

                Aber dummerweise für WinDOS. Ich verwende aber Mac OS X.

                Ich liebe es, wenn der Fragende wichtige Infos für sich behält!

                ??? Es geht um Java!

                Ne, es ging um ein command-line Sache, dass saxon netterweise eine command-line interface bietet ist ein bonus.

                Sollte das nicht überall laufen? Es ist zwar nett, daß Du Alternativen vorschlägst, aber wenn es um Java geht, denke ich nicht, daß das zugrundeliegende System dermaßen wichtig ist.

                AltovaXML hat ein Java-Interface das auch funktioniert, aber es funktioniert dennoch nur unter Windows. (Und ich hätte mir das Posting erspart, wenn du Mac gesagt hättest.) und wie man es sieht java ist auch nicht java:
                https://forum.selfhtml.org/?t=154805&m=1008200

                Aber wenn es jetzt bei dir klappt, dann ist es fein und die Sache gegessen.

                Grüße
                Thomas

                1. Moin!

                  Aber wenn es jetzt bei dir klappt, dann ist es fein und die Sache gegessen.

                  Wie man's nimmt. aelfred ist gestrichen (s.o.). Der stolpert auch über das falsche Protokol. Aber Norman Walshs resolver Klasse hat mir geholfen: http://xml.apache.org/commons/

                  Damit mappe ich jetzt das verkehrte "protocol:/" auf ein lokales Verzeichnis und die Banane ist geschält.

                  Naja... Was die Unterschiede Java auf WinDOS und echtem Java ;-) angeht: Ich kümmere mich nicht um WinDOS, von daher kenne ich mich da nicht so aus, und interessiere mich auch nicht sonderlich dafür. Von daher ist meine Unterlassungssünde vielleicht verzeihlich. Aber vielleicht hilft Dein Vorschlag ja jemandem in einer ähnlichen Situation.

                  -- Skeeve

    2. Moin!

      An sich machst du nichts flasch, aber AElfred kann nicht gelade werden, weil es dafür keine Main-Classe im jar definiert ist.

      Wohl doch! Der Aufruf muß nämlich so aussehen:

      java -cp 'saxon8.jar:saxon-aelfred.jar' net.sf.saxon.Transform -x net.sf.saxon.aelfred.SAXDriver mein.xml mein.xsl

      Allerdings stolpert ausch aelfred über das dämliche "Protocol"

      -- Skeeve

      1. Hallo,

        An sich machst du nichts flasch, aber AElfred kann nicht gelade werden, weil es dafür keine Main-Classe im jar definiert ist.

        Wohl doch! Der Aufruf muß nämlich so aussehen:

        java -cp 'saxon8.jar:saxon-aelfred.jar' net.sf.saxon.Transform -x net.sf.saxon.aelfred.SAXDriver mein.xml mein.xsl

        Würde mich wundern. Das führt zu:
        "Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/saxon/Transform

        zumindest mit JVM 1.5.0_10

        Grüße
        Thomas

        PS: außer selbst etwas zu schreiben fällt mir nicht mehr ein.

        1. Moin!

          Würde mich wundern. Das führt zu:
          "Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/saxon/Transform

          zumindest mit JVM 1.5.0_10

          Was soll ich sagen? Ich hab es so aufgerufen und es lief durch. Version:
          $ java -version
          java version "1.5.0_06"
          Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-112)
          Java HotSpot(TM) Client VM (build 1.5.0_06-64, mixed mode, sharing)

          -- Skeeve