W3C The Semantic Web of Linked Data

The Semantic Web is a Web of Data — of dates and titles and part numbers and chemical properties and any other data one might conceive of. The collection of Semantic Web technologies (RDF, OWL, SKOS, SPARQL, etc.) provides an environment where application can query that data, draw inferences using vocabularies, etc.

However, to make the Web of Data a reality, it is important to have the huge amount of data on the Web available in a standard format, reachable and manageable by Semantic Web tools. Furthermore, not only does the Semantic Web need access to data, but relationships among data should be made available, too, to create a Web of Data (as opposed to a sheer collection of datasets). This collection of interrelated datasets on the Web can also be referred to as Linked Data.

To achieve and create Linked Data, technologies should be available for a common format (RDF), to make either conversion or on-the-fly access to existing databases (relational, XML, HTML, etc). It is also important to be able to setup query endpoints to access that data more conveniently. W3C provides a palette of technologies (RDF, GRDDL, POWDER, RDFa, the upcoming R2RML, RIF, SPARQL) to get access to the data.

MORE: Tim Berners-Lee’s note on Linked Data

Vocabularies: At times it may be important or valuable to organize data. Using OWL (to build vocabularies, or “ontologies”) and SKOS (for designing knowledge organization systems) it is possible to enrich data with additional meaning, which allows more people (and more machines) to do more with the data.


JSON-LD document

A JSON-LD document is a serialization of a collection of graphs and comprises exactly one default graph and zero or more named graphs.

A JSON-LD document is a representation of a directed graph. A single directed graph can have many different serializations, each expressing exactly the same information. Developers typically work with trees, represented as JSON objects. While mapping a graph to a tree can be done, the layout of the end result must be specified in advance. A Frame can be used by a developer on a JSON-LD document to specify a deterministic layout for a graph (See JSON-LD FRAMES below).

3. RDF Graphs

An RDF graph is a set of RDF triples.

3.1 Triples

An RDF triple consists of three components:

  • the subject, which is an IRI or a blank node
  • the predicate, which is an IRI
  • the object, which is an IRI, a literal or a blank node

An RDF triple is conventionally written in the order subject, predicate, object.

The set of nodes of an RDF graph is the set of subjects and objects of triples in the graph. It is possible for a predicate IRI to also occur as a node in the same graph.

IRIs, literals and blank nodes are collectively known as RDF terms.

IRIs, literals and blank nodes are distinct and distinguishable. For example, http://example.org/ as a string literal is neither equal to http://example.org/ as an IRI, nor to a blank node with the blank node identifier http://example.org/.

3.2 IRIs

An IRI (Internationalized Resource Identifier) within an RDF graph is a Unicode string [UNICODE] that conforms to the syntax defined in RFC 3987 [RFC3987].

IRIs in the RDF abstract syntax must be absolute, and may contain a fragment identifier.

IRI equality: Two IRIs are equal if and only if they are equivalent under Simple String Comparison according to section 5.1 of [RFC3987]. Further normalization must not be performed when comparing IRIs for equality.

More JSON-LD terminology

codemeta <- "../assets/example/jsonlite.json"

JSON-LD r list

json_ld.list <- read_json(codemeta) 
class(json_ld.list)
[1] "list"
list
json_ld.list
$`@context`
$`@context`[[1]]
[1] "https://doi.org/doi:10.5063/schema/codemeta-2.0"

$`@context`[[2]]
[1] "http://schema.org"


$`@type`
[1] "SoftwareSourceCode"

$identifier
[1] "jsonlite"

$description
[1] "A fast JSON parser and generator optimized for statistical data\n    and the web. Started out as a fork of 'RJSONIO', but has been completely\n    rewritten in recent versions. The package offers flexible, robust, high\n    performance tools for working with JSON in R and is particularly powerful\n    for building pipelines and interacting with a web API. The implementation is\n    based on the mapping described in the vignette (Ooms, 2014). In addition to\n    converting JSON data from/to R objects, 'jsonlite' contains functions to\n    stream, validate, and prettify JSON data. The unit tests included with the\n    package verify that all edge cases are encoded and decoded consistently for\n    use with dynamic data in systems and applications."

$name
[1] "jsonlite: A Robust, High Performance JSON Parser and Generator for R"

$issueTracker
[1] "http://github.com/jeroen/jsonlite/issues"

$datePublished
[1] "2017-06-01 12:03:37 UTC"

$license
[1] "https://spdx.org/licenses/MIT"

$version
[1] "1.5"

$programmingLanguage
$programmingLanguage$`@type`
[1] "ComputerLanguage"

$programmingLanguage$name
[1] "R"

$programmingLanguage$version
[1] "3.4.1"

$programmingLanguage$url
[1] "https://r-project.org"


$runtimePlatform
[1] "R version 3.4.1 (2017-06-30)"

$provider
$provider$`@id`
[1] "https://cran.r-project.org"

$provider$`@type`
[1] "Organization"

$provider$name
[1] "Central R Archive Network (CRAN)"

$provider$url
[1] "https://cran.r-project.org"


$author
$author[[1]]
$author[[1]]$`@type`
[1] "Person"

$author[[1]]$givenName
[1] "Jeroen"

$author[[1]]$familyName
[1] "Ooms"


$author[[2]]
$author[[2]]$`@type`
[1] "Person"

$author[[2]]$givenName
$author[[2]]$givenName[[1]]
[1] "Duncan"

$author[[2]]$givenName[[2]]
[1] "Temple"


$author[[2]]$familyName
[1] "Lang"


$author[[3]]
$author[[3]]$`@type`
[1] "Person"

$author[[3]]$givenName
[1] "Lloyd"

$author[[3]]$familyName
[1] "Hilaiel"



$maintainer
$maintainer$`@type`
[1] "Person"

$maintainer$givenName
[1] "Jeroen"

$maintainer$familyName
[1] "Ooms"

$maintainer$email
[1] "jeroen@berkeley.edu"


$softwareSuggestions
$softwareSuggestions[[1]]
$softwareSuggestions[[1]]$`@type`
[1] "SoftwareApplication"

$softwareSuggestions[[1]]$identifier
[1] "httr"

$softwareSuggestions[[1]]$name
[1] "httr"

$softwareSuggestions[[1]]$provider
$softwareSuggestions[[1]]$provider$`@id`
[1] "https://cran.r-project.org"

$softwareSuggestions[[1]]$provider$`@type`
[1] "Organization"

$softwareSuggestions[[1]]$provider$name
[1] "Central R Archive Network (CRAN)"

$softwareSuggestions[[1]]$provider$url
[1] "https://cran.r-project.org"



$softwareSuggestions[[2]]
$softwareSuggestions[[2]]$`@type`
[1] "SoftwareApplication"

$softwareSuggestions[[2]]$identifier
[1] "curl"

$softwareSuggestions[[2]]$name
[1] "curl"

$softwareSuggestions[[2]]$provider
$softwareSuggestions[[2]]$provider$`@id`
[1] "https://cran.r-project.org"

$softwareSuggestions[[2]]$provider$`@type`
[1] "Organization"

$softwareSuggestions[[2]]$provider$name
[1] "Central R Archive Network (CRAN)"

$softwareSuggestions[[2]]$provider$url
[1] "https://cran.r-project.org"



$softwareSuggestions[[3]]
$softwareSuggestions[[3]]$`@type`
[1] "SoftwareApplication"

$softwareSuggestions[[3]]$identifier
[1] "plyr"

$softwareSuggestions[[3]]$name
[1] "plyr"

$softwareSuggestions[[3]]$provider
$softwareSuggestions[[3]]$provider$`@id`
[1] "https://cran.r-project.org"

$softwareSuggestions[[3]]$provider$`@type`
[1] "Organization"

$softwareSuggestions[[3]]$provider$name
[1] "Central R Archive Network (CRAN)"

$softwareSuggestions[[3]]$provider$url
[1] "https://cran.r-project.org"



$softwareSuggestions[[4]]
$softwareSuggestions[[4]]$`@type`
[1] "SoftwareApplication"

$softwareSuggestions[[4]]$identifier
[1] "testthat"

$softwareSuggestions[[4]]$name
[1] "testthat"

$softwareSuggestions[[4]]$provider
$softwareSuggestions[[4]]$provider$`@id`
[1] "https://cran.r-project.org"

$softwareSuggestions[[4]]$provider$`@type`
[1] "Organization"

$softwareSuggestions[[4]]$provider$name
[1] "Central R Archive Network (CRAN)"

$softwareSuggestions[[4]]$provider$url
[1] "https://cran.r-project.org"



$softwareSuggestions[[5]]
$softwareSuggestions[[5]]$`@type`
[1] "SoftwareApplication"

$softwareSuggestions[[5]]$identifier
[1] "knitr"

$softwareSuggestions[[5]]$name
[1] "knitr"

$softwareSuggestions[[5]]$provider
$softwareSuggestions[[5]]$provider$`@id`
[1] "https://cran.r-project.org"

$softwareSuggestions[[5]]$provider$`@type`
[1] "Organization"

$softwareSuggestions[[5]]$provider$name
[1] "Central R Archive Network (CRAN)"

$softwareSuggestions[[5]]$provider$url
[1] "https://cran.r-project.org"



$softwareSuggestions[[6]]
$softwareSuggestions[[6]]$`@type`
[1] "SoftwareApplication"

$softwareSuggestions[[6]]$identifier
[1] "rmarkdown"

$softwareSuggestions[[6]]$name
[1] "rmarkdown"

$softwareSuggestions[[6]]$provider
$softwareSuggestions[[6]]$provider$`@id`
[1] "https://cran.r-project.org"

$softwareSuggestions[[6]]$provider$`@type`
[1] "Organization"

