Michael_K: location bei DOMParser

Hallo, ich habe folgendes Problem:

mit liegt ein xmString vor. Dieser wird in ein DOM document mit new DOMParser() gewandelt. Bei DOM Parser() kann man aber keine URL mitgeben um die Location festzulegen. Im Ergebnis ist document.documentURI und document.location null bzw. die Node.baseURI ist die URI des Dokuments, in dem der DOMParser ausgefuhert wurde. Da die Document Propoerties read-only sind, muss ich nun einen Weg finden, im Document irgendwo die Basis-URL anzugeben. Auf xml:base moechte nicht nicht zurueckgreifen, da dies wohl nicht mehr unterstuetzt wird. Somit ergibt sich fuer mich die Frage, wie ich elegant die URL ablegen kann. Ich tendiere dazu, dies als eine processing instruction noch vor dem root Element abzulegen, etwa so:

<?baseURI http://somewhere.com ?> 
<root>
  <text/>
</root>

Wuerde etwas dagegen sprechen? Ich benoetige die baseURI spaeter, um relative URL-Verweise, die im xmlString als Attribute hinterlegt sind, aufzuloesen.

Waere fuer Hilfestellungen dankbar.

  1. Hallo Michael_K,

    die Idee der processing instruction (PI) ist, eine Application (das PITarget) anzugeben, an die diese PI gerichtet ist, damit nicht später irgendwer die PI verarbeitet, für den sie nicht bestimmt ist.

    Problem ist natürlich: Wer definiert die zulässigen PITargets? Soweit ich erkennen kann: Niemand. PIs sind eh selten. Es gibt xml-stylesheet, und mso-application, und, tja. Keine Ahnung.

    Eine Attribut-Value orientierte Schreibweise ist zwar für PI nicht nötig, sieht aber idiomatischer für XML aus. Eine für dich sinnvolle PI könnte also sein:

    <?mk-document baseUri="http://example.org/foo/47" ?>
    

    Über die childNodes und nodeType 7 findest du das dann. Über die children nicht!

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo Rolf,

      mir geht es primaer um die Frage, ob es eine gute Lösung darstellt, da mir keine andere Lösung einfällt, wie ich die location in das document bringen kann. Die processing instruction hätte den Vorteil, dass dies nicht in die XML-Auszeichung "eingreift".

      Nach meinem Verständnis, darf ein processing instruction nur nicht mit 'xml' anfangen, alles ander ist zulässig.

      Gruss, Michael

      1. Hallo Michael_K,

        ja, die XML Deklaration und PIs sehen gleich aus. <?xml...?> ist offiziell keine PI, man könnte es aber durchaus als PI für den Parser deuten, welche Version und welches charset er zu Grunde legen soll.

        Worin liegen denn deine Skrupel begründet? Offenbar verspürst Du ja Unbehagen beim Gebrauch der PI.

        Der Ablauf ist, wenn ich dich richtig verstehe, dieser:

        • Lies einen XML String von irgendeiner URI
        • Parse den String und erstelle ein XmlDocument
        • zu einem späteren Zeitpunkt: löse Ressourcenreferenzen im XmlDocument basierend auf der URI auf, von der der XmlString kam.

        Die PI würdest Du dann bereits im XML String mitliefern? Oder nach dem Parsen des Strings hinzufügen? Wenn es das erstere ist: Kann man machen - aber das macht das Ausliefern des XML Dokument umständlich. Es darf entweder nicht mehr umziehen, oder muss von einer aktiven Komponente (z.B. PHP-Script) ausgeliefert werden. Wenn es das letztere ist, teile ich dein Unbehagen. Vermutlich sollten XmlDocument und baseUri dann zwei Eigenschaften eines Objekts sein.

        Rolf

        --
        sumpsi - posui - clusi