Forum: PC-Programmierung DTD in anderen einbinden


von Hugo (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

bin gerade dabei mich in DTD zur Validierung von XML-Dateien einzulesen 
und hätte eine Frage dazu.
Ist es möglich innerhalb einer DTD Elemente anderer DTDs zu 
referenzieren?

Zum Hintergrund:
Ich habe ein fest vorgegebens DTD, das die Struktur eines Dokuments 
vorgibt. Jetzt sollen Teile dieser Dokumentenstruktur in andere Dateien 
ausgelagert werden und dann per Perl-Script an die entsprechende Stelle 
eingefügt werden. Das funktioniert auch schon soweit und das 
resultierende XML kann genauso wie das Ausgangsdokument gegen das DTD 
validiert werden.
Jetzt möchte ich aber auch noch den ausgelagerten Teil gegen ein DTD 
validieren. Dafür schreibe ich mir ein eigenes DTD. Und hier würde ich 
gerne Teile des fest vorgegebenen DTDs referenzieren (falls sich im fest 
vorgegebenen DTD doch mal etwas ändert muss ich das natürlich 
mitbekommen).

Als Beispiel habe ich fünf Dateien angehangen:
- compDtd.dtd ist der fest vorgegebene DTD
- myDtd.dtd ist mein neu erstelltes DTD
- partXml.xml ist der ausgelagerte Teil des XML-Dokuments
- result.xml ist das von dem Perl-Script prozessierte XML-Dokument
- xml.xml ist das XML-Dokument, in dem der 'Marker' durch das 
Perl-Script ersetzt wird

In der myDtd.dtd ist jetzt die Definition des indexes die gleiche wie im 
compDtd.dtd und genau das möchte ich verhindern.

Danke fürs Lesen und viele Grüße

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Hugo schrieb:
> bin gerade dabei mich in DTD zur Validierung von XML-Dateien einzulesen

Spar dir die Zeit und nutz' gleich XSDs ;)

Hugo schrieb:
> Ist es möglich innerhalb einer DTD Elemente anderer DTDs zu
> referenzieren?

http://xml.silmaril.ie/dtdincludes.html

von Michael K. (ampfing)


Lesenswert?

Läubi .. schrieb:
> Spar dir die Zeit und nutz' gleich XSDs
Geht nicht, das DTD ist von der Firma vorgegeben...

Läubi .. schrieb:
> http://xml.silmaril.ie/dtdincludes.html
Danke für den Link. Da steht zwar auch was, dass man Teile eine DTDs 
einbinden kann, aber entweder bin ich blind oder er bindet doch das 
ganze DTD ein (was ich an der Stelle ja nicht machen kann).
Gibt es da eine spezielle Syntax um nur einen Teil des DTDs einzubinden 
(also nur <index> von compDtd.dtd)?

Danke und viele Grüße

von Michael K. (ampfing)


Lesenswert?

Hi,

nochmal ich.
Vergiss den letzten Post, ich habe den Fehler gefunden - er lag nicht im 
DTD sondern im XML-Dokument.

Danke für die Hilfe und viele Grüße

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

puh... dan mußt du das so klein "hacken" das es keine Konflikte gibt, 
DTDs sind halt in vielem Beschränkt weswegen das:

Michael K. schrieb:
> Läubi .. schrieb:
>> Spar dir die Zeit und nutz' gleich XSDs
> Geht nicht, das DTD ist von der Firma vorgegeben...

dein eigentliches Problem sein wird ;)

Wieso kannst du nicht das "Teil DTD" in einer eigenen Datei auslagern 
und in der "HauptDTD" diese komplett einbinden? Die Rootelemente dann 
ggf. in jeweils eigenen Dateien?

von Michael K. (ampfing)


Lesenswert?

Hi,

Läubi .. schrieb:
> Wieso kannst du nicht das "Teil DTD" in einer eigenen Datei auslagern
>
> und in der "HauptDTD" diese komplett einbinden?
Weil der "HauptDTD" nicht von mir erstellt wird und firmenweit (große 
Firma!) eingesetzt wird. Der gilt nicht nur für die von mir zu 
erstellenden Dokumente sondern für alles mögliche andere auch noch.

Hab aber gesehen, dass das kein Problem ist, war wie geschrieben ein 
Problem der XML-Datei, nicht des DTDs.

Viele Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.