$softwareSuggestions[[6]]$provider$name
[1] "Central R Archive Network (CRAN)"

$softwareSuggestions[[6]]$provider$url
[1] "https://cran.r-project.org"



$softwareSuggestions[[7]]
$softwareSuggestions[[7]]$`@type`
[1] "SoftwareApplication"

$softwareSuggestions[[7]]$identifier
[1] "R.rsp"

$softwareSuggestions[[7]]$name
[1] "R.rsp"

$softwareSuggestions[[7]]$provider
$softwareSuggestions[[7]]$provider$`@id`
[1] "https://cran.r-project.org"

$softwareSuggestions[[7]]$provider$`@type`
[1] "Organization"

$softwareSuggestions[[7]]$provider$name
[1] "Central R Archive Network (CRAN)"

$softwareSuggestions[[7]]$provider$url
[1] "https://cran.r-project.org"



$softwareSuggestions[[8]]
$softwareSuggestions[[8]]$`@type`
[1] "SoftwareApplication"

$softwareSuggestions[[8]]$identifier
[1] "sp"

$softwareSuggestions[[8]]$name
[1] "sp"

$softwareSuggestions[[8]]$provider
$softwareSuggestions[[8]]$provider$`@id`
[1] "https://cran.r-project.org"

$softwareSuggestions[[8]]$provider$`@type`
[1] "Organization"

$softwareSuggestions[[8]]$provider$name
[1] "Central R Archive Network (CRAN)"

$softwareSuggestions[[8]]$provider$url
[1] "https://cran.r-project.org"




$softwareRequirements
$softwareRequirements[[1]]
$softwareRequirements[[1]]$`@type`
[1] "SoftwareApplication"

$softwareRequirements[[1]]$identifier
[1] "methods"

$softwareRequirements[[1]]$name
[1] "methods"



$citation
$citation[[1]]
$citation[[1]]$`@type`
[1] "ScholarlyArticle"

$citation[[1]]$datePublished
[1] "2014"

$citation[[1]]$author
$citation[[1]]$author[[1]]
$citation[[1]]$author[[1]]$`@type`
[1] "Person"

$citation[[1]]$author[[1]]$givenName
[1] "Jeroen"

$citation[[1]]$author[[1]]$familyName
[1] "Ooms"



$citation[[1]]$name
[1] "The jsonlite Package: A Practical and Consistent Mapping Between JSON Data and R Objects"

$citation[[1]]$url
[1] "https://arxiv.org/abs/1403.2805"

$citation[[1]]$isPartOf
$citation[[1]]$isPartOf$`@type`
[1] "PublicationIssue"

$citation[[1]]$isPartOf$datePublished
[1] "2014"

$citation[[1]]$isPartOf$isPartOf
$citation[[1]]$isPartOf$isPartOf$`@type`
$citation[[1]]$isPartOf$isPartOf$`@type`[[1]]
[1] "PublicationVolume"

$citation[[1]]$isPartOf$isPartOf$`@type`[[2]]
[1] "Periodical"


$citation[[1]]$isPartOf$isPartOf$name
[1] "arXiv:1403.2805 [stat.CO]"
https://doi.org/doi:10.5063/schema/codemeta-2.0
http://schema.org
SoftwareSourceCode
jsonlite
A fast JSON parser and generator optimized for statistical data
    and the web. Started out as a fork of 'RJSONIO', but has been completely
    rewritten in recent versions. The package offers flexible, robust, high
    performance tools for working with JSON in R and is particularly powerful
    for building pipelines and interacting with a web API. The implementation is
    based on the mapping described in the vignette (Ooms, 2014). In addition to
    converting JSON data from/to R objects, 'jsonlite' contains functions to
    stream, validate, and prettify JSON data. The unit tests included with the
    package verify that all edge cases are encoded and decoded consistently for
    use with dynamic data in systems and applications.
jsonlite: A Robust, High Performance JSON Parser and Generator for R
http://github.com/jeroen/jsonlite/issues
2017-06-01 12:03:37 UTC
https://spdx.org/licenses/MIT
1.5
ComputerLanguage
R
3.4.1
https://r-project.org
R version 3.4.1 (2017-06-30)
https://cran.r-project.org
Organization
Central R Archive Network (CRAN)
https://cran.r-project.org
Person
Jeroen
Ooms
Person
Duncan
Temple
Lang
Person
Lloyd
Hilaiel
Person
Jeroen
Ooms
jeroen@berkeley.edu
SoftwareApplication
httr
httr
https://cran.r-project.org
Organization
Central R Archive Network (CRAN)
https://cran.r-project.org
SoftwareApplication
curl
curl
https://cran.r-project.org
Organization
Central R Archive Network (CRAN)
https://cran.r-project.org
SoftwareApplication
plyr
plyr
https://cran.r-project.org
Organization
Central R Archive Network (CRAN)
https://cran.r-project.org
SoftwareApplication
testthat
testthat
https://cran.r-project.org
Organization
Central R Archive Network (CRAN)
https://cran.r-project.org
SoftwareApplication
knitr
knitr
https://cran.r-project.org
Organization
Central R Archive Network (CRAN)
https://cran.r-project.org
SoftwareApplication
rmarkdown
rmarkdown
https://cran.r-project.org
Organization
Central R Archive Network (CRAN)
https://cran.r-project.org
SoftwareApplication
R.rsp
R.rsp
https://cran.r-project.org
Organization
Central R Archive Network (CRAN)
https://cran.r-project.org
SoftwareApplication
sp
sp
https://cran.r-project.org
Organization
Central R Archive Network (CRAN)
https://cran.r-project.org
SoftwareApplication
methods
methods
ScholarlyArticle
2014
Person
Jeroen
Ooms
The jsonlite Package: A Practical and Consistent Mapping Between JSON Data and R Objects
https://arxiv.org/abs/1403.2805
PublicationIssue
2014
PublicationVolume
Periodical
arXiv:1403.2805 [stat.CO]

Huh? Something in funny in how JSON-LD r list is displayed when used with rmarkdwon::render. Looks like it’s been duplicated in a different format?.


Getting the context:
  • from a JSON-LD r list, returned as a list:
context <- read_json(codemeta)$`@context`
context
[[1]]
[1] "https://doi.org/doi:10.5063/schema/codemeta-2.0"

[[2]]
[1] "http://schema.org"
https://doi.org/doi:10.5063/schema/codemeta-2.0
http://schema.org
class(context)
[1] "list"
list
  • from a JSON-LD, returned as JSON:
context <- jsonlite::toJSON(list(`@context` = context), 
                            auto_unbox = TRUE)
context
{"@context":["https://doi.org/doi:10.5063/schema/codemeta-2.0","http://schema.org"]} 
class(context)
[1] "json"
json



JSON-LD

Working with JSON-LD in R using jsonld package.

  • expand and contract -> needs a context of class json (see above).
context
{"@context":["https://doi.org/doi:10.5063/schema/codemeta-2.0","http://schema.org"]} 


