Works great. Thanks Andy!
On Thu, Oct 4, 2012 at 9:36 AM, Andy Seaborne <[email protected]> wrote: > On 03/10/12 20:24, Stephen Allen wrote: >> >> All, >> >> So I'm trying to test the streaming SPARQL Update changes I've done in >> ARQ and Fuseki. I've created a class called GraphStoreNull, which >> implements the GraphStore interface. It basically throws away all >> quads that are added/removed and always answers with a null iterator >> when querying. I want to use it for stress testing the streaming >> implementation by sending in a bunch of massively large SPARQL Update >> requests (which jena-client can generate and stream over HTTP). >> >> Anyway, the stumbling block I'm running into is how to create a config >> file for Fuseki to use this class as the basis for a dataset. I can't >> seem to wrap my head around the whole Assembler functionality. I've >> got a config that looks like this: >> >> ===================== >> @prefix : <#> . >> @prefix fuseki: <http://jena.apache.org/fuseki#> . >> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . >> >> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . >> @prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> . >> @prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> . >> >> [] rdf:type fuseki:Server ; >> fuseki:services ( >> <#service1> >> ) . >> >> <#service1> rdf:type fuseki:Service ; >> fuseki:name "ds" ; >> fuseki:serviceQuery "sparql" ; >> fuseki:serviceQuery "query" ; >> fuseki:serviceUpdate "update" ; >> fuseki:serviceUpload "upload" ; >> fuseki:serviceReadWriteGraphStore "data" ; >> fuseki:serviceReadGraphStore "get" ; >> fuseki:dataset <#emptyDataset> ; >> . >> >> <#emptyDataset> rdf:type ja:RDFDataset . # this seems to make it use >> an in-memory model >> >> ==================== >> >> What do I need to specify to make it use >> "com.hp.hpl.jena.sparql.modify.GraphStoreNull" as the backing store >> for #service1? > > > The internals of the assemblers are not very easy to follow. They only get > touched once in a blue moon so the knowledge is in obscure bits of code. > > You need to do the following > > 1/ Write an assembler for the new thing > 2/ register it. > 3/ Add a rdfs:subClassOf relationship > > See DatasetAssembler for an example > > == Write an assembler > > public class DatasetNullAssembler extends AssemblerBase { > @Override > public Object open(Assembler a, Resource root, Mode mode) > { > return new GraphStoreNull() > } > } > > == Register an assembler > > See AssemblerUtils.registerWith > > has the ARQ specific registrations. > > ( I have just changed the name from "register" to make it accurate :-) > > == subclass > > Put this in the description (it should be possible to do this in code > somewhere but I can't see where - if anyone finds out please say, it would > be good to have elsewhere as well.). > > ja:DatasetNull rdfs:subClassOf ja:RDFDataset . > > == Testing > > I did sparql --desc desc.ttl 'SELECT * { ?s ?p ?o }' and got an empty > result. > > I didn't test with Fuseki itself. > > I have prodded Jenkins to do a complete developer build so it will be > propagating to Fuseki in the next hour or so. > > > -- desc.ttl > -------------------- > > @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . > @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . > @prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> . > > ja:DatasetNull rdfs:subClassOf ja:RDFDataset . > > <#emptyDataset> rdf:type ja:DatasetNull . > -------------------- > > > You don't need the ja:loadClass magic code to bring in custom code (as TDB > does currently) because this is built into ARQ. > > [] ja:loadClass "com.hp.hpl.jena.tdb.TDB" . > tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset . > tdb:GraphTDB rdfs:subClassOf ja:Model . > > ------------------------ > Before you do this, you might like to "svn update". Having had to remember > how this works, I added what you might need at least as a start. Having > done it, I might as well commit the changes. > > Andy > >> >> -Stephen >> >
