Skip to content
Edward Slavich edited this page Jul 7, 2020 · 4 revisions

2.0.0

Indivdiual changes are being proposed and discussed as GitHub issues. New ideas are welcome and appreciated!

1.6.0

Click here to see a list of issues milestoned for 1.6.0.

Summary

This release has two themes:

  • Tag cleanup. Remove optional tags from the standard as well as tags related to abandoned experimental features. Clarify the standard by removing or reclassifying all currently optional tags.

  • Reconcile with the Python reference implementation. The reference implementation has behaviors and limitations that are not spelled out in the standard, so we'd like to clarify the standard where necessary.

These changes were originally planned for version 2.0.0 but the broadening scope of that release has motivated us to plan an additional 1.x release, so that we can move the transform tags to a new repository sooner.

Changes

Remove transform/* tags

The transform tags have been an optional extension to the core standard that supports serialization of data transforms. They've been under rapid development and have necessitated several releases of the ASDF Standard.

In order to help stabilize the standard, and make development of the transforms more convenient, we intend to move the transform tags to a separate repository and version their extension independently.

Remove fits/fits tag

The fits-1.0.0 tag enables serialization of a FITS file inside of an ASDF file. This is another optional extension and will be moved to an independent repository.

Remove core/subclass_metadata tag

This is an experimental feature that sought to make serialization of subclasses more convenient by reusing the superclass's schema, with some additional metadata appended to inform the library of which subclass to instantiate. This feature has some drawbacks. For one, the name of a class or subclass is an implementation detail that is probably not meaningful to other ASDF implementations. Another drawback is that by using a generic schema for multiple subclasses, we are not able to validate as strictly as we could with separate schemas – for example, if subclass A requires property "foo", but subclass B does not, we can't make the property required because both objects must validate against the superclass's schema. This tag will be removed from the standard.

Remove core/constant tag

The schema for the constant-1.0.0 tag contains the following description:

Used as a utility to indicate that value is a literal constant.

It's unclear what use cases this tag was intended to satisfy. The reference implementation supports deserialization of the tag's object but we're not aware of any ASDF files that make use of it.

Remove unit/defunit tag

Support for the defunit-1.0.0 tag was never implemented in either of the asdf or astropy Python packages.

Reclassify remaining unit tags as required

Support for units and quantities is essential for a scientific data format, so rather than pull these tags out into an independent extension, we intend to make support for unit-1.0.0 and quantity-1.1.0 required.

Reclassify time tag as required

Support for times is similarly essential (though the current time-1.1.0 tag includes features that may only be of interest to astronomers). This tag will become required in ASDF Standard 1.6.0, but will likely see some modification in 2.0.0.

Clarify support for complex YAML keys

YAML 1.1 allows complex map keys such as lists and maps, but this is not supported by the reference implementation -- Python does not support mutable objects as dict keys, so an ASDF file containing such a key will fail on read.

Clarify expectations regarding default values in schemas

Our schema format includes a default property but the standard is vague on how that property is to be used. The current behavior of the reference implementation is to remove default values from the ASDF tree before writing the file.

Clarify behavior around null values in YAML

The standard gives no indication that null values are disallowed in ASDF files, but the reference implementation removes map entries with null values before writing the file.

Clarify requirements of tag URI format

The YAML 1.1 spec recommends but does not require that the tag URI follow the tag: URI scheme. The reference implementation, on the other hand, requires tag:.

Clarify mapping of tag URIs to schema URIs

The standard is vague on how tag URIs should be mapped to schema URIs. This information is captured in the tag property of the object's schema, but that property is actually a validation directive and using it as an annotation in this way has undesirable side effects (and isn't documented in the standard).