@@ -295,7 +295,7 @@ The following figure illustrates the first part of the terminology:
295
295
296
296
*Codec *
297
297
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
299
299
representation of each chunk in the store _.
300
300
301
301
.. _metadata document :
@@ -632,12 +632,9 @@ mandatory names:
632
632
^^^^^^^^^^
633
633
634
634
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 >`).
641
638
642
639
The following members are optional:
643
640
@@ -1204,40 +1201,46 @@ the following procedure:
1204
1201
1205
1202
4. The chunk array ``A `` is equal to ``EC[0] ``.
1206
1203
1207
- Specifying codecs
1208
- -----------------
1204
+ .. _codec-specification :
1209
1205
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
1217
1233
(or cite documents that describe) the encoding and decoding algorithms
1218
1234
and the format of the encoded data.
1219
-
1220
1235
A codec may have configuration parameters which modify the behaviour
1221
1236
of the codec in some way. For example, a compression codec may have a
1222
1237
compression level parameter, which is an integer that affects the
1223
1238
resulting compression ratio of the data. Configuration parameters must
1224
1239
be declared in the codec specification, including a definition of how
1225
1240
configuration parameters are represented as JSON.
1226
1241
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.
1241
1244
1242
1245
Stores
1243
1246
======
0 commit comments