Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rdf-elixir/jsonld-ex
An implementation of JSON-LD for Elixir
https://github.com/rdf-elixir/jsonld-ex
elixir json-ld rdf
Last synced: 7 days ago
JSON representation
An implementation of JSON-LD for Elixir
- Host: GitHub
- URL: https://github.com/rdf-elixir/jsonld-ex
- Owner: rdf-elixir
- License: mit
- Created: 2017-06-25T00:13:24.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-12-18T13:17:40.000Z (11 months ago)
- Last Synced: 2024-05-21T19:17:17.639Z (6 months ago)
- Topics: elixir, json-ld, rdf
- Language: Elixir
- Homepage: https://rdf-elixir.dev/
- Size: 450 KB
- Stars: 68
- Watchers: 10
- Forks: 16
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- freaking_awesome_elixir - Elixir - An implementation of the [JSON-LD](http://www.w3.org/TR/json-ld/) standard for [RDF.ex](https://github.com/marcelotto/rdf-ex). (Domain-specific language)
README
# JSON-LD.ex
[![Hex.pm](https://img.shields.io/hexpm/v/json_ld.svg?style=flat-square)](https://hex.pm/packages/json_ld)
[![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/json_ld/)
[![Coverage Status](https://coveralls.io/repos/github/rdf-elixir/jsonld-ex/badge.svg?branch=master)](https://coveralls.io/github/rdf-elixir/jsonld-ex?branch=master)
[![Total Download](https://img.shields.io/hexpm/dt/json_ld.svg)](https://hex.pm/packages/json_ld)
[![License](https://img.shields.io/hexpm/l/json_ld.svg)](https://github.com/rdf-elixir/jsonld-ex/blob/master/LICENSE.md)[![ExUnit Tests](https://github.com/rdf-elixir/jsonld-ex/actions/workflows/elixir-build-and-test.yml/badge.svg)](https://github.com/rdf-elixir/jsonld-ex/actions/workflows/elixir-build-and-test.yml)
[![Dialyzer](https://github.com/rdf-elixir/jsonld-ex/actions/workflows/elixir-dialyzer.yml/badge.svg)](https://github.com/rdf-elixir/jsonld-ex/actions/workflows/elixir-dialyzer.yml)
[![Quality Checks](https://github.com/rdf-elixir/jsonld-ex/actions/workflows/elixir-quality-checks.yml/badge.svg)](https://github.com/rdf-elixir/jsonld-ex/actions/workflows/elixir-quality-checks.yml)An implementation of the [JSON-LD] standard for Elixir and [RDF.ex].
The API documentation can be found [here](https://hexdocs.pm/json_ld/). For a guide and more information about RDF.ex and it's related projects, go to .
## Features
- fully conforming JSON-LD 1.0 API processor
- JSON-LD reader/writer for [RDF.ex]
- tests of the [JSON-LD test suite][] (see [here](https://github.com/rdf-elixir/jsonld-ex/wiki/JSON-LD.ex-implementation-report) for a detailed status report)## TODO
- [JSON-LD Framing]
- [JSON-LD 1.1] support## Installation
The [JSON-LD.ex](https://hex.pm/packages/json_ld) Hex package can be installed as usual, by adding `json_ld` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[{:json_ld, "~> 0.3"}]
end
```## Usage
### Expand a document
```elixir
"""
{
"@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
```elixir
[%{"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
```elixir
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
```elixir
%{"@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.
```elixir
dataset = JSON.LD.read_file!("file.jsonld")
JSON.LD.write_file!(dataset, "file.jsonld")
```When a context is provided via the `:context` option (as a map, a `RDF.PropertyMap` or a string with a URL to a remote context), the document gets automatically compacted on serialization.
```elixir
JSON.LD.write_file!(dataset, "file.jsonld", context: %{ex: "https://example.com/"})
JSON.LD.write_file!(dataset, "file.jsonld", context: "https://schema.org/")
```## Pretty printing
Pretty printing is possible on all writer functions with all the formatter options of [Jason](https://hexdocs.pm/jason/Jason.Formatter.html#pretty_print/2), the underlying JSON encoder, to which the given options are passed through.
```elixir
JSON.LD.write_file!(dataset, "file.jsonld", pretty: true)
JSON.LD.write_string(dataset, "file.jsonld", pretty: [indent: "\t"])
```## Contributing
see [CONTRIBUTING](CONTRIBUTING.md) for details.
## Consulting
If you need help with your Elixir and Linked Data projects, just contact [NinjaConcept](https://www.ninjaconcept.com/) via .
## License and Copyright
(c) 2017-present Marcel Otto. MIT Licensed, see [LICENSE](LICENSE.md) for details.
[RDF.ex]: https://hex.pm/packages/rdf
[JSON-LD]: http://www.w3.org/TR/json-ld/ "JSON-LD 1.0"
[JSON-LD 1.1]: https://json-ld.org/spec/latest/json-ld/ "JSON-LD 1.1"
[JSON-LD API]: http://www.w3.org/TR/json-ld-api/ "JSON-LD 1.0 Processing Algorithms and API"
[JSON-LD Framing]: http://json-ld.org/spec/latest/json-ld-framing/
[JSON-LD test suite]: http://json-ld.org/test-suite/