Formats

JSON-LD

JavaScript Object Notation for Linked Data

Introduction

JSON-LD, or JSON for Linked Data, is a lightweight data interchange format designed to express linked data in a format that is both human-readable and machine-friendly. It extends JSON by providing a standard way to embed linked data within JSON documents, allowing for a network of standards-based, machine-readable, structured data on the web.

Stencila provides support for JSON-LD for storing and transferring documents in a format with high interoperability.

Usage

Use the .jsonld file extension, or the --to jsonld or --from jsonld options, when converting to/from JSON-LD e.g.

stencila convert doc.smd doc.jsonld

By default, the encoded JSON-LD is indented. The --compact option can be used to produce un-indented, single line JSON-LD.

Implementation

Stencila Schema is based on schema.org and has a JSON-LD @context published at https://stencila.org/context.jsonld. When Stencila documents are exported as JSON, this context is applied. As such, the JSON documents that Stencila produces are inherently JSON-LD documents.

For example, an Article is exported like so:

{
  "$schema": "https://stencila.org/Article.schema.json",
  "@context": "https://stencila.org/context.jsonld",
  "type": "Article",
  "content": [
    {
      "type": "Paragraph",
      "content": [
        {
          "type": "Text",

However, because the the schema.org is the most widely used vocabulary for JSON-LD, the JsonLdCodec translates terms in the Stencila context, to those in the schema.org context, and uses schema.org as the default vocabulary, with the Stencila context as an extension. This saves consumers of the JSON-LD from having to do this translation themselves.

In addition, when exporting to JSON-LD, the @type and @id keywords are used instead of type and id.

For example, the above article as exported to JSON-LD as follows. Note that because the types Article and Text are part of schema.org, there is no need to prefix their name. However because schema.org does not have a Paragraph type or a content property, it is necessary to prefix those with stencila:.

{
  "@context": {
    "@vocab": "https://schema.org/",
    "stencila": "https://stencila.org/"
  },
  "@type": "Article",
  "stencila:content": [
    {
      "@type": "stencila:Paragraph",
      "stencila:content": [
        {
          "@type": "Text",

Support

Stencila supports these operations for JSON-LD:

  • decoding from a file
  • decoding from a string
  • encoding to a file
  • encoding to a string

Support and degree of loss by node type:

Node type Encoding Decoding Notes
Works
Article 🟢 No loss 🟢 No loss
AudioObject 🟢 No loss 🟢 No loss
AuthorRole 🟢 No loss 🟢 No loss
Chat 🟢 No loss 🟢 No loss
ChatMessage 🟢 No loss 🟢 No loss
ChatMessageGroup 🟢 No loss 🟢 No loss
Claim 🟢 No loss 🟢 No loss
Collection 🟢 No loss 🟢 No loss
Comment 🟢 No loss 🟢 No loss
CreativeWork 🟢 No loss 🟢 No loss
Directory 🟢 No loss 🟢 No loss
Figure 🟢 No loss 🟢 No loss
File 🟢 No loss 🟢 No loss
ImageObject 🟢 No loss 🟢 No loss
MediaObject 🟢 No loss 🟢 No loss
Periodical 🟢 No loss 🟢 No loss
Prompt 🟢 No loss 🟢 No loss
PublicationIssue 🟢 No loss 🟢 No loss
PublicationVolume 🟢 No loss 🟢 No loss
Review 🟢 No loss 🟢 No loss
SoftwareApplication 🟢 No loss 🟢 No loss
SoftwareSourceCode 🟢 No loss 🟢 No loss
Table 🟢 No loss 🟢 No loss
TableCell 🟢 No loss 🟢 No loss
TableRow 🟢 No loss 🟢 No loss
VideoObject 🟢 No loss 🟢 No loss
Prose
Admonition 🟢 No loss 🟢 No loss
Annotation 🟢 No loss 🟢 No loss
Cite 🟢 No loss 🟢 No loss
CiteGroup 🟢 No loss 🟢 No loss
DefinedTerm 🟢 No loss 🟢 No loss
Emphasis 🟢 No loss 🟢 No loss
Heading 🟢 No loss 🟢 No loss
Link 🟢 No loss 🟢 No loss
List 🟢 No loss 🟢 No loss
ListItem 🟢 No loss 🟢 No loss
Note 🟢 No loss 🟢 No loss
Paragraph 🟢 No loss 🟢 No loss
QuoteBlock 🟢 No loss 🟢 No loss
QuoteInline 🟢 No loss 🟢 No loss
Section 🟢 No loss 🟢 No loss
Strikeout 🟢 No loss 🟢 No loss
Strong 🟢 No loss 🟢 No loss
Subscript 🟢 No loss 🟢 No loss
Superscript 🟢 No loss 🟢 No loss
Text 🟢 No loss 🟢 No loss
ThematicBreak 🟢 No loss 🟢 No loss
Underline 🟢 No loss 🟢 No loss
Math
MathBlock 🟢 No loss 🟢 No loss
MathInline 🟢 No loss 🟢 No loss
Code
CodeBlock 🟢 No loss 🟢 No loss
CodeChunk 🟢 No loss 🟢 No loss
CodeExpression 🟢 No loss 🟢 No loss
CodeInline 🟢 No loss 🟢 No loss
CompilationMessage 🟢 No loss 🟢 No loss
ExecutionMessage 🟢 No loss 🟢 No loss
Data
Array 🟢 No loss 🟢 No loss
ArrayHint 🟢 No loss 🟢 No loss
ArrayValidator 🟢 No loss 🟢 No loss
Boolean 🟢 No loss 🟢 No loss
BooleanValidator 🟢 No loss 🟢 No loss
ConstantValidator 🟢 No loss 🟢 No loss
Cord 🟢 No loss 🟢 No loss
Datatable 🟢 No loss 🟢 No loss
DatatableColumn 🟢 No loss 🟢 No loss
DatatableColumnHint 🟢 No loss 🟢 No loss
DatatableHint 🟢 No loss 🟢 No loss
Date 🟢 No loss 🟢 No loss
DateTime 🟢 No loss 🟢 No loss
DateTimeValidator 🟢 No loss 🟢 No loss
DateValidator 🟢 No loss 🟢 No loss
Duration 🟢 No loss 🟢 No loss
DurationValidator 🟢 No loss 🟢 No loss
EnumValidator 🟢 No loss 🟢 No loss
Integer 🟢 No loss 🟢 No loss
IntegerValidator 🟢 No loss 🟢 No loss
Null 🟢 No loss 🟢 No loss
Number 🟢 No loss 🟢 No loss
NumberValidator 🟢 No loss 🟢 No loss
Object 🟢 No loss 🟢 No loss
ObjectHint 🟢 No loss 🟢 No loss
String 🟢 No loss 🟢 No loss
StringHint 🟢 No loss 🟢 No loss
StringValidator 🟢 No loss 🟢 No loss
Time 🟢 No loss 🟢 No loss
TimeValidator 🟢 No loss 🟢 No loss
Timestamp 🟢 No loss 🟢 No loss
TimestampValidator 🟢 No loss 🟢 No loss
TupleValidator 🟢 No loss 🟢 No loss
Unknown 🟢 No loss 🟢 No loss
UnsignedInteger 🟢 No loss 🟢 No loss
Flow
Button 🟢 No loss 🟢 No loss
CallArgument 🟢 No loss 🟢 No loss
CallBlock 🟢 No loss 🟢 No loss
CodeLocation 🟢 No loss 🟢 No loss
CompilationDigest 🟢 No loss 🟢 No loss
ExecutionDependant 🟢 No loss 🟢 No loss
ExecutionDependency 🟢 No loss 🟢 No loss
ExecutionTag 🟢 No loss 🟢 No loss
ForBlock 🟢 No loss 🟢 No loss
Form 🟢 No loss 🟢 No loss
Function 🟢 No loss 🟢 No loss
IfBlock 🟢 No loss 🟢 No loss
IfBlockClause 🟢 No loss 🟢 No loss
IncludeBlock 🟢 No loss 🟢 No loss
Parameter 🟢 No loss 🟢 No loss
Variable 🟢 No loss 🟢 No loss
Walkthrough 🟢 No loss 🟢 No loss
WalkthroughStep 🟢 No loss 🟢 No loss
Style
StyledBlock 🟢 No loss 🟢 No loss
StyledInline 🟢 No loss 🟢 No loss
Edits
InstructionBlock 🟢 No loss 🟢 No loss
InstructionInline 🟢 No loss 🟢 No loss
InstructionMessage 🟢 No loss 🟢 No loss
PromptBlock 🟢 No loss 🟢 No loss
SuggestionBlock 🟢 No loss 🟢 No loss
SuggestionInline 🟢 No loss 🟢 No loss
Config
Config 🟢 No loss 🟢 No loss
Other
Brand 🟢 No loss 🟢 No loss
ContactPoint 🟢 No loss 🟢 No loss
Enumeration 🟢 No loss 🟢 No loss
Grant 🟢 No loss 🟢 No loss
ModelParameters 🟢 No loss 🟢 No loss
MonetaryGrant 🟢 No loss 🟢 No loss
Organization 🟢 No loss 🟢 No loss
Person 🟢 No loss 🟢 No loss
PostalAddress 🟢 No loss 🟢 No loss
Product 🟢 No loss 🟢 No loss
PropertyValue 🟢 No loss 🟢 No loss
ProvenanceCount 🟢 No loss 🟢 No loss
RawBlock 🟢 No loss 🟢 No loss
Thing 🟢 No loss 🟢 No loss

See the Rust crate codec-jsonld for more details.