Difference between revisions of "ZIM file format"

From openZIM
Jump to: navigation, search
(Index pointer list)
m (Directory entries)
Line 40: Line 40:
 
| filePos            || integer || 0 || 8 || position of data chunk
 
| filePos            || integer || 0 || 8 || position of data chunk
 
|-
 
|-
| fileLen            || integer || 4 || 4 || length of data chunk
+
| fileLen            || integer || 8 || 4 || length of data chunk
 
|-
 
|-
| compression          || integer || 8 || 1 || 1=none; 2=zlib; 3=bzip2; 4=lzma
+
| compression          || integer || 12 || 1 || 1=none; 2=zlib; 3=bzip2; 4=lzma
 
|-
 
|-
| mime            || integer || 9 || 1 || code of mimetype
+
| mime            || integer || 13 || 1 || code of mimetype
 
|-
 
|-
| redirectFlag          || integer || 10 || 1 || 1 if this is a redirect
+
| redirectFlag          || integer || 14 || 1 || 1 if this is a redirect
 
|-
 
|-
| namespace          || char || 11 || 1 || namespace of article
+
| namespace          || char || 15 || 1 || namespace of article
 
|-
 
|-
 
| articleOffset          || integer || 16 || 4 || offset insize data chunk
 
| articleOffset          || integer || 16 || 4 || offset insize data chunk

Revision as of 10:49, 3 March 2009

The ZIM file format is based on the Zeno File Format. It starts with a header, which is described here:

Header

length in byte, all types are littlendian

Field Name Type Offset Length Description
magicNumber integer 0 4 Magic number to recognise the file format, must be 72173914
version integer 4 4 ZIM=4, version of the file format
uuid integer 8 16 unique id of this zim file
count integer 24 4 total number of articles
indexPtrPos integer 28 8 position of the directory pointerlist
mainPage integer 32 4 article index of main page or 0xffff if no main page
layoutPage integer 36 4 article index of layout page or 0xffff if no layout page

Each article in the zim file has a directory entry. Since the directory entry has a variable size, we have a index pointerlist, which is a list of 4-byte offsets, which points to the directory entries.

Index pointer list

The index pointer list is a list of 4 byte offsets to the directory entries. Since directory entries has variable size, this is needed for random access.

Due to the fact, that these pointers are only 4 byte, the directory entries have to be in the first 4GB of the zim file. The pointers to data in the directory entries are 8 bytes, so that the zim file may be much larger than the 4GB.

Directory entries

length in byte, all types are littlendian

Field Name Type Offset Length Description
filePos integer 0 8 position of data chunk
fileLen integer 8 4 length of data chunk
compression integer 12 1 1=none; 2=zlib; 3=bzip2; 4=lzma
mime integer 13 1 code of mimetype
redirectFlag integer 14 1 1 if this is a redirect
namespace char 15 1 namespace of article
articleOffset integer 16 4 offset insize data chunk
articleSize integer 20 4 uncompressed size of article
redirectIndex integer 16 4 index of redirected article (field shared with articleOffset)
extraLen integer 24 2 length of extra bytes (title and parameter)

Data

Mime types

Namespaces

Namespaces seperate different types of data stored in the ZIM File Format.

They can be distinguished by prepending the article namespace before the article name in the URL path, eg. http://localhost/A/Articlename.

Namespace Description
- template data
A articles
I images, files - see Image Handling
J images, text - see Image Handling
U categories, text - see Category Handling
V categories, article list - see Category Handling
W deprecated - see Zeno File Format
X fulltext index
Y deprecated - see Zeno File Format
Z deprecated - see Zeno File Format