Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kwijibo/changeset-sparql
applies a changeset via SPARQL Update
https://github.com/kwijibo/changeset-sparql
changeset javascript rdf sparql
Last synced: 11 days ago
JSON representation
applies a changeset via SPARQL Update
- Host: GitHub
- URL: https://github.com/kwijibo/changeset-sparql
- Owner: kwijibo
- License: gpl-3.0
- Created: 2017-04-04T19:50:25.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-12-17T09:39:55.000Z (about 7 years ago)
- Last Synced: 2024-12-28T03:26:22.754Z (26 days ago)
- Topics: changeset, javascript, rdf, sparql
- Language: JavaScript
- Size: 27.3 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# changeset-sparql
Applies a changeset via SPARQL Update
/
```
npm install changeset-sparql
```#### Usage:
First we make a changeset:
```
const EX = 'http://example.info/'
const changeset = {
// an array of triples/quads to add
add: [{s: EX+'123', p: EX+'count', o_value: 0, o_type:'literal', o_datatype: EX+'integer', g: EX+'graphs/graph-name'}]
// triples/quads to remove (changeset will fail if they don't exist)
, remove: [{s: EX+'987', p: EX+'message', o_value: "Hello", o_type:'literal', o_lang: 'en-gb'}]
// the URIs of the latest changesets for each subject we want to change
, previous: ["urn:hash:sha1:jkhjkhkj2kjh3", "urn:hash:sha1:mnwejkljh7898c"],}
```Now we define two functions, one to do SPARQL queries, and one to do SPARQL updates.
Each function should take two arguments: a query/update and a "Node-style" (`(err, data)=>`) callback
```
const request = require('request')const endpoint = 'http://localhost:3030/TestData'
const query = (q, callback) => request({
url: endpoint+'/sparql',
body: q,
method: 'POST',
headers: {
'Accept': 'application/sparql-results+json',
'Content-type': 'application/sparql-query'
}
}, (err, data)=> err? callback(err) : callback(null, JSON.parse(data.body)))const update = (q, callback) => request({
url: endpoint+'/update',
body: q,
method: 'POST',
headers: {
'Accept': 'application/sparql-results+json',
'Content-type': 'application/sparql-update'
}
}, callback)```
Now we pass those functions to `changsetSparql`, and get back a function that accepts a changeset, and a dictionary of callbacks:
```
const changsetSparql = require('changeset-sparql')(query, update)
``````
changsetSparql(changeset, {
error: console.error,
rejected: console.error,
ok: console.log
})```
- `error` Gets called with an error if there are problems running the updates or queries (ie: if `query` or `update` call the callback with an error). You may want to retry if this happens.
- `rejected` gets called with an error message if the changeset was rejected. This happens if:
- the `previous` changeset URI given wasn't the latest changeset for that resource
- any `delete` triples/quads don't exist in the dataset.
You should not retry, but you may want to alter the changeset and resubmit.
- `ok` Gets called with the URI of the changeset if:
- The update was successfully applied
- The changeset was already applied
### Changeset Object Specification- *add*: optional, must be an Array of quads to be added to the dataset
- *remove*: optional, must be an Array of quads to be removed from the dataset
- *previous*: optional, must be an Array of URIs of latest changesets of each _subject_#### Triple/Quad Specification
(format of the objects in the `add` and `remove` Arrays)
- *s*: required, URI (subject)
- *p*: required, URI (predicate/property)
- *o_value*: required (object value)
- *o_type*: required, must be `uri` OR `literal`
- *o_lang*: optional, must be valid language tag
- *o_datatype*: optional, URI
- *g*: optional, URI (graph)