Difference between revisions of "ZIM file format"

From openZIM
Jump to navigation Jump to search
Line 40: Line 40:


length in byte, all types are littlendian
length in byte, all types are littlendian
=== article entry ===


{|{{Prettytable}}
{|{{Prettytable}}
! Field Name !! Type !! Offset !! Length !! Description
! Field Name !! Type !! Offset !! Length !! Description
|-
|-
| filePos            || integer || 0 || 8 || position of data chunk
| redirectFlag || boolean || 0 || 1 || 0 for article
|-
|-
| fileLen            || integer || 8 || 4 || length of data chunk
| mime || integer || 1 || 1 || mime type code
|-
|-
| compression          || integer || 12 || 1 || 1=none; 2=zlib; 3=bzip2; 4=lzma
| empty || || 2 || 1 || was compression flag, this is now in the cluster header
|-
|-
| mime            || integer || 13 || 1 || code of mimetype
| namespace || char || 3 || 1 ||
|-
|-
| redirectFlag          || integer || 14 || 1 || 1 if this is a redirect
| cluster number || integer || 4 || 4 ||
|-
|-
| namespace          || char || 15 || 1 || namespace of article
| blob number || integer || 8 || 4 ||
|-
|-
| articleOffset          || integer || 16 || 4 || offset insize data chunk
| extraLen          || integer || 12 || 2 || length of extra bytes (title and parameter)
|-
|-
| articleSize          || integer || 20 || 4 || uncompressed size of article
|}
 
=== redirect entry ===
 
{|{{Prettytable}}
! Field Name !! Type !! Offset !! Length !! Description
|-
| redirectFlag || boolean || 0 || 1 || 1 for redirect
|-
| mime || integer || 1 || 1 || unused for redirects
|-
| empty || || 2 || 1 || was compression flag, this is now in the cluster header
|-
| namespace || char || 3 || 1 ||
|-
|-
| redirectIndex          || integer || 16 || 4 || index of redirected article (field shared with articleOffset)
| redirect index || integer || 4 || 4 ||
|-
|-
| extraLen          || integer || 24 || 2 || length of extra bytes (title and parameter)
| extraLen          || integer || 8 || 2 || length of extra bytes (title and parameter)
|-
|-
|}
|}

Revision as of 10:58, 4 April 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
clusterCount integer 36 4 number of data clusters
clusterPtrPos integer 40 8 position of the cluster pointer list
mainPage integer 48 4 article index of main page or 0xffffffff if no main page
layoutPage integer 52 4 article index of layout page or 0xffffffffff 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 8 byte offsets to the directory entries. Since directory entries has variable size, this is needed for random access.

Cluster pointer list

The cluster pointer list is a list of 8 byte offsets to the data clusters.

Directory entries

length in byte, all types are littlendian

article entry

Field Name Type Offset Length Description
redirectFlag boolean 0 1 0 for article
mime integer 1 1 mime type code
empty 2 1 was compression flag, this is now in the cluster header
namespace char 3 1
cluster number integer 4 4
blob number integer 8 4
extraLen integer 12 2 length of extra bytes (title and parameter)

redirect entry

Field Name Type Offset Length Description
redirectFlag boolean 0 1 1 for redirect
mime integer 1 1 unused for redirects
empty 2 1 was compression flag, this is now in the cluster header
namespace char 3 1
redirect index integer 4 4
extraLen integer 8 2 length of extra bytes (title and parameter)

Clusters

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