Alex: Pfadangaben für DTD

Beitrag lesen

Hallo Forum,

ich binde alle Klassendefinitionen, Pfadangaben zu Datenbanken etc., die überall im Projekt verfügbar sein sollen, in einer Art Headerdatei ein. Die Skripte, die die eigentliche Arbeit erledigen, binden ihrerseits diese Datei ein und kennen damit die nötigen Definitionen.

Die Headerdatei befindet sich im Rootverzeichnis des Projekts, welches aber nicht das HTTP-Rootverzeichnis auf dem Server ist. D.h. das Projekt liegt selber in einem Unterordner. Bisher hatte ich mit dieser Organisation keine Probleme, weil alle Pfadangaben immer relativ zum Rootverzeichnis des Projekts sind. Nun experimentiere ich gerade mit einer XML-Datei als Datenbank, die auch eine externe DTD angibt, damit die Datenbank auf Wunsch validiert werden kann. Die Verzeichnisstruktur sieht so aus:

projekt/
    header.php
    index.php
    daten/
        db.xml
        db.dtd
    klassen/
        xmldb.php

Wenn ich nun in index.php eine neues Objekt der xmldb erzeuge, übergebe ich als Datenquelle den Pfad "daten/db.xml", der in header.php als Konstante definiert wurde. Das aktuelle Arbeitsverzeichnis beim Aufruf von index.php ist "projekt". In der db.xml wird die DTD so angegeben: <!DOCTYPE db SYSTEM "db.dtd">. Beim Validieren mit meinem xmldb-Objekt erhalte ich die Fehlermeldung, daß db.dtd nicht gefunden wurde, weil offensichtlich im aktuellen Arbeitsverzeichnis danach gesucht wird.

Wie löse ich dieses Problem nun am geschicktesten?

Ich könnte <!DOCTYPE db SYSTEM "daten/db.dtd"> in die db.xml schreibe. Eigentlich möchte ich aber nicht die Verzeichnisstruktur in die Daten mengen.

Ich könnte die DTD direkt ins XML-Dokoument scheiben anstatt extern einzubinden. Das möchte ich vermeiden, weil ich beides gerne voneinander getrennt halten möchte, um leichter ergänzen zu können.

Ich könnte vor dem Erstellen eines neuen xmldb-Objekts mit chdir ins Verzeichnis "daten" wechseln, damit sich die Angaben in der XML-Datei nicht mehr auf "projekte" bezieht. Nachher dann wieder ins "../" wechseln. Das kommt mir etwas umständlich vor und bringt bei anderen Einbindungen vermutlich auch bloß Probleme mit sich.

Ich könnte ... <insert helpful suggestion here>