[vienna.pm] XML::Checker::Parser

Peter J. Holzer hjp-vienna-pm-list at hjp.at
Mon Sep 17 16:30:34 CDT 2001


Hallo, allerseits!

Ich habe ein Problem mit obigem Modul. Bevor ich dem Enno Derksen einen
Bug-Report schicke, dachte ich, ich werfe es mal den hier versammelten
Perl- (und XML-) Experten vor, vielleicht bin ich auch nur blind.

Die Situation: Irgendwann vor längerer Zeit habe ich ein
XML-Validator-Script geschrieben, das so aussieht:

---8<------8<------8<------8<------8<------8<------8<------8<------8<---
#!/usr/bin/perl
use XML::Checker::Parser;
$c = new XML::Checker::Parser(ParseParamEnt => 1);

$c->parsefile($ARGV[0]);
--->8------>8------>8------>8------>8------>8------>8------>8------>8---

(ok, das eigentliche Script ist etwas komplizierter, weil die zu
überprüfenden Files keine reinen XML-Files sind, sondern zuerst eine
Zeile weggeschnitten und dafür eine DOCTYPE-Deklaration vorangestellt
werden muß, aber im Wesentlichen ist es das).

Das hat damals auch funktioniert. Jetzt funktioniert es (bei IMHO
unveränderter DTD) nicht mehr, sondern mault: 

    illegal parameter entity reference at line 5, column 12, byte 115 at
    /usr/lib/perl5/site_perl/5.005/i386-linux/XML/Parser.pm line 185

sobald man so etwas wie 

    <!ENTITY % xx '(a|b|c)*' >
    <!ELEMENT c %xx; >

versucht. Es schaut so aus, als ob er die ENTITY-Deklaration einfach
ignoriert (die gleiche Fehlermeldung bekommt man, wenn man sie wegläßt). 

Hier ist die vollständige Test-DTD:
---8<------8<------8<------8<------8<------8<------8<------8<------8<---
<!ENTITY % xx '(a|b|c)*' >
<!ELEMENT a (b,c) > 
<!ELEMENT b (a|b|c)* >
<!ELEMENT c %xx; >
--->8------>8------>8------>8------>8------>8------>8------>8------>8---

und hier das XML-File:
---8<------8<------8<------8<------8<------8<------8<------8<------8<---
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE a SYSTEM "test2.dtd">
<a>
  <b>
    <a>
      <b /><c />
    </a>
  </b>
  <c>
  </c>
</a>
--->8------>8------>8------>8------>8------>8------>8------>8------>8---

    xmlwf -p test2.xml 

(aus dem expat-Package)
schluckt das ganze ohne Probleme (wobei ich zugeben muß, daß ich nicht
genau weiß, was xmlwf macht, weil das Tool absolut undokumentiert ist -
daß die Option -p external Entities parset habe ich dem Source Code
entnommen. 

Ich habe sicherlich seit dem letzten mal, daß ich das verwendet habe,
expat upgegradet (aktuelle Version 1.95.2). Ein Versuch, auf expat 1.1.2
zurückzusteigen, endete aber damit, daß XML::Parser::Expat nicht mehr
funktionierte und sich auch nicht mehr neu installieren ließ (angeblich
keine expat-Library installiert). Welche expat-Version ich installiert
hatte, als es noch funktionierte, weiß ich nicht mehr.

<... time passes ...>

Hmm, ich habe gerade noch einmal probiert, libxml-enno (in dem
XML::Checker::Parser enthalten ist) zu installieren (auf zwei
verschiedenen Rechnern mit unterschiedlichen Perl-Versionen). Erfolglos
- jede Menge failed Tests. Scheint irgendwie hoffnungslos veraltet zu
sein. Kennt jemand einen anderen validierenden Parser?

	hp

-- 
   _  | Peter J. Holzer    | Oder glaubst du "Bugtraq" waere eine
|_|_) | Sysadmin WSR       | Science-Fiction TV-Serie ueber Schaben
| |   | hjp at hjp.at         | im Weltall?
__/   | http://www.hjp.at/ |	-- Juergen P. Meier in dcsm
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 350 bytes
Desc: not available
Url : http://mail.pm.org/archives/vienna-pm/attachments/20010917/8e1fa4eb/attachment.bin


More information about the Vienna-pm mailing list