Copyright © 2020-2024 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
CBOR is a compact binary data serialization and messaging format. This specification defines CBOR-LD 1.0, a CBOR-based format to serialize Linked Data. The encoding is designed to leverage the existing JSON-LD ecosystem, which is deployed on hundreds of millions of systems today, to provide a compact serialization format for those seeking efficient encoding schemes for Linked Data. By utilizing semantic compression schemes, compression ratios in excess of 60% better than generalized compression schemes are possible. This format is primarily intended to be a way to use Linked Data in storage and bandwidth constrained programming environments, to build interoperable semantic wire-level protocols, and to efficiently store Linked Data in CBOR-based storage engines.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at https://www.w3.org/TR/.
This document is experimental.
There is a reference implementation that is capable of demonstrating the features described in this document.
This document was published by the JSON-LD Community Group as an Editor's Draft.
GitHub Issues are preferred for discussion of this specification. Alternatively, you can send comments to our mailing list. Please send them to public-linked-json@w3.org (archives).
Publication as an Editor's Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
This document was produced by a group operating under the W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
This document is governed by the 1 March 2019 W3C Process Document.
This section is non-normative.
CBOR is a compact binary data serialization and messaging format. This specification defines CBOR-LD 1.0, a CBOR-based format to serialize Linked Data. The encoding is designed to leverage the existing JSON-LD ecosystem, which is deployed on hundreds of millions of systems today, to provide a compact serialization format for those seeking efficient encoding schemes for Linked Data. By utilizing semantic compression schemes, compression ratios in excess of 60% better than generalized compression schemes are possible. This format is primarily intended to be a way to use Linked Data in storage and bandwidth constrained programming environments, to build interoperable semantic wire-level protocols, and to efficiently store Linked Data in CBOR-based storage engines.
This section is non-normative.
This document is a detailed specification for a serialization of Linked Data in CBOR. The document is primarily intended for the following audiences:
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
The key word MUST in this document is to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
This section is non-normative.
There are a number of ways that one may participate in the development of this specification:
This section is non-normative.
CBOR-LD satisfies the following design goals:
Similarly, the following are non-goals.
The following minefields have been identified while working on this specification:
This section is non-normative.
The general CBOR-LD encoding algorithm takes a JSON-LD Document and does the following:
"@type":
"@id"
, replace the value with the byte value associated with the term.
"@type": "@id"
, replace the value with the byte value associated with the
term.
This algorithm takes a JSON-LD object jsonldDocument
and options
as
input.
result
be an empty CBOR-encoded byte array.contextUrls
to the return value of the "Get Context URLs Algorithm"
passing jsonldDocument as input.
result
to the
return value of the "Generate Uncompressed CBOR-LD Algorithm".
result
to the return value of the "Generate Compressed CBOR-LD
Algorithm" passing contextUrls
as options.contextUrls
.
result
.
This algorithm takes a JSON-LD object jsonldDocument
and options
as
input.
result
be an empty CBOR-encoded byte array.
This algorithm takes a JSON-LD object jsonldDocument
and options
as input.
The options
MUST contain:
applicationContextMap
applicationTermMap
result
be an empty CBOR-encoded byte array.
result
to 0xd90501 (CBOR Tag - 0xd9,
CBOR-LD - 0x05, Compressed - CBOR-LD compression algorithm version 1 - 0x01,
Tag 1281)).
termCodecMap
to the result of the § 3.4 Get Term Codec Map Algorithm, passing contextUrls
as
input.
result
by recursively processing every name-value pair in
jsonldDocument
termHint
be the value associated with the JSON name in the
termCodecMap
.
termHint.value
value.termHint.valueCompressor
function.
result
.
This algorithm takes a list of URL strings contextUrls
and returns a CBOR-LD
term codec map that maps JSON-LD terms to their associated byte values
and value compression functions.
result
be an ordered map.contextUrls
, dereference the JSON-LD contexts and process
every entry.
value
with an undefined value.
compressor
be a known global compressor function associated with the
@type
property, a known local compressor function that was provided to this
function, or the generic CBOR compressor function, which returns the bytes
associated with a typical CBOR compression of the given datatype.
sortedTerms
be the value of sorting all of the keys in result
.
sortedTerms
set the associated
termHint.value
value to the associated index of sortedTerms
.
result
.result
be a ordered map.@context
result
where the key in the map
is set to the JSON value associated with @id
.
result
.The following is a registry of well-known term codecs. These will be registered on a first-come first-serve basis.
Value | Context URL | Context Name |
---|---|---|
0x00 - 0x0F |
RESERVED |
Reserved for future use. |
0x10 |
https://www.w3.org/ns/activitystreams |
ActivityStreams 2.0 |
0x11 |
https://www.w3.org/2018/credentials/v1 |
Verifiable Credentials Data Model v1 |
0x12 |
https://www.w3.org/ns/did/v1 |
Decentralized Identifiers (DID) Core Spec v1 |
0x13 |
https://w3id.org/security/suites/ed25519-2018/v1 |
Ed25519Signature2018 Suite |
0x14 |
https://w3id.org/security/suites/ed25519-2020/v1 |
Ed25519Signature2020 Suite |
0x15 |
https://w3id.org/cit/v1 |
Concealed Id Token |
0x16 |
https://w3id.org/age/v1 |
Age Verification |
0x17 |
https://w3id.org/security/suites/x25519-2020/v1 |
X25519KeyAgreementKey2020 Suite |
0x18 |
https://w3id.org/veres-one/v1 |
Veres One DID Method |
0x19 |
https://w3id.org/webkms/v1 |
WebKMS (Key Management System) |
0x1A |
https://w3id.org/zcap/v1 |
Authorization Capabilities (zCap) |
0x1B |
https://w3id.org/security/suites/hmac-2019/v1 |
Sha256HmacKey2019 Crypto Suite |
0x1C |
https://w3id.org/security/suites/aes-2019/v1 |
AesKeyWrappingKey2019 Crypto Suite |
0x1D |
https://w3id.org/vaccination/v1 |
Vaccination Certificate Vocabulary v0.1 |
0x1E |
https://w3id.org/vc-revocation-list-2020/v1 |
Verifiable Credentials Revocation List 2020 |
0x1F |
https://w3id.org/dcc/v1 |
DCC (Decentralized Credentials Consortium) Core Context |
0x20 |
https://w3id.org/vc/status-list/v1 |
Verifiable Credentials Status List |
0x21 - 0x2F |
Available for use. | |
0x30 |
https://w3id.org/security/data-integrity/v1 |
Data Integrity v1.0 |
0x31 |
https://w3id.org/security/multikey/v1 |
Multikey v1.0 |
0x32 |
https://purl.imsglobal.org/spec/ob/v3p0/context.json | OpenBadges v3.0.0 |
0x33 |
https://w3id.org/security/data-integrity/v2 |
Data Integrity v2.0 |
0x34 |
ecdsa-rdfc-2019 |
Data Integrity ECDSA RDFC 2019 cryptosuite identifier |
0x35 |
ecdsa-sd-2023 |
Data Integrity ECDSA-SD 2023 cryptosuite identifier |
0x36 |
eddsa-rdfc-2022 |
Data Integrity EDDSA RDFC 2022 cryptosuite identifier |