index Zurück zur Hilfe-Übersichthome Zurück zur Homepage

Datenbankarchiv

Scidb's Datenbankarchiv stützt sich auf ein unabhängiges Archivformat, für das die generelle Dateiendung ".ive" vorgesehen ist. Scidb benutzt jedoch die spezielle Dateiendung ".scv". Dieses Archivformat enthält Informationen über die enthaltenen Dateien wie Name, Größe, Komprimierungsmethode, etc.

Dieses Archivformat hat folgende Syntax (vereinfachte EBNF):

Archive     = Magic [ ArchInfo ] [ UserInfo ] { File } ;
Magic       = 'iveArch' LF ;
File        = Header BinaryData ;
Header      = HeadDelim LF HeaderInfo DataDelim ;
HeadDelim   = LF '<-- H E A D -->' ;
DataDelim   = '<-- D A T A -->' LF ;
HeaderInfo  =
  '<FileName>' { Space } FileName LF
  [ '<URI>' { Space } Number LF ]
  [ '<FileSize>' { Space } Number LF ]
  [ '<Size>' { Space } Number LF ]
  [ '<Compression>' { Space } Compression LF ]
  [ '<Checksum>' { Space } Crc32Number LF ]
  [ '<Modified>' { Space } Timestamp LF ]
  [ '<Encoding>' { Space } Encoding LF ] ;
Space       = HT | " " ;
Compression = 'raw' | 'zlib' | 'lzo' ;
BinaryData  = { Byte } ;
ArchInfo    = '<TotalSize>' { Space } Number ;
UserInfo    = LF { Attribute LF } Attribute ;
Attribute   = AttrName { Space } AttrValue ;
AttrName    = "<" Identifier ">" ;
Identifier  = AsciiLetter { AsciiLetter } ;
AttrValue   = AsciiGraphical { AsciiGraphical } ;
Timestamp   = Date " " Time ;
Date        = Year "-" Month "-" Day ;
Time        = Hour ":" Minute ":" Second ;

<FileName> ist irgendein plattformunabhängiger, gültiger Dateiname, ohne Pfadbezeichnung. Ein plattformunabhängiger Dateiname darf die Zeichen "<" und ">" nicht enthalten.

<URI> ist ein genormter Ressourcen-Identifikator, wie z.B. http://www.chess-and-more.com/any-database.scv, oder file:///home/chris/Chess/MyBase.sci. Es ist dem Dekodierungsprogramm überlassen wie die vorangestellten Pfadbezeichnungen verarbeitet werden.

<Size> enthält die Größe der Datei innerhalb der Archivierungsdatei.

<FileSize> enthält die Größe der entpackten Datei. Diese Angabe der internen Größe ist zugleich der Offset zum nächsten Datei-Header.

<TotalSize> enthält die Summe aller (externen) Dateigrößen. Ist diese Summe unbekannt, dann ist <TotalSize> nicht vorhanden.

<Checksum> ist eine mit dem CRC32-Verfahren ermittelte Prüfsumme. Diese Prüfsumme bezieht sich auf die Dateidaten in der Archivierungsdatei.

<Modified> enthält den Zeitstempel der letzten Modifikation (GMT), dieses Datum kann vom Dekoder verwendet werden um den Modifikationszeitstempel der extrahierten Datei wiederherzustellen.

<Encoding> spezifiziert den Zeichensatz der Datei.

Die Attribute <FileName>, <URI>, <FileSize>, <Size>, <Compression>, <Checksum> und <Modified> können in beliebiger Reihenfolge aufgeführt werden. Fehlt die Angabe <Compression> wird 'raw' als Wert angenommen (d.h. es wird keine Dekomprimierung verwendet).

Wenn für URI eine externe Quelle angegeben ist (z.B. http://*), dann ist in diesem Fall das Attribute Size nicht vorhanden, und FileSize mag ebenso unbekannt sein. Der Datenbereich ist bei Angabe einer externen Quelle normalerweise leer (Leerzeile). Es können jedoch Daten vorhanden sein, die verwendet werden sollen, wenn die externe Quelle nicht erreichbar ist. Dann muß allerdings auch wieder das Attribute Size spezifiziert sein.

Magic ist so gewählt, daß folgende Punkte gewährleistet sind:

  • Lesbarkeit mit einem Texteditor.
  • Keine Verwechslung mit einer gewöhnlichen Textdatei.
annotation Das Archivformat ist insgeamt so aufgebaut, daß es mit einem geeigneten Texteditor (der binäre Daten verkraftet) gelesen und bearbeitet werden kann.

UserInfo ist im ".scv"-Format folgendermaßen definiert:

UserInfo    = { LF Attributes } ;
Attributes  =
  "<Format>" { Space } Formats
  "<Type>" { Space } Type
  [ "<Count>" { Space } Number ] ;
Type        = 'single' | 'multi' ;
Formats     = Format { "," Format } ;
Format      = 'sci' | 'si3' | 'si4' |
              'cbh' | 'cbf' | 'pgn' |
              'pgn.gz | 'bpgn' | 'bpgn.gz' ;

<Count> ist die Anzahl der enthaltenen Partien in der Datenbank. Wenn diese Anzahl nicht bekannt ist, z.B. bei PGN-Dateien oder bei der Verwendung von URL's, dann ist dieses Attribut nicht vorhanden.

<Format> ist die Angabe des Formats der entpackten Datenbank.

Scidb-Archive enthalten in der Regel immer nur eine Datenbank (<Type> = 'single'). Es ist jedoch vorgesehen, daß auch mehrere Datenbanken in ein Archiv gepackt werden können. Dann muß <Type> den Wert 'multi' enthalten, und unter <Format> werden alle enthaltenen Datenbankformate komma-separiert aufgeführt. Zudem ist <Count> dann die Summe der Partien in allen Datenbanken.

Die Reihenfolge der Attribute <Count>, <Format> und <Type> ist beliebig.

Zum Abschluß zwei einfache Beispiele für Archive:

iveArch
<TotalSize> 468
<Count> 1
<Format> pgn
<Type> single
<-- H E A D -->
<FileName> one-game.pgn
<FileSize> 468
<Size> 468
<Compression> raw
<Checksum> 3225351655
<Modified> 2012-02-21 18:31:12
<-- D A T A -->
[Event "London knockout"]
[Site "London"]
[Date "1851.05.27"]
[Round "1.1"]
[White "Staunton, Howard"]
[Black "Brodie, Alfred"]
[Result "1-0"]
[EventDate "1851.05.27"]
[EventCountry "ENG"]
[EventType "k.o."]
[EventRounds "3"]
[ECO "C44"]
[TimeMode "normal"]
[Source "Tournaments"]
[SourceDate "2004.03.11"]

1.e4 e5 2.Nf3 Nc6 3.d4 exd4 4.Bc4 Bb4+ 5.c3 dxc3 6.O-O
Qf6 7.e5 Qe7 8.a3 cxb2 9.Bxb2 Bc5 10.Nc3 d6 11.Nd5 Qd8
12.exd6 Bxd6 13.Bxg7 Bg4 14.Re1+ Nge7 15.Nf6# 1-0
iveArch
<Format> pgn
<Type> multi
<-- H E A D -->
<FileName> tiny-1.pgn
<URI> http://scidb.sf.net/bases/tiny-1.pgn
<-- D A T A -->

<-- H E A D -->
<FileName> tiny-2.pgn
<URI> http://scidb.sf.net/bases/tiny-2.pgn
<-- D A T A -->