André Laugks: serverseitig XML-Datei gegen DTD vaildieren

Hallo!

Hat jemand eine Ahnung, wie man einen XML-Datei serverseitig gegen eine DTD validieren kann, mit Hilfe von PHP?

Es gibt Classen wie Sand am Meer, um zu testen, ob eine XML-Dokument wohlgeformt ist. Auch die XML-Extension kann man dafür nutzen.

Ich habe schon eine ganze Weile gegoogelt und bei diversen Scriptsammlungen geschaut, aber nichts gefunden. Auch mit der DOMXML-Extension gibt es keine Möglichkeit.

Das einzige was mir einfällt, daß man serverseitig eine Software aufruft (mit system(), exec()), der Parameter (XML-Datei, DTD) mit auf den Weg gibt und so validiert und die Rückmeldungen ins Script mit übernimmt.

MfG, André Laugks

--
L-Andre @ gmx.de\n
  1. Hallo André,

    hast Du schonmal probiert was passiert, wenn Du das XML parst, und eine DTD Definition im XML stehen hast. Eigentlich sollte der Parser dann ja gegen die DTD validieren.
    Falls es nicht klappt ist die Kommandozeilentool Variante garnicht so schlecht, unter Linux fällt mir da das xmllint aus der libxml2 (Teil von Gnome) ein, ist bei mir unter Suse standardmäßig installiert.

    Gruss

    Marko

    1. Hallo!

      hast Du schonmal probiert was passiert, wenn Du das XML parst, und eine DTD Definition im XML stehen hast. Eigentlich sollte der Parser dann ja gegen die DTD validieren.

      Ja, daß hatte ich schon probiert. Ich habe in der DTD ein Element umbenannt, es aber im XML-Dokument so gelassen. Ich habe keine Fehlermeldung bekommen.

      PHP nutzt ja Expat und Expat ist IMHO kein validierender XML-Parser.
      Es testet IMHO nur ob das XML-Dokument wohlgeformt ist.

      [...] xmllint aus der libxml2 (Teil von Gnome) ein [...]

      Werde ich wohl auch haben, da ich mir libxml2 unter Linux installiert habe. Werde ich doch mal ausprobieren.

      MfG, André Laugks

      --
      L-Andre @ gmx.de
      1. Halihallo André

        hast Du schonmal probiert was passiert, wenn Du das XML parst, und eine DTD Definition im XML stehen hast. Eigentlich sollte der Parser dann ja gegen die DTD validieren.
        Ja, daß hatte ich schon probiert. Ich habe in der DTD ein Element umbenannt, es aber im XML-Dokument so gelassen. Ich habe keine Fehlermeldung bekommen.

        Genau, es ist nach wie vor wellformed.

        PHP nutzt ja Expat und Expat ist IMHO kein validierender XML-Parser.
        Es testet IMHO nur ob das XML-Dokument wohlgeformt ist.

        Das ist richtig.

        [...] xmllint aus der libxml2 (Teil von Gnome) ein [...]
        Werde ich wohl auch haben, da ich mir libxml2 unter Linux installiert habe. Werde ich doch mal ausprobieren.

        Entweder so über die shell/system. Ich weiss über PHP leider nichts für XML, aber in Perl
        wäre hätte ich da eine Kleinigkeit:

        #!/usr/bin/perl

        use XML::LibXML;
        my $parser = XML::LibXML->new;
        my $doc = $parser->parse_file('test.xml');
        $doc->validate;

        XML::LibXML basiert auf libxml2, enthält test.xml eine DOCTYPE mit externer oder interner
        DTD, wird diese nachgeladen und dagegen validiert. XML Schema support gibt es natürlich
        über XML::Schema.

        Viele Grüsse

        Philipp

        --
        RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
        Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
        1. Hallo!

          XML::LibXML basiert auf libxml2, enthält test.xml eine DOCTYPE mit externer oder interner
          DTD, wird diese nachgeladen und dagegen validiert. XML Schema support gibt es natürlich
          über XML::Schema.

          :-(

          Ich hätte mich damals doch für Perl entscheiden müßen.

          Aber, es hällt mich auch keine davon ab, so etwas für PHP zu bauen. ;-)

          MfG, André Laugks

          --
          L-Andre @ gmx.de