Contracted JSON-LD
jsonld::jsonld_expand(codemeta) %>% jsonld::jsonld_compact(context)
{
  "@context": [
    "https://doi.org/doi:10.5063/schema/codemeta-2.0",
    "http://schema.org"
  ],
  "type": "SoftwareSourceCode",
  "author": [
    {
      "type": "Person",
      "familyName": "Ooms",
      "givenName": "Jeroen"
    },
    {
      "type": "Person",
      "familyName": "Lang",
      "givenName": [
        "Duncan",
        "Temple"
      ]
    },
    {
      "type": "Person",
      "familyName": "Hilaiel",
      "givenName": "Lloyd"
    }
  ],
  "citation": {
    "type": "ScholarlyArticle",
    "author": {
      "type": "Person",
      "familyName": "Ooms",
      "givenName": "Jeroen"
    },
    "datePublished": "2014",
    "isPartOf": {
      "type": "PublicationIssue",
      "datePublished": "2014",
      "isPartOf": {
        "type": [
          "PublicationVolume",
          "Periodical"
        ],
        "name": "arXiv:1403.2805 [stat.CO]"
      }
    },
    "name": "The jsonlite Package: A Practical and Consistent Mapping Between JSON Data and R Objects",
    "url": "https://arxiv.org/abs/1403.2805"
  },
  "datePublished": "2017-06-01 12:03:37 UTC",
  "description": "A fast JSON parser and generator optimized for statistical data\n    and the web. Started out as a fork of 'RJSONIO', but has been completely\n    rewritten in recent versions. The package offers flexible, robust, high\n    performance tools for working with JSON in R and is particularly powerful\n    for building pipelines and interacting with a web API. The implementation is\n    based on the mapping described in the vignette (Ooms, 2014). In addition to\n    converting JSON data from/to R objects, 'jsonlite' contains functions to\n    stream, validate, and prettify JSON data. The unit tests included with the\n    package verify that all edge cases are encoded and decoded consistently for\n    use with dynamic data in systems and applications.",
  "identifier": "jsonlite",
  "license": "https://spdx.org/licenses/MIT",
  "name": "jsonlite: A Robust, High Performance JSON Parser and Generator for R",
  "programmingLanguage": {
    "type": "ComputerLanguage",
    "name": "R",
    "url": "https://r-project.org",
    "version": "3.4.1"
  },
  "provider": {
    "id": "https://cran.r-project.org",
    "type": "Organization",
    "name": "Central R Archive Network (CRAN)",
    "url": "https://cran.r-project.org"
  },
  "runtimePlatform": "R version 3.4.1 (2017-06-30)",
  "softwareRequirements": {
    "type": "SoftwareApplication",
    "identifier": "methods",
    "name": "methods"
  },
  "version": "1.5",
  "issueTracker": "http://github.com/jeroen/jsonlite/issues",
  "maintainer": {
    "type": "Person",
    "email": "jeroen@berkeley.edu",
    "familyName": "Ooms",
    "givenName": "Jeroen"
  },
  "softwareSuggestions": [
    {
      "type": "SoftwareApplication",
      "identifier": "httr",
      "name": "httr",
      "provider": {
        "id": "https://cran.r-project.org",
        "type": "Organization",
        "name": "Central R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      }
    },
    {
      "type": "SoftwareApplication",
      "identifier": "curl",
      "name": "curl",
      "provider": {
        "id": "https://cran.r-project.org",
        "type": "Organization",
        "name": "Central R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      }
    },
    {
      "type": "SoftwareApplication",
      "identifier": "plyr",
      "name": "plyr",
      "provider": {
        "id": "https://cran.r-project.org",
        "type": "Organization",
        "name": "Central R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      }
    },
    {
      "type": "SoftwareApplication",
      "identifier": "testthat",
      "name": "testthat",
      "provider": {
        "id": "https://cran.r-project.org",
        "type": "Organization",
        "name": "Central R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      }
    },
    {
      "type": "SoftwareApplication",
      "identifier": "knitr",
      "name": "knitr",
      "provider": {
        "id": "https://cran.r-project.org",
        "type": "Organization",
        "name": "Central R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      }
    },
    {
      "type": "SoftwareApplication",
      "identifier": "rmarkdown",
      "name": "rmarkdown",
      "provider": {
        "id": "https://cran.r-project.org",
        "type": "Organization",
        "name": "Central R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      }
    },
    {
      "type": "SoftwareApplication",
      "identifier": "R.rsp",
      "name": "R.rsp",
      "provider": {
        "id": "https://cran.r-project.org",
        "type": "Organization",
        "name": "Central R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      }
    },
    {
      "type": "SoftwareApplication",
      "identifier": "sp",
      "name": "sp",
      "provider": {
        "id": "https://cran.r-project.org",
        "type": "Organization",
        "name": "Central R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      }
    }
  ]
} 
And here’s the file with the fields fully expanded to the codemeta context vocabulary
jsonld::jsonld_expand(codemeta)
[
  {
    "@type": [
      "http://schema.org/SoftwareSourceCode"
    ],
    "http://schema.org/author": [
      {
        "@type": [
          "http://schema.org/Person"
        ],
        "http://schema.org/familyName": [
          {
            "@value": "Ooms"
          }
        ],
        "http://schema.org/givenName": [
          {
            "@value": "Jeroen"
          }
        ]
      },
      {
        "@type": [
          "http://schema.org/Person"
        ],
        "http://schema.org/familyName": [
          {
            "@value": "Lang"
          }
        ],
        "http://schema.org/givenName": [
          {
            "@value": "Duncan"
          },
          {
            "@value": "Temple"
          }
        ]
      },
      {
        "@type": [
          "http://schema.org/Person"
        ],
        "http://schema.org/familyName": [
          {
            "@value": "Hilaiel"
          }
        ],
        "http://schema.org/givenName": [
          {
            "@value": "Lloyd"
          }
        ]
      }
    ],
    "http://schema.org/citation": [
      {
        "@type": [
          "http://schema.org/ScholarlyArticle"
        ],
        "http://schema.org/author": [
          {
            "@type": [
              "http://schema.org/Person"
            ],
            "http://schema.org/familyName": [
              {
                "@value": "Ooms"
              }
            ],
            "http://schema.org/givenName": [
              {
                "@value": "Jeroen"
              }
            ]
          }
        ],
        "http://schema.org/datePublished": [
          {
            "@type": "http://schema.org/Date",
            "@value": "2014"
          }
        ],
        "http://schema.org/isPartOf": [
          {
            "@type": [
              "http://schema.org/PublicationIssue"
            ],
            "http://schema.org/datePublished": [
              {
                "@type": "http://schema.org/Date",
                "@value": "2014"
              }
            ],
            "http://schema.org/isPartOf": [
              {
                "@type": [
                  "http://schema.org/PublicationVolume",
                  "http://schema.org/Periodical"
                ],
                "http://schema.org/name": [
                  {
                    "@value": "arXiv:1403.2805 [stat.CO]"
                  }
                ]
              }
            ]
          }
        ],
        "http://schema.org/name": [
          {
            "@value": "The jsonlite Package: A Practical and Consistent Mapping Between JSON Data and R Objects"
          }
        ],
        "http://schema.org/url": [
          {
            "@id": "https://arxiv.org/abs/1403.2805"
          }
        ]
      }
    ],
    "http://schema.org/datePublished": [
      {
        "@type": "http://schema.org/Date",
        "@value": "2017-06-01 12:03:37 UTC"
      }
    ],
    "http://schema.org/description": [
      {
        "@value": "A fast JSON parser and generator optimized for statistical data\n    and the web. Started out as a fork of 'RJSONIO', but has been completely\n    rewritten in recent versions. The package offers flexible, robust, high\n    performance tools for working with JSON in R and is particularly powerful\n    for building pipelines and interacting with a web API. The implementation is\n    based on the mapping described in the vignette (Ooms, 2014). In addition to\n    converting JSON data from/to R objects, 'jsonlite' contains functions to\n    stream, validate, and prettify JSON data. The unit tests included with the\n    package verify that all edge cases are encoded and decoded consistently for\n    use with dynamic data in systems and applications."
      }
    ],
    "http://schema.org/identifier": [
      {
        "@id": "jsonlite"
      }
    ],
    "https://codemeta.github.io/terms/issueTracker": [
      {
        "@id": "http://github.com/jeroen/jsonlite/issues"
      }
    ],
    "http://schema.org/license": [
      {
        "@id": "https://spdx.org/licenses/MIT"
      }
    ],
    "https://codemeta.github.io/terms/maintainer": [
      {
        "@type": [
          "http://schema.org/Person"
        ],
        "http://schema.org/email": [
          {
            "@value": "jeroen@berkeley.edu"
          }
        ],
        "http://schema.org/familyName": [
          {
            "@value": "Ooms"
          }
        ],
        "http://schema.org/givenName": [
          {
            "@value": "Jeroen"
          }
        ]
      }
    ],
    "http://schema.org/name": [
      {
        "@value": "jsonlite: A Robust, High Performance JSON Parser and Generator for R"
      }
    ],
    "http://schema.org/programmingLanguage": [
      {
        "@type": [
          "http://schema.org/ComputerLanguage"
        ],
        "http://schema.org/name": [
          {
            "@value": "R"
          }
        ],
        "http://schema.org/url": [
          {
            "@id": "https://r-project.org"
          }
        ],
        "http://schema.org/version": [
          {
            "@value": "3.4.1"
          }
        ]
      }
    ],
    "http://schema.org/provider": [
      {
        "@id": "https://cran.r-project.org",
        "@type": [
          "http://schema.org/Organization"
        ],
        "http://schema.org/name": [
          {
            "@value": "Central R Archive Network (CRAN)"
          }
        ],
        "http://schema.org/url": [
          {
            "@id": "https://cran.r-project.org"
          }
        ]
      }
    ],
    "http://schema.org/runtimePlatform": [
      {
        "@value": "R version 3.4.1 (2017-06-30)"
      }
    ],
    "http://schema.org/softwareRequirements": [
      {
        "@type": [
          "http://schema.org/SoftwareApplication"
        ],
        "http://schema.org/identifier": [
          {
            "@id": "methods"
          }
        ],
        "http://schema.org/name": [
          {
            "@value": "methods"
          }
        ]
      }
    ],
    "https://codemeta.github.io/terms/softwareSuggestions": [
      {
        "@type": [
          "http://schema.org/SoftwareApplication"
        ],
        "http://schema.org/identifier": [
          {
            "@id": "httr"
          }
        ],
        "http://schema.org/name": [
          {
            "@value": "httr"
          }
        ],
        "http://schema.org/provider": [
          {
            "@id": "https://cran.r-project.org",
            "@type": [
              "http://schema.org/Organization"
            ],
            "http://schema.org/name": [
              {
                "@value": "Central R Archive Network (CRAN)"
              }
            ],
            "http://schema.org/url": [
              {
                "@id": "https://cran.r-project.org"
              }
            ]
          }
        ]
      },
      {
        "@type": [
          "http://schema.org/SoftwareApplication"
        ],
        "http://schema.org/identifier": [
          {
            "@id": "curl"
          }
        ],
        "http://schema.org/name": [
          {
            "@value": "curl"
          }
        ],
        "http://schema.org/provider": [
          {
            "@id": "https://cran.r-project.org",
            "@type": [
              "http://schema.org/Organization"
            ],
            "http://schema.org/name": [
              {
                "@value": "Central R Archive Network (CRAN)"
              }
            ],
            "http://schema.org/url": [
              {
                "@id": "https://cran.r-project.org"
              }
            ]
          }
        ]
      },
      {
        "@type": [
          "http://schema.org/SoftwareApplication"
        ],
        "http://schema.org/identifier": [
          {
            "@id": "plyr"
          }
        ],
        "http://schema.org/name": [
          {
            "@value": "plyr"
          }
        ],
        "http://schema.org/provider": [
          {
            "@id": "https://cran.r-project.org",
            "@type": [
              "http://schema.org/Organization"
            ],
            "http://schema.org/name": [
              {
                "@value": "Central R Archive Network (CRAN)"
              }
            ],
            "http://schema.org/url": [
              {
                "@id": "https://cran.r-project.org"
              }
            ]
          }
        ]
      },
      {
        "@type": [
          "http://schema.org/SoftwareApplication"
        ],
        "http://schema.org/identifier": [
          {
            "@id": "testthat"
          }
        ],
        "http://schema.org/name": [
          {
            "@value": "testthat"
          }
        ],
        "http://schema.org/provider": [
          {
            "@id": "https://cran.r-project.org",
            "@type": [
              "http://schema.org/Organization"
            ],
            "http://schema.org/name": [
              {
                "@value": "Central R Archive Network (CRAN)"
              }
            ],
            "http://schema.org/url": [
              {
                "@id": "https://cran.r-project.org"
              }
            ]
          }
        ]
      },
      {
        "@type": [
          "http://schema.org/SoftwareApplication"
        ],
        "http://schema.org/identifier": [
          {
            "@id": "knitr"
          }
        ],
        "http://schema.org/name": [
          {
            "@value": "knitr"
          }
        ],
        "http://schema.org/provider": [
          {
            "@id": "https://cran.r-project.org",
            "@type": [
              "http://schema.org/Organization"
            ],
            "http://schema.org/name": [
              {
                "@value": "Central R Archive Network (CRAN)"
              }
            ],
            "http://schema.org/url": [
              {
                "@id": "https://cran.r-project.org"
              }
            ]
          }
        ]
      },
      {
        "@type": [
          "http://schema.org/SoftwareApplication"
        ],
        "http://schema.org/identifier": [
          {
            "@id": "rmarkdown"
          }
        ],
        "http://schema.org/name": [
          {
            "@value": "rmarkdown"
          }
        ],
        "http://schema.org/provider": [
          {
            "@id": "https://cran.r-project.org",
            "@type": [
              "http://schema.org/Organization"
            ],
            "http://schema.org/name": [
              {
                "@value": "Central R Archive Network (CRAN)"
              }
            ],
            "http://schema.org/url": [
              {
                "@id": "https://cran.r-project.org"
              }
            ]
          }
        ]
      },
      {
        "@type": [
          "http://schema.org/SoftwareApplication"
        ],
        "http://schema.org/identifier": [
          {
            "@id": "R.rsp"
          }
        ],
        "http://schema.org/name": [
          {
            "@value": "R.rsp"
          }
        ],
        "http://schema.org/provider": [
          {
            "@id": "https://cran.r-project.org",
            "@type": [
              "http://schema.org/Organization"
            ],
            "http://schema.org/name": [
              {
                "@value": "Central R Archive Network (CRAN)"
              }
            ],
            "http://schema.org/url": [
              {
                "@id": "https://cran.r-project.org"
              }
            ]
          }
        ]
      },
      {
        "@type": [
          "http://schema.org/SoftwareApplication"
        ],
        "http://schema.org/identifier": [
          {
            "@id": "sp"
          }
        ],
        "http://schema.org/name": [
          {
            "@value": "sp"
          }
        ],
        "http://schema.org/provider": [
          {
            "@id": "https://cran.r-project.org",
            "@type": [
              "http://schema.org/Organization"
            ],
            "http://schema.org/name": [
              {
                "@value": "Central R Archive Network (CRAN)"
              }
            ],
            "http://schema.org/url": [
              {
                "@id": "https://cran.r-project.org"
              }
            ]
          }
        ]
      }
    ],
    "http://schema.org/version": [
      {
        "@value": "1.5"
      }
    ]
  }
] 

JSON-LD FRAMES

What is a frame?

Framing is used to shape the data in a JSON-LD document, using an example frame document which is used to both match the flattened data and show an example of how the resulting data should be shaped. Matching is performed by using properties present in in the frame to find objects in the data that share common values. Matching can be done either using all properties present in the frame, or any property in the frame. By chaining together objects using matched property values, objects can be embedded within one another.

A frame also includes a context, which is used for compacting the resulting framed output.

By detailing how the metadata must be structured, what elements must, can, and may not be included, and what data types may be used for those elements, schema help developers consuming the data to anticipate these details and thus build applications which know how to process them. For the data creator, validation is a convenient way to catch data input errors and ensure a consistent data structure.

library(jsonld)
frame <- jsonld_frame("codemeta.json", frame)
frame
{
  "@context": "https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld",
  "@graph": [
    {
      "id": "http://orcid.org/0000-0002-1642-628X",
      "type": "Person",
      "familyName": "Boettiger",
      "givenName": "Carl"
    }
  ]
} 
frame <- '{
  "@context": "https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld",
  "@explicit": "true",
  "@type": "Person",
  "givenName": {},
  "familyName": {}
}'

meta <- 
  jsonld_frame(codemeta, frame)  %>%
  fromJSON(codemeta, simplifyVector = FALSE) %>% 
  getElement("@graph") 

meta[[1]]
$id
[1] "_:b1"

$type
[1] "Person"

$familyName
[1] "Ooms"

$givenName
[1] "Jeroen"
_:b1
Person
Ooms
Jeroen

Contexts in crosswalking

https://doi.org/10.5063/schema/codemeta-2.0 contains the published codemeta json context, referencing codemeta vocabulary back to fields in schema.org. Hosted online.

More here on the recognised terms from Schema.org, and the additional ones developed by the codemeta project: https://codemeta.github.io/terms/

codemeta_context <- "https://doi.org/10.5063/schema/codemeta-2.0"
context <- jsonlite::read_json(codemeta_context)
context
$`@context`
$`@context`$type
[1] "@type"

$`@context`$id
[1] "@id"

$`@context`$schema
[1] "http://schema.org/"

$`@context`$codemeta
[1] "https://codemeta.github.io/terms/"

$`@context`$Organization
$`@context`$Organization$`@id`
[1] "schema:Organization"


$`@context`$Person
$`@context`$Person$`@id`
[1] "schema:Person"


$`@context`$SoftwareSourceCode
$`@context`$SoftwareSourceCode$`@id`
[1] "schema:SoftwareSourceCode"


$`@context`$SoftwareApplication
$`@context`$SoftwareApplication$`@id`
[1] "schema:SoftwareApplication"


$`@context`$Text
$`@context`$Text$`@id`
[1] "schema:Text"


$`@context`$URL
$`@context`$URL$`@id`
[1] "schema:URL"


$`@context`$address
$`@context`$address$`@id`
[1] "schema:address"


$`@context`$affiliation
$`@context`$affiliation$`@id`
[1] "schema:affiliation"


$`@context`$applicationCategory
$`@context`$applicationCategory$`@id`
[1] "schema:applicationCategory"

$`@context`$applicationCategory$`@type`
[1] "@id"


$`@context`$applicationSubCategory
$`@context`$applicationSubCategory$`@id`
[1] "schema:applicationSubCategory"

$`@context`$applicationSubCategory$`@type`
[1] "@id"


$`@context`$citation
$`@context`$citation$`@id`
[1] "schema:citation"


$`@context`$codeRepository
$`@context`$codeRepository$`@id`
[1] "schema:codeRepository"

$`@context`$codeRepository$`@type`
[1] "@id"


$`@context`$contributor
$`@context`$contributor$`@id`
[1] "schema:contributor"


$`@context`$copyrightHolder
$`@context`$copyrightHolder$`@id`
[1] "schema:copyrightHolder"


$`@context`$copyrightYear
$`@context`$copyrightYear$`@id`
[1] "schema:copyrightYear"


$`@context`$creator
$`@context`$creator$`@id`
[1] "schema:creator"


$`@context`$dateCreated
$`@context`$dateCreated$`@id`
[1] "schema:dateCreated"

$`@context`$dateCreated$`@type`
[1] "schema:Date"


$`@context`$dateModified
$`@context`$dateModified$`@id`
[1] "schema:dateModified"

$`@context`$dateModified$`@type`
[1] "schema:Date"


$`@context`$datePublished
$`@context`$datePublished$`@id`
[1] "schema:datePublished"

$`@context`$datePublished$`@type`
[1] "schema:Date"


$`@context`$description
$`@context`$description$`@id`
[1] "schema:description"


$`@context`$downloadUrl
$`@context`$downloadUrl$`@id`
[1] "schema:downloadUrl"

$`@context`$downloadUrl$`@type`
[1] "@id"


$`@context`$email
$`@context`$email$`@id`
[1] "schema:email"


$`@context`$editor
$`@context`$editor$`@id`
[1] "schema:editor"


$`@context`$encoding
$`@context`$encoding$`@id`
[1] "schema:encoding"


$`@context`$familyName
$`@context`$familyName$`@id`
[1] "schema:familyName"


$`@context`$fileFormat
$`@context`$fileFormat$`@id`
[1] "schema:fileFormat"

$`@context`$fileFormat$`@type`
[1] "@id"


$`@context`$fileSize
$`@context`$fileSize$`@id`
[1] "schema:fileSize"


$`@context`$funder
$`@context`$funder$`@id`
[1] "schema:funder"


$`@context`$givenName
$`@context`$givenName$`@id`
[1] "schema:givenName"


$`@context`$hasPart
$`@context`$hasPart$`@id`
[1] "schema:hasPart"


$`@context`$identifier
$`@context`$identifier$`@id`
[1] "schema:identifier"

$`@context`$identifier$`@type`
[1] "@id"


$`@context`$installUrl
$`@context`$installUrl$`@id`
[1] "schema:installUrl"

$`@context`$installUrl$`@type`
[1] "@id"


$`@context`$isAccessibleForFree
$`@context`$isAccessibleForFree$`@id`
[1] "schema:isAccessibleForFree"


$`@context`$isPartOf
$`@context`$isPartOf$`@id`
[1] "schema:isPartOf"


$`@context`$keywords
$`@context`$keywords$`@id`
[1] "schema:keywords"


$`@context`$license
$`@context`$license$`@id`
[1] "schema:license"

$`@context`$license$`@type`
[1] "@id"


$`@context`$memoryRequirements
$`@context`$memoryRequirements$`@id`
[1] "schema:memoryRequirements"

$`@context`$memoryRequirements$`@type`
[1] "@id"


$`@context`$name
$`@context`$name$`@id`
[1] "schema:name"


$`@context`$operatingSystem
$`@context`$operatingSystem$`@id`
[1] "schema:operatingSystem"


$`@context`$permissions
$`@context`$permissions$`@id`
[1] "schema:permissions"


$`@context`$position
$`@context`$position$`@id`
[1] "schema:position"


$`@context`$processorRequirements
$`@context`$processorRequirements$`@id`
[1] "schema:processorRequirements"


$`@context`$producer
$`@context`$producer$`@id`
[1] "schema:producer"


$`@context`$programmingLanguage
$`@context`$programmingLanguage$`@id`
[1] "schema:programmingLanguage"


$`@context`$provider
$`@context`$provider$`@id`
[1] "schema:provider"


$`@context`$publisher
$`@context`$publisher$`@id`
[1] "schema:publisher"


$`@context`$relatedLink
$`@context`$relatedLink$`@id`
[1] "schema:relatedLink"

$`@context`$relatedLink$`@type`
[1] "@id"


$`@context`$releaseNotes
$`@context`$releaseNotes$`@id`
[1] "schema:releaseNotes"

$`@context`$releaseNotes$`@type`
[1] "@id"


$`@context`$runtimePlatform
$`@context`$runtimePlatform$`@id`
[1] "schema:runtimePlatform"


$`@context`$sameAs
$`@context`$sameAs$`@id`
[1] "schema:sameAs"

$`@context`$sameAs$`@type`
[1] "@id"


$`@context`$softwareHelp
$`@context`$softwareHelp$`@id`
[1] "schema:softwareHelp"


$`@context`$softwareRequirements
$`@context`$softwareRequirements$`@id`
[1] "schema:softwareRequirements"

$`@context`$softwareRequirements$`@type`
[1] "@id"


$`@context`$softwareVersion
$`@context`$softwareVersion$`@id`
[1] "schema:softwareVersion"


$`@context`$sponsor
$`@context`$sponsor$`@id`
[1] "schema:sponsor"


$`@context`$storageRequirements
$`@context`$storageRequirements$`@id`
[1] "schema:storageRequirements"

$`@context`$storageRequirements$`@type`
[1] "@id"


$`@context`$supportingData
$`@context`$supportingData$`@id`
[1] "schema:supportingData"


$`@context`$targetProduct
$`@context`$targetProduct$`@id`
[1] "schema:targetProduct"


$`@context`$url
$`@context`$url$`@id`
[1] "schema:url"

$`@context`$url$`@type`
[1] "@id"


$`@context`$version
$`@context`$version$`@id`
[1] "schema:version"


$`@context`$author
$`@context`$author$`@id`
[1] "schema:author"

$`@context`$author$`@container`
[1] "@list"


$`@context`$softwareSuggestions
$`@context`$softwareSuggestions$`@id`
[1] "codemeta:softwareSuggestions"

$`@context`$softwareSuggestions$`@type`
[1] "@id"


$`@context`$contIntegration
$`@context`$contIntegration$`@id`
[1] "codemeta:contIntegration"

$`@context`$contIntegration$`@type`
[1] "@id"


$`@context`$buildInstructions
$`@context`$buildInstructions$`@id`
[1] "codemeta:buildInstructions"

$`@context`$buildInstructions$`@type`
[1] "@id"


$`@context`$developmentStatus
$`@context`$developmentStatus$`@id`
[1] "codemeta:developmentStatus"

$`@context`$developmentStatus$`@type`
[1] "@id"


$`@context`$embargoDate
$`@context`$embargoDate$`@id`
[1] "codemeta:embargoDate"

$`@context`$embargoDate$`@type`
[1] "schema:Date"


$`@context`$funding
$`@context`$funding$`@id`
[1] "codemeta:funding"


$`@context`$readme
$`@context`$readme$`@id`
[1] "codemeta:readme"

$`@context`$readme$`@type`
[1] "@id"


$`@context`$issueTracker
$`@context`$issueTracker$`@id`
[1] "codemeta:issueTracker"

$`@context`$issueTracker$`@type`
[1] "@id"


$`@context`$referencePublication
$`@context`$referencePublication$`@id`
[1] "codemeta:referencePublication"

$`@context`$referencePublication$`@type`
[1] "@id"


$`@context`$maintainer
$`@context`$maintainer$`@id`
[1] "codemeta:maintainer"
@type
@id
http://schema.org/
https://codemeta.github.io/terms/
schema:Organization
schema:Person
schema:SoftwareSourceCode
schema:SoftwareApplication
schema:Text
schema:URL
schema:address
schema:affiliation
schema:applicationCategory
@id
schema:applicationSubCategory
@id
schema:citation
schema:codeRepository
@id
schema:contributor
schema:copyrightHolder
schema:copyrightYear
schema:creator
schema:dateCreated
schema:Date
schema:dateModified
schema:Date
schema:datePublished
schema:Date
schema:description
schema:downloadUrl
@id
schema:email
schema:editor
schema:encoding
schema:familyName
schema:fileFormat
@id
schema:fileSize
schema:funder
schema:givenName
schema:hasPart
schema:identifier
@id
schema:installUrl
@id
schema:isAccessibleForFree
schema:isPartOf
schema:keywords
schema:license
@id
schema:memoryRequirements
@id
schema:name
schema:operatingSystem
schema:permissions
schema:position
schema:processorRequirements
schema:producer
schema:programmingLanguage
schema:provider
schema:publisher
schema:relatedLink
@id
schema:releaseNotes
@id
schema:runtimePlatform
schema:sameAs
@id
schema:softwareHelp
schema:softwareRequirements
@id
schema:softwareVersion
schema:sponsor
schema:storageRequirements
@id
schema:supportingData
schema:targetProduct
schema:url
@id
schema:version
schema:author
@list
codemeta:softwareSuggestions
@id
codemeta:contIntegration
@id
codemeta:buildInstructions
@id
codemeta:developmentStatus
@id
codemeta:embargoDate
schema:Date
codemeta:funding
codemeta:readme
@id
codemeta:issueTracker
@id
codemeta:referencePublication
@id
codemeta:maintainer
str(context)
List of 1
 $ @context:List of 74
  ..$ type                  : chr "@type"
  ..$ id                    : chr "@id"
  ..$ schema                : chr "http://schema.org/"
  ..$ codemeta              : chr "https://codemeta.github.io/terms/"
  ..$ Organization          :List of 1
  .. ..$ @id: chr "schema:Organization"
  ..$ Person                :List of 1
  .. ..$ @id: chr "schema:Person"
  ..$ SoftwareSourceCode    :List of 1
  .. ..$ @id: chr "schema:SoftwareSourceCode"
  ..$ SoftwareApplication   :List of 1
  .. ..$ @id: chr "schema:SoftwareApplication"
  ..$ Text                  :List of 1
  .. ..$ @id: chr "schema:Text"
  ..$ URL                   :List of 1
  .. ..$ @id: chr "schema:URL"
  ..$ address               :List of 1
  .. ..$ @id: chr "schema:address"
  ..$ affiliation           :List of 1
  .. ..$ @id: chr "schema:affiliation"
  ..$ applicationCategory   :List of 2
  .. ..$ @id  : chr "schema:applicationCategory"
  .. ..$ @type: chr "@id"
  ..$ applicationSubCategory:List of 2
  .. ..$ @id  : chr "schema:applicationSubCategory"
  .. ..$ @type: chr "@id"
  ..$ citation              :List of 1
  .. ..$ @id: chr "schema:citation"
  ..$ codeRepository        :List of 2
  .. ..$ @id  : chr "schema:codeRepository"
  .. ..$ @type: chr "@id"
  ..$ contributor           :List of 1
  .. ..$ @id: chr "schema:contributor"
  ..$ copyrightHolder       :List of 1
  .. ..$ @id: chr "schema:copyrightHolder"
  ..$ copyrightYear         :List of 1
  .. ..$ @id: chr "schema:copyrightYear"
  ..$ creator               :List of 1
  .. ..$ @id: chr "schema:creator"
  ..$ dateCreated           :List of 2
  .. ..$ @id  : chr "schema:dateCreated"
  .. ..$ @type: chr "schema:Date"
  ..$ dateModified          :List of 2
  .. ..$ @id  : chr "schema:dateModified"
  .. ..$ @type: chr "schema:Date"
  ..$ datePublished         :List of 2
  .. ..$ @id  : chr "schema:datePublished"
  .. ..$ @type: chr "schema:Date"
  ..$ description           :List of 1
  .. ..$ @id: chr "schema:description"
  ..$ downloadUrl           :List of 2
  .. ..$ @id  : chr "schema:downloadUrl"
  .. ..$ @type: chr "@id"
  ..$ email                 :List of 1
  .. ..$ @id: chr "schema:email"
  ..$ editor                :List of 1
  .. ..$ @id: chr "schema:editor"
  ..$ encoding              :List of 1
  .. ..$ @id: chr "schema:encoding"
  ..$ familyName            :List of 1
  .. ..$ @id: chr "schema:familyName"
  ..$ fileFormat            :List of 2
  .. ..$ @id  : chr "schema:fileFormat"
  .. ..$ @type: chr "@id"
  ..$ fileSize              :List of 1
  .. ..$ @id: chr "schema:fileSize"
  ..$ funder                :List of 1
  .. ..$ @id: chr "schema:funder"
  ..$ givenName             :List of 1
  .. ..$ @id: chr "schema:givenName"
  ..$ hasPart               :List of 1
  .. ..$ @id: chr "schema:hasPart"
  ..$ identifier            :List of 2
  .. ..$ @id  : chr "schema:identifier"
  .. ..$ @type: chr "@id"
  ..$ installUrl            :List of 2
  .. ..$ @id  : chr "schema:installUrl"
  .. ..$ @type: chr "@id"
  ..$ isAccessibleForFree   :List of 1
  .. ..$ @id: chr "schema:isAccessibleForFree"
  ..$ isPartOf              :List of 1
  .. ..$ @id: chr "schema:isPartOf"
  ..$ keywords              :List of 1
  .. ..$ @id: chr "schema:keywords"
  ..$ license               :List of 2
  .. ..$ @id  : chr "schema:license"
  .. ..$ @type: chr "@id"
  ..$ memoryRequirements    :List of 2
  .. ..$ @id  : chr "schema:memoryRequirements"
  .. ..$ @type: chr "@id"
  ..$ name                  :List of 1
  .. ..$ @id: chr "schema:name"
  ..$ operatingSystem       :List of 1
  .. ..$ @id: chr "schema:operatingSystem"
  ..$ permissions           :List of 1
  .. ..$ @id: chr "schema:permissions"
  ..$ position              :List of 1
  .. ..$ @id: chr "schema:position"
  ..$ processorRequirements :List of 1
  .. ..$ @id: chr "schema:processorRequirements"
  ..$ producer              :List of 1
  .. ..$ @id: chr "schema:producer"
  ..$ programmingLanguage   :List of 1
  .. ..$ @id: chr "schema:programmingLanguage"
  ..$ provider              :List of 1
  .. ..$ @id: chr "schema:provider"
  ..$ publisher             :List of 1
  .. ..$ @id: chr "schema:publisher"
  ..$ relatedLink           :List of 2
  .. ..$ @id  : chr "schema:relatedLink"
  .. ..$ @type: chr "@id"
  ..$ releaseNotes          :List of 2
  .. ..$ @id  : chr "schema:releaseNotes"
  .. ..$ @type: chr "@id"
  ..$ runtimePlatform       :List of 1
  .. ..$ @id: chr "schema:runtimePlatform"
  ..$ sameAs                :List of 2
  .. ..$ @id  : chr "schema:sameAs"
  .. ..$ @type: chr "@id"
  ..$ softwareHelp          :List of 1
  .. ..$ @id: chr "schema:softwareHelp"
  ..$ softwareRequirements  :List of 2
  .. ..$ @id  : chr "schema:softwareRequirements"
  .. ..$ @type: chr "@id"
  ..$ softwareVersion       :List of 1
  .. ..$ @id: chr "schema:softwareVersion"
  ..$ sponsor               :List of 1
  .. ..$ @id: chr "schema:sponsor"
  ..$ storageRequirements   :List of 2
  .. ..$ @id  : chr "schema:storageRequirements"
  .. ..$ @type: chr "@id"
  ..$ supportingData        :List of 1
  .. ..$ @id: chr "schema:supportingData"
  ..$ targetProduct         :List of 1
  .. ..$ @id: chr "schema:targetProduct"
  ..$ url                   :List of 2
  .. ..$ @id  : chr "schema:url"
  .. ..$ @type: chr "@id"
  ..$ version               :List of 1
  .. ..$ @id: chr "schema:version"
  ..$ author                :List of 2
  .. ..$ @id       : chr "schema:author"
  .. ..$ @container: chr "@list"
  ..$ softwareSuggestions   :List of 2
  .. ..$ @id  : chr "codemeta:softwareSuggestions"
  .. ..$ @type: chr "@id"
  ..$ contIntegration       :List of 2
  .. ..$ @id  : chr "codemeta:contIntegration"
  .. ..$ @type: chr "@id"
  ..$ buildInstructions     :List of 2
  .. ..$ @id  : chr "codemeta:buildInstructions"
  .. ..$ @type: chr "@id"
  ..$ developmentStatus     :List of 2
  .. ..$ @id  : chr "codemeta:developmentStatus"
  .. ..$ @type: chr "@id"
  ..$ embargoDate           :List of 2
  .. ..$ @id  : chr "codemeta:embargoDate"
  .. ..$ @type: chr "schema:Date"
  ..$ funding               :List of 1
  .. ..$ @id: chr "codemeta:funding"
  ..$ readme                :List of 2
  .. ..$ @id  : chr "codemeta:readme"
  .. ..$ @type: chr "@id"
  ..$ issueTracker          :List of 2
  .. ..$ @id  : chr "codemeta:issueTracker"
  .. ..$ @type: chr "@id"
  ..$ referencePublication  :List of 2
  .. ..$ @id  : chr "codemeta:referencePublication"
  .. ..$ @type: chr "@id"
  ..$ maintainer            :List of 1
  .. ..$ @id: chr "codemeta:maintainer"
context[[1]][["id"]] <- NULL ## avoid collisions with @id
properties <- names(context[[1]]) %>% sort
properties
 [1] "address"                "affiliation"           
 [3] "applicationCategory"    "applicationSubCategory"
 [5] "author"                 "buildInstructions"     
 [7] "citation"               "codemeta"              
 [9] "codeRepository"         "contIntegration"       
[11] "contributor"            "copyrightHolder"       
[13] "copyrightYear"          "creator"               
[15] "dateCreated"            "dateModified"          
[17] "datePublished"          "description"           
[19] "developmentStatus"      "downloadUrl"           
[21] "editor"                 "email"                 
[23] "embargoDate"            "encoding"              
[25] "familyName"             "fileFormat"            
[27] "fileSize"               "funder"                
[29] "funding"                "givenName"             
[31] "hasPart"                "identifier"            
[33] "installUrl"             "isAccessibleForFree"   
[35] "isPartOf"               "issueTracker"          
[37] "keywords"               "license"               
[39] "maintainer"             "memoryRequirements"    
[41] "name"                   "operatingSystem"       
[43] "Organization"           "permissions"           
[45] "Person"                 "position"              
[47] "processorRequirements"  "producer"              
[49] "programmingLanguage"    "provider"              
[51] "publisher"              "readme"                
[53] "referencePublication"   "relatedLink"           
[55] "releaseNotes"           "runtimePlatform"       
[57] "sameAs"                 "schema"                
[59] "SoftwareApplication"    "softwareHelp"          
[61] "softwareRequirements"   "SoftwareSourceCode"    
[63] "softwareSuggestions"    "softwareVersion"       
[65] "sponsor"                "storageRequirements"   
[67] "supportingData"         "targetProduct"         
[69] "Text"                   "type"                  
[71] "url"                    "URL"                   
[73] "version"               
address

affiliation

applicationCategory

applicationSubCategory

author

buildInstructions

citation

codemeta

codeRepository

contIntegration

contributor

copyrightHolder

copyrightYear

creator

dateCreated

dateModified

datePublished

description

developmentStatus

downloadUrl

editor

email

embargoDate

encoding

familyName

fileFormat

fileSize

funder

funding

givenName

hasPart

identifier

installUrl

isAccessibleForFree

isPartOf

issueTracker

keywords

license

maintainer

memoryRequirements

name

operatingSystem

Organization

permissions

Person

position

processorRequirements

producer

programmingLanguage

provider

publisher

readme

referencePublication

relatedLink

releaseNotes

runtimePlatform

sameAs

schema

SoftwareApplication

softwareHelp

softwareRequirements

SoftwareSourceCode

softwareSuggestions

softwareVersion

sponsor

storageRequirements

supportingData

targetProduct

Text

type

url

URL

version
LS0tCnRpdGxlOiAiRGF0YSBTdHJ1Y3R1cmVzIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoqKioKIyMgW1czQyBUaGUgU2VtYW50aWMgV2ViIG9mIExpbmtlZCBEYXRhXShodHRwczovL3d3dy53My5vcmcvc3RhbmRhcmRzL3NlbWFudGljd2ViL2RhdGEpCgpUaGUgU2VtYW50aWMgV2ViIGlzIGEgV2ViIG9mIERhdGEg4oCUIG9mIGRhdGVzIGFuZCB0aXRsZXMgYW5kIHBhcnQgbnVtYmVycyBhbmQgY2hlbWljYWwgcHJvcGVydGllcyBhbmQgYW55IG90aGVyIGRhdGEgb25lIG1pZ2h0IGNvbmNlaXZlIG9mLiBUaGUgY29sbGVjdGlvbiBvZiBTZW1hbnRpYyBXZWIgdGVjaG5vbG9naWVzIChSREYsIE9XTCwgU0tPUywgU1BBUlFMLCBldGMuKSBwcm92aWRlcyBhbiBlbnZpcm9ubWVudCB3aGVyZSBhcHBsaWNhdGlvbiBjYW4gcXVlcnkgdGhhdCBkYXRhLCBkcmF3IGluZmVyZW5jZXMgdXNpbmcgdm9jYWJ1bGFyaWVzLCBldGMuCgpIb3dldmVyLCB0byBtYWtlIHRoZSBXZWIgb2YgRGF0YSBhIHJlYWxpdHksIGl0IGlzIGltcG9ydGFudCB0byBoYXZlIHRoZSBodWdlIGFtb3VudCBvZiBkYXRhIG9uIHRoZSBXZWIgYXZhaWxhYmxlIGluIGEgc3RhbmRhcmQgZm9ybWF0LCByZWFjaGFibGUgYW5kIG1hbmFnZWFibGUgYnkgU2VtYW50aWMgV2ViIHRvb2xzLiBGdXJ0aGVybW9yZSwgbm90IG9ubHkgZG9lcyB0aGUgU2VtYW50aWMgV2ViIG5lZWQgYWNjZXNzIHRvIGRhdGEsIGJ1dCByZWxhdGlvbnNoaXBzIGFtb25nIGRhdGEgc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlLCB0b28sIHRvIGNyZWF0ZSBhIFdlYiBvZiBEYXRhIChhcyBvcHBvc2VkIHRvIGEgc2hlZXIgY29sbGVjdGlvbiBvZiBkYXRhc2V0cykuIFRoaXMgY29sbGVjdGlvbiBvZiBpbnRlcnJlbGF0ZWQgZGF0YXNldHMgb24gdGhlIFdlYiBjYW4gYWxzbyBiZSByZWZlcnJlZCB0byBhcyBMaW5rZWQgRGF0YS4KClRvIGFjaGlldmUgYW5kIGNyZWF0ZSBMaW5rZWQgRGF0YSwgdGVjaG5vbG9naWVzIHNob3VsZCBiZSBhdmFpbGFibGUgZm9yIGEgY29tbW9uIGZvcm1hdCAoUkRGKSwgdG8gbWFrZSBlaXRoZXIgY29udmVyc2lvbiBvciBvbi10aGUtZmx5IGFjY2VzcyB0byBleGlzdGluZyBkYXRhYmFzZXMgKHJlbGF0aW9uYWwsIFhNTCwgSFRNTCwgZXRjKS4gSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gYmUgYWJsZSB0byBzZXR1cCBxdWVyeSBlbmRwb2ludHMgdG8gYWNjZXNzIHRoYXQgZGF0YSBtb3JlIGNvbnZlbmllbnRseS4gVzNDIHByb3ZpZGVzIGEgcGFsZXR0ZSBvZiB0ZWNobm9sb2dpZXMgKFJERiwgR1JEREwsIFBPV0RFUiwgUkRGYSwgdGhlIHVwY29taW5nIFIyUk1MLCBSSUYsIFNQQVJRTCkgdG8gZ2V0IGFjY2VzcyB0byB0aGUgZGF0YS4KCioqTU9SRToqKiBbVGltIEJlcm5lcnMtTGVlJ3Mgbm90ZSBvbiBMaW5rZWQgRGF0YSBdKGh0dHBzOi8vd3d3LnczLm9yZy9EZXNpZ25Jc3N1ZXMvTGlua2VkRGF0YS5odG1sKSAKCgoqKlZvY2FidWxhcmllczoqKgpBdCB0aW1lcyBpdCBtYXkgYmUgaW1wb3J0YW50IG9yIHZhbHVhYmxlIHRvIG9yZ2FuaXplIGRhdGEuIFVzaW5nIE9XTCAodG8gYnVpbGQgdm9jYWJ1bGFyaWVzLCBvciDigJxvbnRvbG9naWVz4oCdKSBhbmQgU0tPUyAoZm9yIGRlc2lnbmluZyBrbm93bGVkZ2Ugb3JnYW5pemF0aW9uIHN5c3RlbXMpIGl0IGlzIHBvc3NpYmxlIHRvIGVucmljaCBkYXRhIHdpdGggYWRkaXRpb25hbCBtZWFuaW5nLCB3aGljaCBhbGxvd3MgbW9yZSBwZW9wbGUgKGFuZCBtb3JlIG1hY2hpbmVzKSB0byBkbyBtb3JlIHdpdGggdGhlIGRhdGEuCgoqKioKCiMjIEpTT04tTEQgZG9jdW1lbnQKCkEgSlNPTi1MRCBkb2N1bWVudCBpcyBhIHNlcmlhbGl6YXRpb24gb2YgYSBjb2xsZWN0aW9uIG9mIGdyYXBocyBhbmQgY29tcHJpc2VzIGV4YWN0bHkgb25lIGRlZmF1bHQgZ3JhcGggYW5kIHplcm8gb3IgbW9yZSBuYW1lZCBncmFwaHMuCgpBIEpTT04tTEQgZG9jdW1lbnQgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBhIGRpcmVjdGVkIGdyYXBoLiBBIHNpbmdsZSBkaXJlY3RlZCBncmFwaCBjYW4gaGF2ZSBtYW55IGRpZmZlcmVudCBzZXJpYWxpemF0aW9ucywgZWFjaCBleHByZXNzaW5nIGV4YWN0bHkgdGhlIHNhbWUgaW5mb3JtYXRpb24uIERldmVsb3BlcnMgdHlwaWNhbGx5IHdvcmsgd2l0aCB0cmVlcywgcmVwcmVzZW50ZWQgYXMgSlNPTiBvYmplY3RzLiBXaGlsZSBtYXBwaW5nIGEgZ3JhcGggdG8gYSB0cmVlIGNhbiBiZSBkb25lLCB0aGUgbGF5b3V0IG9mIHRoZSBlbmQgcmVzdWx0IG11c3QgYmUgc3BlY2lmaWVkIGluIGFkdmFuY2UuIEEgKipGcmFtZSoqIGNhbiBiZSB1c2VkIGJ5IGEgZGV2ZWxvcGVyIG9uIGEgSlNPTi1MRCBkb2N1bWVudCB0byBzcGVjaWZ5IGEgZGV0ZXJtaW5pc3RpYyBsYXlvdXQgZm9yIGEgZ3JhcGggKFNlZSBbSlNPTi1MRCBGUkFNRVNdIGJlbG93KS4KCiMjIyAzLiBSREYgR3JhcGhzCgpBbiBSREYgZ3JhcGggaXMgYSBzZXQgb2YgUkRGIHRyaXBsZXMuCgojIyMjIDMuMSBUcmlwbGVzCgpBbiBSREYgdHJpcGxlIGNvbnNpc3RzIG9mIHRocmVlIGNvbXBvbmVudHM6CgotIHRoZSBzdWJqZWN0LCB3aGljaCBpcyBhbiBJUkkgb3IgYSBibGFuayBub2RlCi0gdGhlIHByZWRpY2F0ZSwgd2hpY2ggaXMgYW4gSVJJCi0gdGhlIG9iamVjdCwgd2hpY2ggaXMgYW4gSVJJLCBhIGxpdGVyYWwgb3IgYSBibGFuayBub2RlCgpBbiBSREYgdHJpcGxlIGlzIGNvbnZlbnRpb25hbGx5IHdyaXR0ZW4gaW4gdGhlIG9yZGVyIHN1YmplY3QsIHByZWRpY2F0ZSwgb2JqZWN0LgoKVGhlIHNldCBvZiBub2RlcyBvZiBhbiBSREYgZ3JhcGggaXMgdGhlIHNldCBvZiBzdWJqZWN0cyBhbmQgb2JqZWN0cyBvZiB0cmlwbGVzIGluIHRoZSBncmFwaC4gSXQgaXMgcG9zc2libGUgZm9yIGEgcHJlZGljYXRlIElSSSB0byBhbHNvIG9jY3VyIGFzIGEgbm9kZSBpbiB0aGUgc2FtZSBncmFwaC4KCklSSXMsIGxpdGVyYWxzIGFuZCBibGFuayBub2RlcyBhcmUgY29sbGVjdGl2ZWx5IGtub3duIGFzIFJERiB0ZXJtcy4KCklSSXMsIGxpdGVyYWxzIGFuZCBibGFuayBub2RlcyBhcmUgZGlzdGluY3QgYW5kIGRpc3Rpbmd1aXNoYWJsZS4gRm9yIGV4YW1wbGUsIGh0dHA6Ly9leGFtcGxlLm9yZy8gYXMgYSBzdHJpbmcgbGl0ZXJhbCBpcyBuZWl0aGVyIGVxdWFsIHRvIGh0dHA6Ly9leGFtcGxlLm9yZy8gYXMgYW4gSVJJLCBub3IgdG8gYSBibGFuayBub2RlIHdpdGggdGhlIGJsYW5rIG5vZGUgaWRlbnRpZmllciBodHRwOi8vZXhhbXBsZS5vcmcvLgoKIyMjIyAzLjIgSVJJcwoKQW4gSVJJIChJbnRlcm5hdGlvbmFsaXplZCBSZXNvdXJjZSBJZGVudGlmaWVyKSB3aXRoaW4gYW4gUkRGIGdyYXBoIGlzIGEgVW5pY29kZSBzdHJpbmcgW1VOSUNPREVdIHRoYXQgY29uZm9ybXMgdG8gdGhlIHN5bnRheCBkZWZpbmVkIGluIFJGQyAzOTg3IFtSRkMzOTg3XS4KCklSSXMgaW4gdGhlIFJERiBhYnN0cmFjdCBzeW50YXggbXVzdCBiZSBhYnNvbHV0ZSwgYW5kIG1heSBjb250YWluIGEgZnJhZ21lbnQgaWRlbnRpZmllci4KCklSSSBlcXVhbGl0eTogVHdvIElSSXMgYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQgdW5kZXIgU2ltcGxlIFN0cmluZyBDb21wYXJpc29uIGFjY29yZGluZyB0byBzZWN0aW9uIDUuMSBvZiBbUkZDMzk4N10uIEZ1cnRoZXIgbm9ybWFsaXphdGlvbiBtdXN0IG5vdCBiZSBwZXJmb3JtZWQgd2hlbiBjb21wYXJpbmcgSVJJcyBmb3IgZXF1YWxpdHkuCgpNb3JlIFtKU09OLUxEIHRlcm1pbm9sb2d5XShodHRwczovL2pzb24tbGQub3JnL3NwZWMvbGF0ZXN0L2pzb24tbGQtZnJhbWluZy8jZGZuLWxpbmtlZC1kYXRhLWdyYXBoKQoKYGBge3J9CmNvZGVtZXRhIDwtICIuLi9hc3NldHMvZXhhbXBsZS9qc29ubGl0ZS5qc29uIgpgYGAKCiMjIyBKU09OLUxEIHIgbGlzdAoKYGBge3J9Cmpzb25fbGQubGlzdCA8LSByZWFkX2pzb24oY29kZW1ldGEpIApjbGFzcyhqc29uX2xkLmxpc3QpCmpzb25fbGQubGlzdApgYGAKCkh1aD8gU29tZXRoaW5nIGluIGZ1bm55IGluIGhvdyBgSlNPTi1MRCByIGxpc3RgIGlzIGRpc3BsYXllZCB3aGVuIHVzZWQgd2l0aCBgcm1hcmtkd29uOjpyZW5kZXJgLiBMb29rcyBsaWtlIGl0J3MgYmVlbiBkdXBsaWNhdGVkIGluIGEgZGlmZmVyZW50IGZvcm1hdD8uCgo8YnI+CgojIyMjIyBHZXR0aW5nIHRoZSBjb250ZXh0OgotIGZyb20gYSBgSlNPTi1MRCByIGxpc3RgLCByZXR1cm5lZCBhcyBhIGxpc3Q6CgpgYGB7cn0KY29udGV4dCA8LSByZWFkX2pzb24oY29kZW1ldGEpJGBAY29udGV4dGAKY29udGV4dApjbGFzcyhjb250ZXh0KQpgYGAKCi0gZnJvbSBhIGBKU09OLUxEYCwgcmV0dXJuZWQgYXMgYEpTT05gOgpgYGB7cn0KY29udGV4dCA8LSBqc29ubGl0ZTo6dG9KU09OKGxpc3QoYEBjb250ZXh0YCA9IGNvbnRleHQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9fdW5ib3ggPSBUUlVFKQpjb250ZXh0CmNsYXNzKGNvbnRleHQpCmBgYAoKPGJyPgoKKioqCgojIyMgSlNPTi1MRAoKIyMjIyBXb3JraW5nIHdpdGggYEpTT04tTERgIGluIFIgdXNpbmcgYGpzb25sZGAgcGFja2FnZS4gCgotIGV4cGFuZCBhbmQgY29udHJhY3QgLT4gbmVlZHMgYSBjb250ZXh0IG9mIGNsYXNzICoqanNvbioqIChzZWUgYWJvdmUpLgoKYGBge3J9CmNvbnRleHQKYGBgCgo8YnI+CgojIyMjIyBDb250cmFjdGVkIGBKU09OLUxEYApgYGB7cn0KCmpzb25sZDo6anNvbmxkX2V4cGFuZChjb2RlbWV0YSkgJT4lIGpzb25sZDo6anNvbmxkX2NvbXBhY3QoY29udGV4dCkKYGBgCgojIyMjIyBBbmQgaGVyZSdzIHRoZSBmaWxlIHdpdGggdGhlIGZpZWxkcyBmdWxseSBleHBhbmRlZCB0byB0aGUgY29kZW1ldGEgY29udGV4dCB2b2NhYnVsYXJ5CgpgYGB7cn0KanNvbmxkOjpqc29ubGRfZXhwYW5kKGNvZGVtZXRhKQpgYGAKCiMjIEpTT04tTEQgRlJBTUVTCgojIyMgV2hhdCBpcyBhIGZyYW1lPwoKRnJhbWluZyBpcyB1c2VkIHRvIHNoYXBlIHRoZSBkYXRhIGluIGEgSlNPTi1MRCBkb2N1bWVudCwgdXNpbmcgYW4gZXhhbXBsZSBmcmFtZSBkb2N1bWVudCB3aGljaCBpcyB1c2VkIHRvIGJvdGggbWF0Y2ggdGhlIGZsYXR0ZW5lZCBkYXRhIGFuZCBzaG93IGFuIGV4YW1wbGUgb2YgaG93IHRoZSByZXN1bHRpbmcgZGF0YSBzaG91bGQgYmUgc2hhcGVkLiBNYXRjaGluZyBpcyBwZXJmb3JtZWQgYnkgdXNpbmcgcHJvcGVydGllcyBwcmVzZW50IGluIGluIHRoZSBmcmFtZSB0byBmaW5kIG9iamVjdHMgaW4gdGhlIGRhdGEgdGhhdCBzaGFyZSBjb21tb24gdmFsdWVzLiBNYXRjaGluZyBjYW4gYmUgZG9uZSBlaXRoZXIgdXNpbmcgYWxsIHByb3BlcnRpZXMgcHJlc2VudCBpbiB0aGUgZnJhbWUsIG9yIGFueSBwcm9wZXJ0eSBpbiB0aGUgZnJhbWUuIEJ5IGNoYWluaW5nIHRvZ2V0aGVyIG9iamVjdHMgdXNpbmcgbWF0Y2hlZCBwcm9wZXJ0eSB2YWx1ZXMsIG9iamVjdHMgY2FuIGJlIGVtYmVkZGVkIHdpdGhpbiBvbmUgYW5vdGhlci4KCkEgZnJhbWUgYWxzbyBpbmNsdWRlcyBhIGNvbnRleHQsIHdoaWNoIGlzIHVzZWQgZm9yIGNvbXBhY3RpbmcgdGhlIHJlc3VsdGluZyBmcmFtZWQgb3V0cHV0LgoKQnkgZGV0YWlsaW5nIGhvdyB0aGUgbWV0YWRhdGEgbXVzdCBiZSBzdHJ1Y3R1cmVkLCB3aGF0IGVsZW1lbnRzIG11c3QsIGNhbiwgYW5kIG1heSBub3QgYmUgaW5jbHVkZWQsIGFuZCB3aGF0IGRhdGEgdHlwZXMgbWF5IGJlIHVzZWQgZm9yIHRob3NlIGVsZW1lbnRzLCBzY2hlbWEgaGVscCBkZXZlbG9wZXJzIGNvbnN1bWluZyB0aGUgZGF0YSB0byBhbnRpY2lwYXRlIHRoZXNlIGRldGFpbHMgYW5kIHRodXMgYnVpbGQgYXBwbGljYXRpb25zIHdoaWNoIGtub3cgaG93IHRvIHByb2Nlc3MgdGhlbS4gRm9yIHRoZSBkYXRhIGNyZWF0b3IsIHZhbGlkYXRpb24gaXMgYSBjb252ZW5pZW50IHdheSB0byBjYXRjaCBkYXRhIGlucHV0IGVycm9ycyBhbmQgZW5zdXJlIGEgY29uc2lzdGVudCBkYXRhIHN0cnVjdHVyZS4KCmBgYHtyfQpsaWJyYXJ5KGpzb25sZCkKZnJhbWUgPC0ganNvbmxkX2ZyYW1lKCJjb2RlbWV0YS5qc29uIiwgZnJhbWUpCmZyYW1lCmBgYAoKCmBgYHtyfQpmcmFtZSA8LSAnewogICJAY29udGV4dCI6ICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vY29kZW1ldGEvY29kZW1ldGEvbWFzdGVyL2NvZGVtZXRhLmpzb25sZCIsCiAgIkBleHBsaWNpdCI6ICJ0cnVlIiwKICAiQHR5cGUiOiAiUGVyc29uIiwKICAiZ2l2ZW5OYW1lIjoge30sCiAgImZhbWlseU5hbWUiOiB7fQp9JwoKbWV0YSA8LSAKICBqc29ubGRfZnJhbWUoY29kZW1ldGEsIGZyYW1lKSAgJT4lCiAgZnJvbUpTT04oY29kZW1ldGEsIHNpbXBsaWZ5VmVjdG9yID0gRkFMU0UpICU+JSAKICBnZXRFbGVtZW50KCJAZ3JhcGgiKSAKCm1ldGFbWzFdXQpgYGAKCgojIyBDb250ZXh0cyBpbiBjcm9zc3dhbGtpbmcKCmh0dHBzOi8vZG9pLm9yZy8xMC41MDYzL3NjaGVtYS9jb2RlbWV0YS0yLjAgY29udGFpbnMgdGhlIHB1Ymxpc2hlZCBjb2RlbWV0YSBqc29uIGNvbnRleHQsIHJlZmVyZW5jaW5nIGNvZGVtZXRhIHZvY2FidWxhcnkgYmFjayB0byBmaWVsZHMgaW4gc2NoZW1hLm9yZy4gSG9zdGVkIG9ubGluZS4KCk1vcmUgaGVyZSBvbiB0aGUgcmVjb2duaXNlZCB0ZXJtcyBmcm9tICoqU2NoZW1hLm9yZyoqLCBhbmQgdGhlIGFkZGl0aW9uYWwgb25lcyBkZXZlbG9wZWQgYnkgdGhlICoqY29kZW1ldGEgcHJvamVjdCoqOiBodHRwczovL2NvZGVtZXRhLmdpdGh1Yi5pby90ZXJtcy8KCmBgYHtyfQpjb2RlbWV0YV9jb250ZXh0IDwtICJodHRwczovL2RvaS5vcmcvMTAuNTA2My9zY2hlbWEvY29kZW1ldGEtMi4wIgpjb250ZXh0IDwtIGpzb25saXRlOjpyZWFkX2pzb24oY29kZW1ldGFfY29udGV4dCkKY29udGV4dApgYGAKCmBgYHtyfQpzdHIoY29udGV4dCkKYGBgCgoKYGBge3J9CmNvbnRleHRbWzFdXVtbImlkIl1dIDwtIE5VTEwgIyMgYXZvaWQgY29sbGlzaW9ucyB3aXRoIEBpZApwcm9wZXJ0aWVzIDwtIG5hbWVzKGNvbnRleHRbWzFdXSkgJT4lIHNvcnQKcHJvcGVydGllcwpgYGAKCg==