Preserves: an Expressive Data Language
This repository contains a definition and various implementations of Preserves, a new data model, with associated serialization formats, in many ways comparable to JSON, XML, S-expressions, CBOR, ASN.1 BER, and so on.
Preserves data model and serialization formats
Preserves is defined in terms of a syntax-neutral data model and semantics which all transfer syntaxes share. This allows trivial, completely automatic, perfect-fidelity conversion between syntaxes.
- Preserves specification:
- Preserves tutorial
- Canonical Form for Binary Syntax
- Syrup, a hybrid binary/human-readable syntax for the Preserves data model
Preserves schema and queries
Implementations of the data model, plus the textual and/or binary transfer syntaxes:
- Preserves for Nim
- Preserves for Python (
pip install preserves; documentation available online)
- Preserves for Racket (
raco pkg install preserves)
- Preserves for Rust (crates.io package)
- Preserves for Squeak Smalltalk (
Installer ss project: 'Preserves'; install: 'Preserves')
yarn add @preserves/core)
Implementations of the data model, plus Syrup transfer syntax:
- preserves-tool, generic syntax translation and pretty-printing
Preserves Schema documents and codegen
- Cheat sheet(s) for Preserves syntax
- Some conventions for common data types
- Open questions; see also the issues list
- Why not Just Use JSON?
Tony Garnock-Jones email@example.com
The contents of this repository are made available to you under the Apache License, version 2.0 (http://www.apache.org/licenses/LICENSE-2.0), and are Copyright 2018-2022 Tony Garnock-Jones.