Pfadangaben für DTD
Alex
- php
0 Thomas J.S.0 Alex0 Thomas J.S.0 Alex
0 Cybaer0 Alex
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>
Hallo,
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.
Dir wird kaum was anderes übrigbleiben, als eine absolute Pfadangabe wie: <!DOCTYPE db SYSTEM "http://www.example.net/db.dtd">
zu verwedenden.
Grüße
Thomas
Hallo Thomas,
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.Dir wird kaum was anderes übrigbleiben, als eine absolute Pfadangabe wie:
<!DOCTYPE db SYSTEM "http://www.example.net/db.dtd">
zu verwedenden.
Schade eigentlich. Bisher hatte meine Strukturierung den Vorteil, problemlos damit umziehen zu können, weil eben keine absoluten Angaben enthalten sind.
Hallo,
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.Dir wird kaum was anderes übrigbleiben, als eine absolute Pfadangabe wie:
<!DOCTYPE db SYSTEM "http://www.example.net/db.dtd">
zu verwedenden.Schade eigentlich. Bisher hatte meine Strukturierung den Vorteil, problemlos damit umziehen zu können, weil eben keine absoluten Angaben enthalten sind.
Hmm.... wenn du Domainumzug meinst, hast du recht, aber innerhalb des Domains sollte man dann eben eine fixe Adresse dafür einrichten.
Du kannst ja versuchen in jedem neue erstellten XML die DTD relativ anzugeben (was ich aber für eine weitaus schlechtere Lösung halte, als die absolute Adresse).
Grüße
Thomas
Hallo Thomas,
Bisher hatte meine Strukturierung den Vorteil, problemlos damit umziehen zu können, weil eben keine absoluten Angaben enthalten sind.
Hmm.... wenn du Domainumzug meinst, hast du recht, aber innerhalb des Domains sollte man dann eben eine fixe Adresse dafür einrichten.
Nein, ich meinte eigentlich nicht nur den Domainumzug. Mein Projekt liegt wie gesagt momentan z.B. selber in einem Unterverzeichnis. Da bisher auch niemand irgendwelche DTDs benutzt, gibt es keine gemeinsame "Lagerstelle" dafür, weshalb ich meine DTD nach Möglichkeit eben "im Projekt belassen" möchte. Die absolute Adressierung paßt dazu zwar nicht so ganz, aber ein Beinbruch ist ja nun auch nicht, wenn man die Alternativen bedenkt.
Hi,
Schade eigentlich. Bisher hatte meine Strukturierung den Vorteil, problemlos damit umziehen zu können, weil eben keine absoluten Angaben enthalten sind.
Und die XML-Dateien per mod_rewrite durch ein PHP-Script ausliefern lassen, das den passenden URL reinschreibt?
Gruß, Cybaer
Hallo Cybaer,
Und die XML-Dateien per mod_rewrite durch ein PHP-Script ausliefern lassen, das den passenden URL reinschreibt?
Die XML-Datei selber wird nicht direkt ausgeliefert, sonder dient den anderen Skripten als eine Art Datenbank, auf die sie über das xmldb-Interface zugreifen. Aber das nur am Rande. ;-)
Die DTD-Pfadangabe mit einem Skript je nach Kontext (also abhängig vom Skript, welches über das Interface auf die Daten zugreift) einzufügen, finde ich ziemlich umständlich. Dann doch lieber die absolute Adressierung. Die muß dann bei einem Umzug des Projekts zwar von Hand angepaßt werden, ist aber unterm Strich übersichtlicher.