XML Dokumente gegen DTD validieren

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
schmitteharry
Beiträge: 6
Registriert: Do 30. Jul 2009, 08:23

XML Dokumente gegen DTD validieren

Beitrag von schmitteharry »

Bei der Bearbeitung von XML Dokumenten nehme ich oft Änderungen an der Struktur vor. Ich habe also ein TXMLDocument im Speicher, dass immer mal wieder gegen die DTD validiert werden muss. Prinzipiell kann man bei, Laden eines XML Files in ein TXMLDocument auch den Parser mitlaufen lassen, der dann auch Hinweise bezüglich der Validität gibt.
Aber mir stellt sich die Frage : Kann man ein im Speicher befindliches TXMLDocument immer mal wieder "schnell" überprüfen, ob es nach Änderungen immer noch valide ist. Welche prinzipielle Vorgehensweise ist dafür sinnvoll ??

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: XML Dokumente gegen DTD validieren

Beitrag von Socke »

schmitteharry hat geschrieben:Welche prinzipielle Vorgehensweise ist dafür sinnvoll ??
Deine Anwendung sollte die DTD kennen und nur valide XML-Dokumente erzeugen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

schmitteharry
Beiträge: 6
Registriert: Do 30. Jul 2009, 08:23

Re: XML Dokumente gegen DTD validieren

Beitrag von schmitteharry »

Genau das ist das Problem :
Einerseits kenne ich die DTD, andereseits können aber User Strukturänderungen in der XML-Dokument-Instanz vornehmen. Und dann will ich sozusagen on the fly prüfen, ob die Strukturänderung wiederum ein valides Dokument ergibt oder nicht.
Zur Zeit mach ich das prinzipiell wie folgt :
  • User ändert Struktur in Doc (TXMLDocument)
    • (DOCTYPE - Definition in Doc ist gesetzt über SystemID)
    Programm schreibt Doc in CheckStream (TStringStream)
    • WriteXMLFile (Doc,CheckStream)
    Parser checkt den Checkstream und erzeugt dabei ensprechende Meldungen und ein TempDoc (TXMLDocument)
    • Parser.Parse (CheckStream,Tempdoc)
Ich habe zwar einen Workaround hier gefunden, der aber immer den "Umweg" über CheckStream gehen muss. Vielleicht weiss ja jemand, ob und wie man direkt auf dem Original Doc das "on the fly" validieren gegen die DTD bewerkstelligen kann.

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: XML Dokumente gegen DTD validieren

Beitrag von Socke »

schmitteharry hat geschrieben:Einerseits kenne ich die DTD, andereseits können aber User Strukturänderungen in der XML-Dokument-Instanz vornehmen. Und dann will ich sozusagen on the fly prüfen, ob die Strukturänderung wiederum ein valides Dokument ergibt oder nicht.
Wie groß ist denn die DTD? Bei einer kleinen sollte es doch kein Problem darstellen, dem Benutzer nur valide Änderungen anzubieten.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

schmitteharry
Beiträge: 6
Registriert: Do 30. Jul 2009, 08:23

Re: XML Dokumente gegen DTD validieren

Beitrag von schmitteharry »

Socke hat geschrieben: Wie groß ist denn die DTD? Bei einer kleinen sollte es doch kein Problem darstellen, dem Benutzer nur valide Änderungen anzubieten.
Die DTD Definition liegt im Moment bei ca 2000 Zeilen, und wird an verschiedenden Stellen noch angepasst. Damit ist eine harte Kodierung der gültigen Elemente an den jeweiligen Stellen im Dokument keine Alternative. Meine Frage zielt daher auf diejenigen unter euch, die schon mit der DOM Implementation gearbeitet haben und speziell beim dynamischen validieren von XML-Dokumenten Erfahrungen haben.

Antworten