Hallo Johannes,
aus eigener Erfahrung kann ich Dir sagen: DTD parsen ist doof. Sehr doof. Ich habe für SELFHTML 9 selbst lange nach irgend einer brauchbaren (und vor allem unkomplizierten!) Lösung gesucht, die wir DTDs für automatisch generierte Referenzen auslesen können (d.h. die HTML-Referenz wird in SELFHTML 9 später zum Teil automatisch generiert sein). Etwas wirklich zufriedenstellendes habe ich noch nicht gefunden.
Was wir aktuell machen ist folgendes: Wir verwenden trang, ein Java-Tool [1], das zwischen DTD, XML Schema und Relax NG hin- und herkonvertieren kann. Damit konvertieren wir die XHTML-DTDs nach Relax NG (XML-Notation). Dieses verarbeiten wir dann mit XSLT weiter zu einem HTML-Dokument, das dann die Referenz darstellt. [2]
Das alles hilft Dir aber nicht wirklich weiter: Du hast nicht den Luxus, erst mühsam die DTD in ein anderes Format zu konvertieren. Ferner verwendest Du PHP und glaube mir aus Erfahrung: Selbst wenn Du es schaffst, eine Java-VM für trang automatisch zu starten, willst Du das aus Performancegründen definitiv nicht tun. Ausserdem lässt sich Relax NG in XML-Notation zwar leicht mit einem stinknormalen XML-Parser parsen, aber das logische Verarbeiten davon ist dann auch wieder etwas aufwändiger.
Alles in allem: Ich glaube nicht, dass Du eine einfache Lösung finden wirst, die das erledigen kann, was Du willst. Vielleicht täusche ich mich und es gibt für PHP etwas fertiges in dieser Richtung, aber ich könnte mir gut vorstellen, dass Du die DTD selbst von Hand parsen müsstest, um da wirklich weiter zu kommen - was dann gleich wieder verdammt aufwändig ist, weil die meisten DTDs lauter Entities verwenden, um Dinge abzukürzen.
Viele Grüße,
Christian
[1] Für den ganzen SELF9-Kram verwenden wir sowieso Java.
[2] Dabei importieren wir auch weitergehende Informationen wie Beschreibungstexte oder Linkziele aus anderen Quellen.