W3C home > Mailing lists > Public > public-rdfjs@w3.org > July 2014

Re: LDApp Linked Data Stack + RDF-Ext + ... (RDF-Ext in detail)

From: bergi <bergi@axolotlfarm.org>
Date: Wed, 02 Jul 2014 14:11:48 +0200
Message-ID: <53B3F704.1050100@axolotlfarm.org>
To: public-rdfjs@w3.org
CC: Read-Write-Web <public-rww@w3.org>, WebID <public-webid@w3.org>
The announcing mail contained many links, but a lack of documentation.
In this mail I will explain the intension to create RDF-Ext and some
details how to use it.

There is already a number of RDF-Interfaces [1] implementations (webr3
[2], node-rdf [3], rdfstore [4]). If you look for a standard to handle
graphs, triples and nodes in JavaScript it's definitely RDF-Interfaces.
Beside the objects to model graphs, RDF-Interfaces specifies interfaces
for parsers and serializers.

>From my experience the most important use case is fetching a graph
document from a store (the Web is also a store!), parse it and filter
the triples to get the nodes your are interested in. RDF-Interfaces
doesn't cover the first step at all and the second step requires manual
work. So everybody had to implement the HTTP request (Ajax + Node.js)
and the mime type handling to find the right parser. RDF-Ext covers this
generic use case with the Store interface. The implementation comes
already with a LdpStore (works with any RESTful graph data), SparqlStore
and InMemoryStore. Of course the Store interface also offers methods to
write to a store. See the current spec [5] for details. During
development different implementations can be useful to switch from the
lightweight InMemoryStore to another one with persistence.

The definition of parsers and serializers in the RDF-Interfaces spec
don't support asynchronous implementations. But some serializations may
require additional HTTP requests. For example the JSON-LD context can be
given as an IRI. The RDF-Ext spec adds a done callback to the process
method of the parser, which is called after all triples have been
processed. The serialize method of the serializer interface has a new
callback which is called with the serialized data as the first argument.
The RDF-Ext spec is downwards compatible. If an implementation doesn't
require asynchronous calls both interfaces can be implemented. RDF-Ext
comes with a Turtle (based on N3.js [6]) and RDF/XML (based on RDFLib.js
[7]) parser, which supports both interfaces. The JSON-LD parser can be
only used using the new RDF-Ext interface. All serializers (NTriples,
JSON-LD) support both interfaces.

The Store interface is also a good base for other generic stuff like:

RDF-JSONify is a wrapper around a store to access (read/write) graph
data using JSON-LD objects. It doesn't matter if your persistence layer
comes with a SPARQL or LDP interface. The Store implementation handles
this. RDF-JSONify converts every graph to a JSON-LD object. The JSON-LD
context can be defined on the request level or for a defined path (Regex
or prefix). If you don't have to deal with very dynamic data models,
this maybe the easiest way to handle RDF data in JavaScript. It's the
perfect combination for frameworks like React and AngularJS. See the
LDApp [8] blog examples. There are implementations for both frameworks.

A SPARQL query engine on top of the Store interface is in a very early
stage. I plan to release it in some weeks. If you are interested and in
this project and you like to contribute, please contact me.
Contributions to the other modules are also very welcome.

[1] www.w3.org/TR/rdf-interfaces/
[2] https://github.com/webr3/rdf-interfaces
[3] https://github.com/Acubed/node-rdf
[4] https://github.com/antoniogarrote/rdfstore-js
[5] http://bergos.github.io/rdf-ext-spec/
[6] https://github.com/RubenVerborgh/N3.js
[7] https://github.com/linkeddata/rdflib.js
[8] http://bergos.github.io/ldapp-www/
Received on Wednesday, 2 July 2014 12:13:10 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 19:48:21 UTC