Christoph Zurnieden: Meinung: Dateiformat für Gästebuch? (Flatfile)

Beitrag lesen

Hi,

ein sinnvoller Einsatz einer XML-Datenbank? Mmh ...
Es handelt sich hier um ein Gastebuch, alle Eintraege werden an's Ende angehangen. Alle? Nein, denn wenn da Unsinn drin steht oder Spam oder anderes soll das natuerlich raus. Bei einem Gaestebuch mit drei Eintraegen pro Tag geht das haendisch, bei mehr waere evt ein Automatismus faellig. Den gibt es vorgefertigt in verschiedene Sprachen. Die XML-Datenbank muss nicht endlos gross werden, da einzelne Teile als Archiv statisch ausgelagert werden koennen. Wird das regelmaessig getan, nach einer bestimmten Zeit/einem bestimmtem Aufkommen, kann die gesamte Datenbank archiviert werden. Das ist zwar etwas brutaler als der Schwanzabschneider hier aber bei einem Gaestebuch durchaus akzeptabel. Es gibt keinerlei Verbindung der Datensaetze, jeder einzelne ist autark.
Also: ein sinnvoller Einsatz einer XML-Datenbank? Ja, durchaus.

Aber Du wolltest ja auch Details zu Deiner Aufteilung.

<!ELEMENT gaestebuch (eintrag)+>

Das funktioniert nicht, Du musst bei 0 anfangen.
Oder selber den ersten Eintrag schreiben ;-)

Klar kannst Du auch erst bei dem erstem Eintrag die DB anlegen, aber das waere ein unnoetiger Branch.

<!ELEMENT eintrag (autor, nachricht)>
  <!-- definiert den Aufbau eines GB-Eintrags -->
  <!ATTLIST eintrag
  datum  CDATA #REQUIRED
  zeit  CDATA #REQUIRED
  >

Das Datum beinhaltet normalerweise die Zeit.
Ueblich ist bei sowas das Format aus RFC 822 ('date -R')

Ich wuerde auch noch eine laufende Nummer einfuegen, da die Zeit "nur" eine Sekundenaufloesung hat, wenn sie nach RFC 822 dargestellt wird. Ist aber auch nicht wirklich zwingend.

<!ELEMENT autor (#PCDATA)>

Bei allen Eintraegen mit variabler Laenge ist diese zu begrenzen.
Ja, das geht in der DTD nicht, ist mir schon klar ;-)

<!-- definiert den Aufbau der Daten über den Autor eines Eintrags -->
  <!ATTLIST autor
  email  CDATA #IMPLIED
  homepage CDATA #IMPLIED

Ja, das ist nachvollziehbar, aber ...

icq   CDATA #IMPLIED
  aim   CDATA #IMPLIED
  yim   CDATA #IMPLIED
  msn   CDATA #IMPLIED

... das ist eine unnoetige Begrenzung der Variabilitaet.
Dafuer sollte lieber ein eigenes unspezifisches Element angeboten werden, z.B.

<!ELEMENT autor (aname,(aadress)*)>
<!ELEMENT aname (#PCDATA )>
<!ELEMENT aadress EMPTY>
<!ATTLIST aadress
  protocol CDATA #REQUIRED
  ref      CDATA #REQUIRED>

So kann jedes, auch zukuenftige Protokoll hinzugefuegt werden. So natuerlich auch die aus irgendwelchen Gruenden so beliebten ikonographischen Bildchen.
Und wenn keiner 'was eintraegt spart's auch Platz.

<!ELEMENT br EMPTY>
  <!-- Zeilenumbruch: leeres Element -->

Tja, das Problem mit den Zeilenumbruechen. Ich wuerd's ebenfalls der Implementation ueberlassen, wie sie damit umgeht.

Oder könnte ich den Inhalt von <nachricht> als CDATA deklarieren?

Besser nicht.

so short

Christoph Zurnieden