Skip to content

Commit 65bc69f

Browse files
committed
Merge Davis proposal with ZEP0009
Remaining text blocks are likely to be re-used under the more general "Extension points" section. see: #312
1 parent 214ba9b commit 65bc69f

File tree

2 files changed

+37
-32
lines changed

2 files changed

+37
-32
lines changed

docs/v3/codecs.rst

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
Codecs
33
======
44

5-
Under construction.
5+
The following documents specify codecs which are defined by the maintainers
6+
of the Zarr specification. Being listed below does not imply that a codec is
7+
required to be implemented by implementations.
68

79
.. toctree::
810
:glob:

docs/v3/core/v3.0.rst

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ The following figure illustrates the first part of the terminology:
295295

296296
*Codec*
297297

298-
The list of *codecs* specified for an array_ determine the encoded byte
298+
The list of *codecs* specified for an array_ determines the encoded byte
299299
representation of each chunk in the store_.
300300

301301
.. _metadata document:
@@ -632,12 +632,9 @@ mandatory names:
632632
^^^^^^^^^^
633633

634634
Specifies a list of codecs to be used for encoding and decoding chunks. The
635-
value must be an array of objects, each object containing a member with
636-
``name`` whose value is a string referring to a v3 codec specification. The
637-
codec object may also contain a ``configuration`` object which consists of
638-
the parameter names and values as defined by the corresponding codec
639-
specification. Since an ``array -> bytes`` codec must be specified, the
640-
list cannot be empty.
635+
value MUST be an array of extension definitions as defined under TODO.
636+
Because ``codecs`` MUST contain an ``array
637+
-> bytes`` codec, the list cannot be empty (See :ref:`codecs <codecs>`).
641638

642639
The following members are optional:
643640

@@ -1204,40 +1201,46 @@ the following procedure:
12041201

12051202
4. The chunk array ``A`` is equal to ``EC[0]``.
12061203

1207-
Specifying codecs
1208-
-----------------
1204+
.. _codec-specification:
12091205

1210-
To allow for flexibility to define and implement new codecs, this
1211-
specification does not define any codecs, nor restrict the set of
1212-
codecs that may be used. Each codec must be defined via a separate
1213-
specification. In order to refer to codecs in array metadata
1214-
documents, each codec must have a unique identifier, which is a URI
1215-
that dereferences to a human-readable specification of the codec. A
1216-
codec specification must declare the codec identifier, and describe
1206+
Core codecs
1207+
-----------
1208+
1209+
This spec defines a set of well-known codecs ("core codecs") which all Zarr implementations SHOULD implement in
1210+
order to ensure a minimal level of interoperability between Zarr implementations.
1211+
The list of core codecs is part of the Zarr v3 specification.
1212+
Changes to the list of core codecs MUST be made via the same protocol used for
1213+
changing the Zarr v3 specification. Changes to the list of core codecs SHOULD be made
1214+
in close collaboration with extant Zarr v3 implementations. A new core codec SHOULD be added to the
1215+
list when a sufficient number of Zarr implementations support or intend to support that codec.
1216+
An existing core codec SHOULD be removed from the list when a sufficient number of implementation
1217+
developers and Zarr users deem the codec worth removing, e.g. because of a technical flaw in the
1218+
algorithm underlying the codec.
1219+
1220+
Extension codecs
1221+
----------------
1222+
1223+
To allow for flexibility to define and implement new codecs, the
1224+
list of codecs defined for an array MAY contain codecs which are
1225+
defined in separate specifications. In order to refer to codecs in array metadata
1226+
documents, each codec must have a unique identifier, which is either
1227+
a known "raw name" or as a URI as defined under :ref:`extensions_section`.
1228+
For ease of discovery, it is
1229+
recommended that codec specifications are contributed to the
1230+
registry of extensions (TODO).
1231+
1232+
A codec specification must declare the codec identifier, and describe
12171233
(or cite documents that describe) the encoding and decoding algorithms
12181234
and the format of the encoded data.
1219-
12201235
A codec may have configuration parameters which modify the behaviour
12211236
of the codec in some way. For example, a compression codec may have a
12221237
compression level parameter, which is an integer that affects the
12231238
resulting compression ratio of the data. Configuration parameters must
12241239
be declared in the codec specification, including a definition of how
12251240
configuration parameters are represented as JSON.
12261241

1227-
The Zarr core development team maintains a repository of codec
1228-
specifications, which are hosted alongside this specification in the
1229-
`zarr-specs GitHub repository`_, and which are
1230-
published on the `zarr-specs documentation Web site
1231-
<https://zarr-specs.readthedocs.io/>`_. For ease of discovery, it is
1232-
recommended that codec specifications are contributed to the
1233-
zarr-specs GitHub repository. However, codec specifications may be
1234-
maintained by any group or organisation and published in any location
1235-
on the Web. For further details of the process for contributing a
1236-
codec specification to the zarr-specs GitHub repository, see
1237-
`ZEP 0 <https://zarr.dev/zeps/active/ZEP0000.html>`_ which describes
1238-
the process for Zarr specification changes.
1239-
1240-
Further details of how codecs are configured for an array are given in the `Array metadata`_ section.
1242+
Further details of how codecs are configured for an array are given in the
1243+
`Array metadata`_ section.
12411244

12421245
Stores
12431246
======

0 commit comments

Comments
 (0)