CIP-88: Ceramic namespace in JSON schemas
Author | Paul Le Cam |
---|---|
Status | Withdrawn |
Category | RFC |
Created | 2021-03-01 |
Table of Contents
Simple Summary
Define a standard extension point for Ceramic-specific metadata in a JSON schema.
Abstract
This CIP defines a reserved namespace for Ceramic-specific metadata in a JSON schema, along with a reference table for standard uses of this namespace.
Motivation
As commented in https://github.com/ceramicnetwork/CIP/issues/82#issuecomment-787449788 the $id
cannot be used to define Ceramic-specific extensions as intended in CIP-82.
A previous version of this CIP relied on creating a custom namespace for Ceramic-specific metadata using the non-standard $ceramic
key, but it was not compatible with the “strict mode” of the JSON validation library used in Ceramic (AJV).
Instead, this CIP relies on the $comment
field that is supported by AJV’s strict mode.
Specification
Namespace
A JSON schema property can contain a $comment
field, that must be a string starting with cip88:
:
{
type: 'string',
maxLength: 150,
$comment: 'ceramic:ref:<schema streamID or commitID>',
}
Reference table
Type | CIP | Status |
---|---|---|
ref |
StreamID json-schema definition | Draft |
appendCollection |
AppendCollection schemas | Draft |
collectionSlice |
AppendCollection schemas | Draft |
Rationale
Using the $comment
property allows to add a metadata string to a schema in a spec-compliant way (compatible with AJV’s strict mode).
The string value must match the following pattern: cip88:<type>[type-specific string]
.
A unique type
, possibly followed by an additional type-specific string, should make it easy to add custom extensions and build tools based on having the $comment
value start with cip88:
.
Finally, providing a reference table in this CIP should allow for easy discovery and avoid conflicts between extensions.
Backwards Compatibility
CIP-82 and CIP-85 are updated to this new format.
Implementation
None yet.
Security Considerations
None I’m aware of.
Copyright
Copyright and related rights waived via CC0.
Citation
Please cite this document as:
Paul Le Cam, "CIP-88: Ceramic namespace in JSON schemas," Ceramic Improvement Proposals, no. 88, March 2021. [Online serial]. Available: https://github.com/ceramicnetwork/CIPs/blob/main/CIPs/cip-88.md