.github/workflows | ||
lib | ||
priv/plts | ||
test | ||
.editorconfig | ||
.formatter.exs | ||
.gitignore | ||
.iex.exs | ||
CHANGELOG.md | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
LICENSE.md | ||
mix.exs | ||
mix.lock | ||
README.md | ||
VERSION |
JSON-LD.ex
An implementation of the JSON-LD standard for Elixir and RDF.ex.
The API documentation can be found here. For a guide and more information about RDF.ex and it's related projects, go to https://rdf-elixir.dev.
Features
- fully conforming JSON-LD API processor
- JSON-LD reader/writer for RDF.ex
- tests of the JSON-LD test suite (see here for a detailed status report)
TODO
- JSON-LD Framing
- JSON-LD 1.1 support
Installation
The JSON-LD.ex Hex package can be installed as usual, by adding json_ld
to your list of dependencies in mix.exs
:
def deps do
[{:json_ld, "~> 0.3"}]
end
Usage
Expand a document
"""
{
"@context":
{
"name": "http://xmlns.com/foaf/0.1/name",
"homepage": {
"@id": "http://xmlns.com/foaf/0.1/homepage",
"@type": "@id"
}
},
"name": "Manu Sporny",
"homepage": "http://manu.sporny.org/"
}
"""
|> Jason.decode!
|> JSON.LD.expand
produces
[%{"http://xmlns.com/foaf/0.1/homepage" => [%{"@id" => "http://manu.sporny.org/"}],
"http://xmlns.com/foaf/0.1/name" => [%{"@value" => "Manu Sporny"}]}]
Compact a document
context = Jason.decode! """
{
"@context": {
"name": "http://xmlns.com/foaf/0.1/name",
"homepage": {
"@id": "http://xmlns.com/foaf/0.1/homepage",
"@type": "@id"
}
}
}
"""
"""
[
{
"http://xmlns.com/foaf/0.1/name": [ "Manu Sporny" ],
"http://xmlns.com/foaf/0.1/homepage": [
{
"@id": "http://manu.sporny.org/"
}
]
}
]
"""
|> Jason.decode!
|> JSON.LD.compact(context)
produces
%{"@context" => %{
"homepage" => %{
"@id" => "http://xmlns.com/foaf/0.1/homepage",
"@type" => "@id"},
"name" => "http://xmlns.com/foaf/0.1/name"
},
"homepage" => "http://manu.sporny.org/",
"name" => "Manu Sporny"}
RDF Reader and Writer
JSON-LD.ex can be used to serialize or deserialize RDF graphs by using it as a RDF.ex reader and writer.
dataset = JSON.LD.read_file!("file.jsonld")
JSON.LD.write_file!(dataset, "file.jsonld")
Pretty printing
Pretty printing is possible on all writer functions with all of the formatter options of Jason, the underlying JSON encoder, to which the given options are passed through.
JSON.LD.write_file!(dataset, "file.jsonld", pretty: true)
JSON.LD.write_string(dataset, "file.jsonld", pretty: [indent: "\t"])
Contributing
see CONTRIBUTING for details.
Consulting
If you need help with your Elixir and Linked Data projects, just contact NinjaConcept via contact@ninjaconcept.com.
License and Copyright
(c) 2017-present Marcel Otto. MIT Licensed, see LICENSE for details.