Moin!
Jetzt erinnere ich mich ... ich dachte die Frage nach einem nicht-validierenden Parser konntest du erfolgreich lösen?
Nein. Das war das Problem mit den unbekannten Protokollen. Ein nicht validierender Parser (Aelfred) hat mir hier aber nicht weitergeholfen, da er die DTDs auch dann lädt, wenn er nicht validiert.
Die Protokolle sind kein Problem mehr, da ich einen Resolver einsetze. Der biegt die Protokollangabe dann auf das "file:" Protokoll um und packt noch den passenden Pfad davor.
Prinzipiell ließe sich das auch für diesen Fall einsetzen. Da hakt es dan aber an anderen stellen. Dazu gleich.
Da würde es reichen im XML statt DOCTYPE PUBLIC ein SYSTEM "file:///pfad/zu/datei.dtd" anzugeben.
Das hieße die XML Dateien "anzufassen". Unschön. Begründung... gleich ;-)
Ich weiß nicht, wie automatisiert die Sache bei dir sein muss,
Sehr.
aber wenn du es nur von Zeit zu Zeit brauchst, wäre ev. ein Editor, der XML-Kataloge unterstützt, eine Lösung. (gibts wohl auch für Mac).
jEdit. Bei mir im Dauereinsatz.
Eine "heftigere" Lösung wäre natürlich eine kleine Java-Anwendung zu schreiben, in der du den XML-Parser, seine Funktionen und Saxon genau nach deinen Wünschen entsprechend vorkonfigurierst.
Darauf wird es wohl hinauslaufen :-(
Nun die ausführlichere Erklärung.
Ich verwende öfters verschiedenste XSLTs. Es ist etwas lästig, jEdit jedesmal wieder passend dafür einzustellen, wenn ich mal wieder ein anderes brauche. Ich hätte jetzt in jEdit etwas einbauen können, um mir das zu erleichtern, allerdings hat jEdit's XSLT plugin noch so ein paar Bugs. Ich kann es also allenfalls zum Testen nehmen und nicht um mit den Daten was produktives anzufangen.
Nun ist saxon ja über Kommandozeile aufrufbar und somit muß ich im Normalfall nichts in Java programmieren, um einen XSLT Prozess anzustoßen. Also habe ich angefangen, mir ein kleines Applescript zu schreiben, dem ich diese XSLTs "anvertraue". Außerdem kennt es noch saxon und inzwischen auch den resolver.
Wenn ich nun ein oder mehrere XML Dateien auf dieses Script fallen lasse, präsentiert es mir die Liste seiner XSLTs und ich kann mir eines aussuchen, mit dem nun alle XMLs behandelt werden. Ungemein praktisch.
Durch eine Diskussion auf apfeltalk.de hat sich ergeben, daß mit einem XSLT auch die iTunes Playlisten damit einfach in m3u playlisten verwandelt werden können, oder, mit einem passenden XSLT sich Alben und Interpreten extrahieren lassen. Und so ist dann ein kleiner Beta Test entstanden.
Dabei hat sich bei einem Tester gezeigt, daß es halt nicht funktioniert, wenn keine Internetverbindung da ist.
Als Workaround köscht er sich nun den DOCTYPE heraus. Schöner wäre es natürlich, ich könnte das Problem von vornherein abfangen, indem gar nicht erst versucht wird ins Netz zu gehen.
Darum also die Frage hier.
Jetzt, wo der Hintergrund bekannt ist: Vielleicht hat ja noch jemand eine andere Idee, wie ich das Problem lösen kann.
-- Skeeve