Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ZEP 9 (extension naming) draft #65

Merged
merged 10 commits into from
Feb 18, 2025

Conversation

joshmoore
Copy link
Member

@joshmoore joshmoore commented Feb 12, 2025

This ZEP drafted with with @normanrz and reviewed by the rest of the @zarr-developers/steering-council attempts to unblock lingering spec-related issues like:

TODOs:


Please see https://zarr.dev/zeps/draft/ZEP0009.html 🎉 Comments welcome as issues or on Zulip.

Comment on lines +114 to +115
🛠️ We propose defining two categories of names for immediate use by extensions:
raw names and URI-based.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this would be a good place to add an explanation for why exactly we want to use URIs instead of some other kind of prefixing scheme. I understand that URIs are mentioned in the spec, but the spec doesn't provide any reason for their use.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The aspect of URLs that I like is that it delegates the name registration problem to DNS. But I also am unclear on the advantages of using fake https URLs compared to something slightly less verbose like <domain>/<suffix> which less strongly implies a real resource. Someone is surely going to try to fetch the documents, find them missing, and think that the URLs are just stale. Then also there is the question of using http or https --- or are other schemes like ftp, etc. allowed?

Aside from that, the added https:// part just adds extra verbosity. Tensorstore relies on just the json representation itself for specifying certain metadata, and making it more verbose just makes it harder to read and write.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reading the proposal a bit more, I see that the URLs are recommended to resolve to some description of the extension, that is just not a requirement. I was thrown off a bit by the later examples showing ttps://zarr.dev/array/data_type which didn't seem like a plausible actual URL, since for one thing it does not specify zarr v3 at all, and also having a separate document for each field in the zarr v3 metadata was also rather different from the current documentation.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this would be a good place to add an explanation for why exactly we want to use URIs

Thanks, will do.

I see that the URLs are recommended to resolve to some description of the extension, that is just not a requirement

Is this generally a positive? A request that it's a requirement?

I was thrown off a bit by the later examples showing ttps://zarr.dev/array/data_type which didn't seem like a plausible actual URL

Sorry, perhaps chosen too quickly. I'll review the example for plausibility.

@rabernat
Copy link
Contributor

Josh thanks so much for this important ZEP which addresses some critical issues around V3. 🙏

@jbms
Copy link

jbms commented Feb 13, 2025

Regarding "raw" name registration:

Can you clarify a bit more how you are proposing this to work?

  • Is the spec going to get reviewed, or will it just be a cursory inspection?
  • If I register a raw name, does that mean I am registering a fixed version of a specification for that name, and any further revisions will require another PR, or am I getting delegated authority over that name, and can evolve it as I see fit without any further involvement of the zarr organization?

I think it would be better to leave delegation to the URL-based names, or at least names that are clearly prefixed by the delegate name, in order to make the nature of the name clearer.

@jbms
Copy link

jbms commented Feb 13, 2025

Regarding "@context": my expectation is that the nature of the zarr metadata is such that each name is typically only specified once per a given array metadata, and furthermore other than the standard names in the zarr specification itself, a given URL prefix is also unlikely to be used more than once.

Consequently, I'm concerned that adding an additional "@context" mechanism (similar to xmlns) would not really help with verbosity, but would make it more complicated for computers to parse, and harder for humans to read the format easily, since they would now need to keep track of this additional name indirection mechanism.

@joshmoore
Copy link
Member Author

Can you clarify a bit more how you are proposing this to work?

In general, I would say we're trying to define how things get technically added more than the decision making but a few point from my perspetive:

  • Is the spec going to get reviewed, or will it just be a cursory inspection?

I'd probably tend to less, say, schema reviewing and more an evaluation of whether or not the name can be safely given out. Will it lead to confusion, name squatting, etc. But open for discussion and perhaps a matter for additional governance document.

  • If I register a raw name, does that mean I am registering a fixed version of a specification for that name, and any further revisions will require another PR, or am I getting delegated authority over that name, and can evolve it as I see fit without any further involvement of the zarr organization?

I think that depends on which versioning scheme is chosen by the implementation. If versioning is "within extension" then it's just one PR. If it's "versioning by name", then it would be multiple, but that would also put the burden on the reviewers to be comfortable with accepting the multiple names.

Regarding "@context": my expectation is that the nature of the zarr metadata is such that each name is typically only specified once per a given array metadata, and furthermore other than the standard names in the zarr specification itself, a given URL prefix is also unlikely to be used more than once.

Agreed.

Consequently, I'm concerned that adding an additional "@context" mechanism (similar to xmlns) would not really help with verbosity, but would make it more complicated for computers to parse, and harder for humans to read the format easily, since they would now need to keep track of this additional name indirection mechanism.

Phase 3 definitely needs multiple proposals with weighted pros & cons after phase 1 and phase 2 are complete. I think it's useful though to take a full specification that doesn't need designing and see which modifications (if any) are needed to make it useful. For example, is a single flag in the metadata which states which version of the context one is currently using sufficient?

  "zarr_format": 3,
  "@context": "v3.1", // out of spec for JSON-LD

This is a bit like RDFas "initial contexts":

Were this elevated to a zarr "extension point" this could then also take a URI (at the risk of verbosity).

P.S. apologies to @context. I suggest we write @context from here on.

@joshmoore joshmoore marked this pull request as ready for review February 14, 2025 14:16
@joshmoore
Copy link
Member Author

joshmoore commented Feb 14, 2025

Pushed the minor clarifications. I would work towards merging this as a draft ZEP. Questions and comments would continue to be welcome in issues, PRs, Zulip, or most other places.

The bulk of feedback on phase 1, however, is likely better placed on the PR with spec changes in zarr-developers/zarr-specs#330.

Once those clarifications have been released (e.g., tagged as 3.1) then we can return to the conversation about phase 2 in this ZEP for a final decision.

Timeline:

  • few days: major clarifications on this PR
  • few weeks: comments and improvements on 330 (phase 1)
  • following that, we will follow the ZEP for the timeline of phase 2
  • A decision on whether or not phase 3 is needed or desired will follow.

Copy link
Contributor

@rabernat rabernat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree we should merge this ASAP. According to the ZEP process, the feedback period starts once the draft is published. Let's use the spec PR to discuss and give further feedback.

@normanrz
Copy link
Member

Regarding "raw" name registration:

Can you clarify a bit more how you are proposing this to work?

* Is the spec going to get reviewed, or will it just be a cursory inspection?

* If I register a raw name, does that mean I am registering a fixed version of a specification for that name, and any further revisions will require another PR, or am I getting delegated authority over that name, and can evolve it as I see fit without any further involvement of the zarr organization?

I added a section to the ZEP about the registration process that we envision for the raw names in 3538de5. We hope to keep the process very lightweight. The review is only supposed to avoid confusing names and prevent malicious activities. It is not intended to review the contents of the specification to design decisions. If changes to an extension specification go into the zarr-extensions repo, which I would encourage, there needs to be another review for updates as well.

@joshmoore
Copy link
Member Author

All the (initial) TODOs have been handled from my side. Follow on from @rabernat's comment, I'd be for getting this in as a "draft ZEP" knowing that a) we can still modify it and b) feedback can be taken via zarr-developers/zarr-specs#330

cc: @zarr-developers/steering-council @zarr-developers/implementation-council @zarr-developers/python-core-devs

@normanrz normanrz merged commit a644e70 into zarr-developers:main Feb 18, 2025
1 check passed
@joshmoore joshmoore deleted the zep9-extension-naming branch February 19, 2025 08:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants