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:
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 -->