linked-data-registry v0.11.0
linked data registry
A CouchDB powered registry for linked data.
- documents are served as JSON-LD or JSON interpreded as JSON-LD and using the semantic of schema.org and hydra (but favoring schema.org/Action over hydra when possible)
- compatible with linked data fragments (triple pattern fragment)
A client is available here.
Registry API
GET /
Return the JSON-LD context used by the registry.
GET /about
Return a JSON-LD document describing the registry and its potential actions using schema.org.
PUT /users/{username}
Register an user. A user has to be a Person.
request body:
{
"@context": "https://dcat.io",
"@id": "users/{username}"
"@type": "Person",
"password": "secret"
"name": "John Markup",
"email": "mailto:johnmarkup@example.com",
...
}response body:
{
"@context": "https://dcat.io",
"@type": "RegisterAction",
"actionStatus": "CompletedActionStatus",
"agent": "users/{username}",
"object": ""
}Note: relative URLs are relative to a @base of
https://dcat.io specified in the
context.
DELETE /users/{username}
Unregister an user.
required header:
- Authorization
response body:
{
"@context": "https://dcat.io",
"@type": "UnRegisterAction",
"actionStatus": "CompletedActionStatus",
"agent": {
"@type": "Person",
"email": "mailto:johnmarkup@example.com
},
"object": ""
}GET /users/{username}
Get a user public profile.
PUT /{namespace}
Create a new JSON-LD document of
@id {namespace}.
If a version property is specified in the
document, the document will be versionned that is each update will
require a new version value to be published. When appropriate version
number SHOULD follow semantic versionning.
If a version property is not specified, the
new document will replace the previous version irreversibly.
required header:
- Authorization
request body:
{
"@context": "https://dcat.io",
"@id": "{namespace}",
...
}Note to be valid a document need at least:
- a
@contextof valuehttps://dcat.io - an
@id
response body:
{
"@context": "https://dcat.io",
"@type": "CreateAction",
"actionStatus": "CompletedActionStatus",
"agent": "users/{username}",
"result": "namespace"
}DELETE /{namespace}{?version}
Delete a document of @id {namespace} and version
{version}. If version is omitted all the versions will be
deleted.
required header:
- Authorization
response body:
{
"@context": "https://dcat.io",
"@type": "DeleteAction",
"actionStatus": "CompletedActionStatus",
"agent": "users/john",
"object": "{namespace}{?version}"
}GET /{namespace}/{+pathorurl}{?version}
Get a JSON-LD document of @id
{namespace} or a node of this document of @id
{namespace}/{pathorurl} or {pathorurl}. In the later case,
{pathorurl} has to be an absolute URL encoded as an Uniform
Resource Identifier (URI) component.
A specific version can be specified using a query string parameter
version whose value is properly encoded as a Uniform Resource
Identifier (URI) component. In case the document is versionned
following Semantic Versioning, a range (e.g
<0.0.1) can be specified as version.
If {?version} is omitted, the latest version of the document is
returned.
Depending on the Accept header, documents retrieved from the
registry can be served as
JSON-LD
(expanded, compacted or flattened) or,
JSON interpreted as JSON-LD.
GET /maintainers/ls/{namespace}
List the maintainers of a JSON-LD document with @id {namespace}.
response body:
{
"@context": "https://dcat.io",
"@id": "{namespace}",
"accountablePerson": [
{ "@id": "users/john", "@type": "Person", "name": "John Markup", "email": "mailto:user@domain.io" },
...
]
}POST /maintainers/add/{username}/{namespace}
Add a maintainer of @id users/{username} to the document of @id {namespace}.
required header:
- Authorization
response body:
{
"@context": "https://dcat.io",
"@type": "GiveAction",
"actionStatus": "CompletedActionStatus",
"agent": "users/{me}",
"object": "{namespace}",
"recipient": "users/{username}"
}POST /maintainers/rm/{username}/{namespace}
Remove a maintainer of @id users/{username} to the document of @id {namespace}.
required header:
- Authorization
response body:
{
"@context": "https://dcat.io",
"@type": "TakeAction",
"actionStatus": "CompletedActionStatus",
"agent": "users/{me}",
"object": "{namespace}",
"recipient": "users/{username}"
}Raw data storage API
PUT /r/{sha1}
Publish a resource whose SHA-1 message digest (encoded in hex) is {sha1}.
required headers:
- Authorization
- Content-MD5
- Content-Type
- Content-Length
- Encoding (if any)
response body:
{
"@context": "https://dcat.io",
"@type": "CreateAction",
"actionStatus": "CompletedActionStatus",
"agent": "users/{username}",
"result": "r/{sha1}"
}GET /r/{sha1}
Download raw data.
Search API
GET /search/{?keywords}
Search JSON-LD documents by keywords.
Tests
You need couchdb running with an admin defined in env.sh (COUCH_ADMIN_USER and COUCH_ADMIN_PASS) (see env.sh)
couchdb
source env.sh
npm run init
npm run push
npm start
npm testLicense
Apache 2.0.
