You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Rob Stewart <ro...@googlemail.com> on 2011/05/17 02:25:52 UTC
Joseki: SPARQL Update not persisting
Hi,
I'm currently having an issue with Joseki. I have created a mySql
database, and added 1 Jena model, with a small number of triples.
I can SPARQL query them with the use of the sparql.html form, and I
receive all the of the results that I would expect. My problem is with
SPARQL Update, through the use of the update.html form.
I can:
1) CREATE GRAPH's
2) INSERT DATA INTO these graphs
3) Go to the sparql.html form, and query these inserted triples, in
each of these graphs. So - the data is going into memory.
However - I am monitoring the mySql database as I run the INSERT INTO
calls, and no triples are added in `jena_g1t1_stmt', and no graphs are
added in `jena_graph'. Indeed, when I kill Joseki and restart it, all
of my inserted triples dissapear, and cannot be found with a SPARQL
query. Perhaps this is down to an incorrect configuration file? Here
it is, minus sensitive information:
%%%%%%%%%%%%%%
<#server> rdf:type joseki:Server ;
# Example of some initialization code.
joseki:initialization
[ module:implementation
[ module:className <java:org.joseki.util.ServiceInitSimple> ;
rdfs:label "Example initializer" ; ]
] ;
.
<#mydata> rdf:type ja:RDFDataset ;
rdfs:label "DSpaceImage" ;
ja:defaultGraph _:ProfileDatabase
.
_:ProfileDatabase rdf:type ja:SDBModel ;
ja:connection
[
ja:dbType "MySQL" ;
ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true" ;
ja:dbUser "" ;
ja:dbPassword "" ;
ja:dbClass "com.mysql.jdbc.Driver" ;
] ;
ja:modelName "UserProfiles"
.
<#service1>
rdf:type joseki:Service ;
rdfs:label "service point" ;
joseki:serviceRef "sparql" ; # web.xml must route this name to Joseki
joseki:processor joseki:ProcessorSPARQL ;
joseki:dataset <#mydata> ;
.
<#serviceUpdate>
rdf:type joseki:Service ;
rdfs:label "SPARQL/Update" ;
joseki:serviceRef "update/service" ;
# dataset part
joseki:dataset <#mydata>;
# Service part.
# This processor will not allow either the protocol,
# nor the query, to specify the dataset.
joseki:processor joseki:ProcessorSPARQLUpdate
.
<#serviceRead>
rdf:type joseki:Service ;
rdfs:label "SPARQL" ;
joseki:serviceRef "sparql/read" ;
# dataset part
joseki:dataset <#mydata> ; ## Same dataset
# Service part.
# This processor will not allow either the protocol,
# nor the query, to specify the dataset.
joseki:processor joseki:ProcessorSPARQL_FixedDS ;
.
joseki:ProcessorSPARQL
rdfs:label "General SPARQL processor" ;
rdf:type joseki:Processor ;
module:implementation joseki:ImplSPARQL ;
# Parameters - this processor processes FROM/FROM NAMED
joseki:allowExplicitDataset "true"^^xsd:boolean ;
joseki:allowWebLoading "true"^^xsd:boolean ;
## And has no locking policy (it loads data each time).
## The default is mutex (one request at a time)
joseki:lockingPolicy joseki:lockingPolicyNone ;
.
joseki:ProcessorSPARQL_FixedDS
rdfs:label "SPARQL processor for fixed datasets" ;
rdf:type joseki:Processor ;
module:implementation joseki:ImplSPARQL ;
# This processor does not accept queries with FROM/FROM NAMED
joseki:allowExplicitDataset "false"^^xsd:boolean ;
joseki:allowWebLoading "false"^^xsd:boolean ;
joseki:lockingPolicy joseki:lockingPolicyMRSW ;
.
joseki:ProcessorSPARQLUpdate
rdfs:label "SPARQL Update processor" ;
rdf:type joseki:Processor ;
module:implementation joseki:ImplSPARQLUpdate ;
joseki:lockingPolicy joseki:lockingPolicyMRSW ;
.
joseki:ImplSPARQL
rdf:type joseki:ServiceImpl ;
module:className
<java:org.joseki.processors.SPARQL> .
joseki:ImplSPARQLUpdate
rdf:type joseki:ServiceImpl ;
module:className
<java:org.joseki.processors.SPARQLUpdate> .
%%%%%%%%%%%%%%%
Anything that I've missed? I'm also not sure whether to opt for SDB or
TDB, and what the implications of either, are?
--
Rob Stewart
Re: Joseki: SPARQL Update not persisting
Posted by Andy Seaborne <an...@epimorphics.com>.
On 22/05/11 12:42, Rob Stewart wrote:
...
> My only issue now is that the Joseki connection to my database becomes
> idle and keeps timing out, with this error message:
> No operations allowed after connection closed.Connection was
> implicitly closed by the driver.
>
> Previously, I used:
> ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true" ;
>
> Is there an alternative I can use in the sdb:sdbHost property, to
> keep the connection alive, or auto-reconnect?
>
> Many thanks,
>
> --
> Rob Stewart
You can use ?autoReconnect=true in the URL - another way is to make a
simple query call on a regular (hourly?) basis just to keep the
connection alive (e.g. SELECT * { <http://example/junk>
<http://example/junk> <http://example/junk> }).
(Outside Joseki, a third way is to use a connection pool - apparently
some of the connection pool systems know about this MySQL peculiarity
and manage it, only returning usable connections).
Andy
Re: Joseki: SPARQL Update not persisting
Posted by Rob Stewart <ro...@googlemail.com>.
Great! I finally have it all working.
Here's the crucial parts of the joseki-config.ttl
%%%%%%%%%%
[] ja:loadClass "com.hp.hpl.jena.sdb.SDB" .
sdb:DatasetStore rdfs:subClassOf ja:RDFDataset .
sdb:Model rdfs:subClassOf ja:Model .
<#mydata> rdf:type sdb:DatasetStore ;
joseki:poolSize 5 ; # Number of concurrent connections
allowed to this dataset.
sdb:store <#store> .
<#store> rdf:type sdb:Store ;
rdfs:label "SDB";
sdb:layout "layout2";
sdb:connection
[ rdf:type sdb:SDBConnection;
sdb:sdbType "mysql" ;
sdb:sdbHost "localhost:3306" ;
sdb:sdbUser "" ; #omitted
sdb:sdbPassword "" ; #omitted
sdb:sdbName "" ; #omitted
sdb:driver "com.mysql.jdbc.Driver" ;
]
.
%%%%%%%%%%
One of the issues I had was that in my mySql database, I was using
Jena models, with tables such as jena-stmts, jena-models etc... Now
that I am using SDB datastore, I now have 4 mySql tables: Nodes,
Prefixes, Quads, Triples (which feels much nicer).
I used this Java to setup an SDB datastore:
%%%
String className = "com.mysql.jdbc.Driver";
Class.forName(className); // Load the Driver
String DB_URL = "jdbc:mysql://localhost/DB"; // URL of database
String DB_USER = ""; // database user id
String DB_PASSWD = ""; // database password
SDBConnection conn = new SDBConnection(DB_URL, DB_USER, DB_PASSWD);
StoreDesc storeDesc = new StoreDesc(LayoutType.LayoutTripleNodesHash,
DatabaseType.MySQL) ;
Store store = SDBFactory.connectStore(conn,storeDesc);
store.getTableFormatter().create();
store.close();
%%%
My only issue now is that the Joseki connection to my database becomes
idle and keeps timing out, with this error message:
No operations allowed after connection closed.Connection was
implicitly closed by the driver.
Previously, I used:
ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true" ;
Is there an alternative I can use in the sdb:sdbHost property, to
keep the connection alive, or auto-reconnect?
Many thanks,
--
Rob Stewart
On 19 May 2011 09:11, Andy Seaborne <an...@epimorphics.com> wrote:
> TDB does not use a relational database - did you mean SDB?
>
> There's are examples of both in the Joseki download.
>
> TDB --------------
>
> [] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
> tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
> tdb:GraphTDB rdfs:subClassOf ja:Model .
>
> ## ---- A whole dataset managed by TDB
> <#mydata> rdf:type tdb:DatasetTDB ;
> tdb:location "TDB" ;
> .
>
> SDB --------------
>
> [] ja:loadClass "com.hp.hpl.jena.sdb.SDB" .
> sdb:DatasetStore rdfs:subClassOf ja:RDFDataset .
> sdb:Model rdfs:subClassOf ja:Model .
>
> <#mydata> rdf:type sdb:DatasetStore ;
> ## Number of concurrent connections allowed to this dataset.
> joseki:poolSize 2 ;
> sdb:store <#store> .
>
> <#store> rdf:type sdb:Store ;
> rdfs:label "SDB" ;
> sdb:layout "layout2" ;
> sdb:connection
> [ rdf:type sdb:SDBConnection ;
> ## sdb:sdbType "postgresql" ;
> ## sdb:sdbHost "localhost" ;
> ## sdb:sdbName "SDB" ;
>
> # Using Apache Derby
> sdb:sdbHost "localhost" ;
> sdb:sdbType "derby" ;
> sdb:sdbName "DB/Derby" ;
> ]
> .
> -------------
>
> You want <#mydata>, as in your original Joseki config file, connecting to
> one of the places I have used it above.
>
> You do not want a ja:RDFDataset and identifying a specific model.
>
> Andy
>
>
> On 17/05/11 18:34, Rob Stewart wrote:
>>
>> Hi Andy,
>>
>> Unfortunately, joseki errors are very cryptic e.g.:
>>
>> WARN [http-8080-2] (Servlet.java:183) - Internal server error
>> java.lang.NullPointerException
>> at org.joseki.DatasetDesc.acquireDataset(DatasetDesc.java:78)
>>
>> I am now trying to use TDB as you recommended, but with no luck. My
>> configuration:
>>
>> %%%%%%%%%%
>> [] ja:loadClass "com.hp.hpl.jena.tdb.TDB" . ## Initialize TDB.
>> tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
>> tdb:GraphTDB rdfs:subClassOf ja:Model .
>> <#dataset>
>> a ja:RDFDataset;
>> ja:defaultGraph [
>> a ja:InfModel;
>> ja:baseModel [
>> a tdb:GraphTDB;
>> ja:connection
>> [
>> ja:dbType "MySQL" ;
>> ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true"
>> ;
>> ja:dbUser "" ;
>> ja:dbPassword "" ;
>> ja:dbClass "com.mysql.jdbc.Driver" ;
>> ] ;
>> ja:modelName "UserProfiles"
>> ];
>> ];
>> .
>>
>> <#service3>
>> rdf:type joseki:Service ;
>> rdfs:label "SPARQL-TDB" ;
>> joseki:serviceRef "sparql" ; # web.xml must route this name to Joseki
>> joseki:dataset<#dataset> ;
>> joseki:processor joseki:ProcessorSPARQL_FixedDS ;
>> .
>>
>> <#serviceUpdate>
>> rdf:type joseki:Service ;
>> rdfs:label "SPARQL/Update" ;
>> joseki:serviceRef "update/service" ;
>> # dataset part
>> joseki:dataset<#dataset>;
>> # Service part.
>> # This processor will not allow either the protocol,
>> # nor the query, to specify the dataset.
>> joseki:processor joseki:ProcessorSPARQLUpdate
>> .
>>
>> %%%%%%%%
>>
>> I'm not overly familiar with ttl syntax, but the errors given from
>> Joseki merely say "NullPointException", without reference to the
>> problem... ttl syntax? Database error? ja:modelName not found?
>>
>>
>> --
>> Rob
>>
>>
>>
>>
>>
>>
>>
>>
>> On 17 May 2011 11:13, Andy Seaborne<an...@epimorphics.com> wrote:
>>>
>>> Sorry my misreading - but you are stil putting one SDB model into a
>>> general
>>> dataset. If you want to create new models, yo uneed to use a dataset.
>>> (untested):
>>>
>>> joseki:dataset<#mydata> ;
>>>
>>> <#mydata> rdf:type sdb:DatasetStore ;
>>> sdb:store<#store> .
>>>
>>> <#store> rdf:type sdb:Store ;
>>> rdfs:label "SDB" ;
>>> sdb:layout "layout2" ;
>>> sdb:connection ....
>>>
>>>
>>> (From joseki-config-sdb.ttl)
>>>
>>> http://openjena.org/wiki/SDB/Dataset_Description
>>>
>>> Andy
>>>
>>>
>>> On 17/05/11 10:42, Rob Stewart wrote:
>>>>
>>>> Hi Andy,
>>>>
>>>> Thanks for your input. I can't see in my configuration where I am
>>>> pointing to "RDB" at all... Could you highlight my error.
>>>>
>>>> Looking at the fragment below, I would have thought that I am indeed
>>>> using
>>>> SDB ?
>>>> %%%%%
>>>> _:ProfileDatabase rdf:type ja:SDBModel ;
>>>> ja:connection
>>>> [
>>>> ja:dbType "MySQL" ;
>>>> ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true"
>>>> ;
>>>> ja:dbUser "" ;
>>>> ja:dbPassword "" ;
>>>> ja:dbClass "com.mysql.jdbc.Driver" ;
>>>> ] ;
>>>> ja:modelName "UserProfiles"
>>>> .
>>>> %%%%
>>>> thanks,
>>>>
>>>> Rob
>>>>
>>>> On 17 May 2011 10:28, Andy Seaborne<an...@epimorphics.com>
>>>> wrote:
>>>>>
>>>>> Hi Rob,
>>>>>
>>>>> You have one model backed by Jena's old database layer (AKA RDB) in
>>>>> MySQL.
>>>>> That model is put into a general purpose, in-memory dataset.
>>>>>
>>>>> Any further models you create will be in-memory, not in MySQL.
>>>>>
>>>>> You need to use SDB or TDB to get a persistent dataset, rather than a
>>>>> single
>>>>> persistent model.
>>>>>
>>>>> Currently, DBS provides transactions; TDB scales better.
>>>>>
>>>>> Fuseki is "Joseki4" and may be easier to use for you.
>>>>>
>>>>> Andy
>>>>>
>>>>> On 17/05/11 01:25, Rob Stewart wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I'm currently having an issue with Joseki. I have created a mySql
>>>>>> database, and added 1 Jena model, with a small number of triples.
>>>>>>
>>>>>> I can SPARQL query them with the use of the sparql.html form, and I
>>>>>> receive all the of the results that I would expect. My problem is with
>>>>>> SPARQL Update, through the use of the update.html form.
>>>>>>
>>>>>> I can:
>>>>>> 1) CREATE GRAPH's
>>>>>> 2) INSERT DATA INTO these graphs
>>>>>> 3) Go to the sparql.html form, and query these inserted triples, in
>>>>>> each of these graphs. So - the data is going into memory.
>>>>>>
>>>>>> However - I am monitoring the mySql database as I run the INSERT INTO
>>>>>> calls, and no triples are added in `jena_g1t1_stmt', and no graphs are
>>>>>> added in `jena_graph'. Indeed, when I kill Joseki and restart it, all
>>>>>> of my inserted triples dissapear, and cannot be found with a SPARQL
>>>>>> query. Perhaps this is down to an incorrect configuration file? Here
>>>>>> it is, minus sensitive information:
>>>>>>
>>>>>> %%%%%%%%%%%%%%
>>>>>>
>>>>>> <#server> rdf:type joseki:Server ;
>>>>>> # Example of some initialization code.
>>>>>> joseki:initialization
>>>>>> [ module:implementation
>>>>>> [ module:className<java:org.joseki.util.ServiceInitSimple>
>>>>>> ;
>>>>>> rdfs:label "Example initializer" ; ]
>>>>>> ] ;
>>>>>> .
>>>>>>
>>>>>> <#mydata> rdf:type ja:RDFDataset ;
>>>>>> rdfs:label "DSpaceImage" ;
>>>>>> ja:defaultGraph _:ProfileDatabase
>>>>>> .
>>>>>>
>>>>>> _:ProfileDatabase rdf:type ja:SDBModel ;
>>>>>> ja:connection
>>>>>> [
>>>>>> ja:dbType "MySQL" ;
>>>>>> ja:dbURL
>>>>>> "jdbc:mysql://localhost/MyDB?autoReconnect=true"
>>>>>> ;
>>>>>> ja:dbUser "" ;
>>>>>> ja:dbPassword "" ;
>>>>>> ja:dbClass "com.mysql.jdbc.Driver" ;
>>>>>> ] ;
>>>>>> ja:modelName "UserProfiles"
>>>>>> .
>>>>>>
>>>>>> <#service1>
>>>>>> rdf:type joseki:Service ;
>>>>>> rdfs:label "service point" ;
>>>>>> joseki:serviceRef "sparql" ; # web.xml must route this name to
>>>>>> Joseki
>>>>>> joseki:processor joseki:ProcessorSPARQL ;
>>>>>> joseki:dataset<#mydata> ;
>>>>>> .
>>>>>>
>>>>>> <#serviceUpdate>
>>>>>> rdf:type joseki:Service ;
>>>>>> rdfs:label "SPARQL/Update" ;
>>>>>> joseki:serviceRef "update/service" ;
>>>>>> # dataset part
>>>>>> joseki:dataset<#mydata>;
>>>>>> # Service part.
>>>>>> # This processor will not allow either the protocol,
>>>>>> # nor the query, to specify the dataset.
>>>>>> joseki:processor joseki:ProcessorSPARQLUpdate
>>>>>> .
>>>>>>
>>>>>> <#serviceRead>
>>>>>> rdf:type joseki:Service ;
>>>>>> rdfs:label "SPARQL" ;
>>>>>> joseki:serviceRef "sparql/read" ;
>>>>>> # dataset part
>>>>>> joseki:dataset<#mydata> ; ## Same dataset
>>>>>> # Service part.
>>>>>> # This processor will not allow either the protocol,
>>>>>> # nor the query, to specify the dataset.
>>>>>> joseki:processor joseki:ProcessorSPARQL_FixedDS ;
>>>>>> .
>>>>>>
>>>>>> joseki:ProcessorSPARQL
>>>>>> rdfs:label "General SPARQL processor" ;
>>>>>> rdf:type joseki:Processor ;
>>>>>> module:implementation joseki:ImplSPARQL ;
>>>>>>
>>>>>> # Parameters - this processor processes FROM/FROM NAMED
>>>>>> joseki:allowExplicitDataset "true"^^xsd:boolean ;
>>>>>> joseki:allowWebLoading "true"^^xsd:boolean ;
>>>>>> ## And has no locking policy (it loads data each time).
>>>>>> ## The default is mutex (one request at a time)
>>>>>> joseki:lockingPolicy joseki:lockingPolicyNone ;
>>>>>> .
>>>>>>
>>>>>> joseki:ProcessorSPARQL_FixedDS
>>>>>> rdfs:label "SPARQL processor for fixed datasets" ;
>>>>>> rdf:type joseki:Processor ;
>>>>>> module:implementation joseki:ImplSPARQL ;
>>>>>>
>>>>>> # This processor does not accept queries with FROM/FROM NAMED
>>>>>> joseki:allowExplicitDataset "false"^^xsd:boolean ;
>>>>>> joseki:allowWebLoading "false"^^xsd:boolean ;
>>>>>> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
>>>>>> .
>>>>>>
>>>>>> joseki:ProcessorSPARQLUpdate
>>>>>> rdfs:label "SPARQL Update processor" ;
>>>>>> rdf:type joseki:Processor ;
>>>>>> module:implementation joseki:ImplSPARQLUpdate ;
>>>>>> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
>>>>>> .
>>>>>>
>>>>>> joseki:ImplSPARQL
>>>>>> rdf:type joseki:ServiceImpl ;
>>>>>> module:className
>>>>>> <java:org.joseki.processors.SPARQL> .
>>>>>>
>>>>>> joseki:ImplSPARQLUpdate
>>>>>> rdf:type joseki:ServiceImpl ;
>>>>>> module:className
>>>>>> <java:org.joseki.processors.SPARQLUpdate> .
>>>>>>
>>>>>>
>>>>>> %%%%%%%%%%%%%%%
>>>>>>
>>>>>> Anything that I've missed? I'm also not sure whether to opt for SDB or
>>>>>> TDB, and what the implications of either, are?
>>>>>>
>>>>>> --
>>>>>> Rob Stewart
>>>>>
>>>
>
Re: Joseki: SPARQL Update not persisting
Posted by Andy Seaborne <an...@epimorphics.com>.
TDB does not use a relational database - did you mean SDB?
There's are examples of both in the Joseki download.
TDB --------------
[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
## ---- A whole dataset managed by TDB
<#mydata> rdf:type tdb:DatasetTDB ;
tdb:location "TDB" ;
.
SDB --------------
[] ja:loadClass "com.hp.hpl.jena.sdb.SDB" .
sdb:DatasetStore rdfs:subClassOf ja:RDFDataset .
sdb:Model rdfs:subClassOf ja:Model .
<#mydata> rdf:type sdb:DatasetStore ;
## Number of concurrent connections allowed to this dataset.
joseki:poolSize 2 ;
sdb:store <#store> .
<#store> rdf:type sdb:Store ;
rdfs:label "SDB" ;
sdb:layout "layout2" ;
sdb:connection
[ rdf:type sdb:SDBConnection ;
## sdb:sdbType "postgresql" ;
## sdb:sdbHost "localhost" ;
## sdb:sdbName "SDB" ;
# Using Apache Derby
sdb:sdbHost "localhost" ;
sdb:sdbType "derby" ;
sdb:sdbName "DB/Derby" ;
]
.
-------------
You want <#mydata>, as in your original Joseki config file, connecting
to one of the places I have used it above.
You do not want a ja:RDFDataset and identifying a specific model.
Andy
On 17/05/11 18:34, Rob Stewart wrote:
> Hi Andy,
>
> Unfortunately, joseki errors are very cryptic e.g.:
>
> WARN [http-8080-2] (Servlet.java:183) - Internal server error
> java.lang.NullPointerException
> at org.joseki.DatasetDesc.acquireDataset(DatasetDesc.java:78)
>
> I am now trying to use TDB as you recommended, but with no luck. My
> configuration:
>
> %%%%%%%%%%
> [] ja:loadClass "com.hp.hpl.jena.tdb.TDB" . ## Initialize TDB.
> tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
> tdb:GraphTDB rdfs:subClassOf ja:Model .
> <#dataset>
> a ja:RDFDataset;
> ja:defaultGraph [
> a ja:InfModel;
> ja:baseModel [
> a tdb:GraphTDB;
> ja:connection
> [
> ja:dbType "MySQL" ;
> ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true" ;
> ja:dbUser "" ;
> ja:dbPassword "" ;
> ja:dbClass "com.mysql.jdbc.Driver" ;
> ] ;
> ja:modelName "UserProfiles"
> ];
> ];
> .
>
> <#service3>
> rdf:type joseki:Service ;
> rdfs:label "SPARQL-TDB" ;
> joseki:serviceRef "sparql" ; # web.xml must route this name to Joseki
> joseki:dataset<#dataset> ;
> joseki:processor joseki:ProcessorSPARQL_FixedDS ;
> .
>
> <#serviceUpdate>
> rdf:type joseki:Service ;
> rdfs:label "SPARQL/Update" ;
> joseki:serviceRef "update/service" ;
> # dataset part
> joseki:dataset<#dataset>;
> # Service part.
> # This processor will not allow either the protocol,
> # nor the query, to specify the dataset.
> joseki:processor joseki:ProcessorSPARQLUpdate
> .
>
> %%%%%%%%
>
> I'm not overly familiar with ttl syntax, but the errors given from
> Joseki merely say "NullPointException", without reference to the
> problem... ttl syntax? Database error? ja:modelName not found?
>
>
> --
> Rob
>
>
>
>
>
>
>
>
> On 17 May 2011 11:13, Andy Seaborne<an...@epimorphics.com> wrote:
>> Sorry my misreading - but you are stil putting one SDB model into a general
>> dataset. If you want to create new models, yo uneed to use a dataset.
>> (untested):
>>
>> joseki:dataset<#mydata> ;
>>
>> <#mydata> rdf:type sdb:DatasetStore ;
>> sdb:store<#store> .
>>
>> <#store> rdf:type sdb:Store ;
>> rdfs:label "SDB" ;
>> sdb:layout "layout2" ;
>> sdb:connection ....
>>
>>
>> (From joseki-config-sdb.ttl)
>>
>> http://openjena.org/wiki/SDB/Dataset_Description
>>
>> Andy
>>
>>
>> On 17/05/11 10:42, Rob Stewart wrote:
>>>
>>> Hi Andy,
>>>
>>> Thanks for your input. I can't see in my configuration where I am
>>> pointing to "RDB" at all... Could you highlight my error.
>>>
>>> Looking at the fragment below, I would have thought that I am indeed using
>>> SDB ?
>>> %%%%%
>>> _:ProfileDatabase rdf:type ja:SDBModel ;
>>> ja:connection
>>> [
>>> ja:dbType "MySQL" ;
>>> ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true" ;
>>> ja:dbUser "" ;
>>> ja:dbPassword "" ;
>>> ja:dbClass "com.mysql.jdbc.Driver" ;
>>> ] ;
>>> ja:modelName "UserProfiles"
>>> .
>>> %%%%
>>> thanks,
>>>
>>> Rob
>>>
>>> On 17 May 2011 10:28, Andy Seaborne<an...@epimorphics.com> wrote:
>>>>
>>>> Hi Rob,
>>>>
>>>> You have one model backed by Jena's old database layer (AKA RDB) in
>>>> MySQL.
>>>> That model is put into a general purpose, in-memory dataset.
>>>>
>>>> Any further models you create will be in-memory, not in MySQL.
>>>>
>>>> You need to use SDB or TDB to get a persistent dataset, rather than a
>>>> single
>>>> persistent model.
>>>>
>>>> Currently, DBS provides transactions; TDB scales better.
>>>>
>>>> Fuseki is "Joseki4" and may be easier to use for you.
>>>>
>>>> Andy
>>>>
>>>> On 17/05/11 01:25, Rob Stewart wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I'm currently having an issue with Joseki. I have created a mySql
>>>>> database, and added 1 Jena model, with a small number of triples.
>>>>>
>>>>> I can SPARQL query them with the use of the sparql.html form, and I
>>>>> receive all the of the results that I would expect. My problem is with
>>>>> SPARQL Update, through the use of the update.html form.
>>>>>
>>>>> I can:
>>>>> 1) CREATE GRAPH's
>>>>> 2) INSERT DATA INTO these graphs
>>>>> 3) Go to the sparql.html form, and query these inserted triples, in
>>>>> each of these graphs. So - the data is going into memory.
>>>>>
>>>>> However - I am monitoring the mySql database as I run the INSERT INTO
>>>>> calls, and no triples are added in `jena_g1t1_stmt', and no graphs are
>>>>> added in `jena_graph'. Indeed, when I kill Joseki and restart it, all
>>>>> of my inserted triples dissapear, and cannot be found with a SPARQL
>>>>> query. Perhaps this is down to an incorrect configuration file? Here
>>>>> it is, minus sensitive information:
>>>>>
>>>>> %%%%%%%%%%%%%%
>>>>>
>>>>> <#server> rdf:type joseki:Server ;
>>>>> # Example of some initialization code.
>>>>> joseki:initialization
>>>>> [ module:implementation
>>>>> [ module:className<java:org.joseki.util.ServiceInitSimple>
>>>>> ;
>>>>> rdfs:label "Example initializer" ; ]
>>>>> ] ;
>>>>> .
>>>>>
>>>>> <#mydata> rdf:type ja:RDFDataset ;
>>>>> rdfs:label "DSpaceImage" ;
>>>>> ja:defaultGraph _:ProfileDatabase
>>>>> .
>>>>>
>>>>> _:ProfileDatabase rdf:type ja:SDBModel ;
>>>>> ja:connection
>>>>> [
>>>>> ja:dbType "MySQL" ;
>>>>> ja:dbURL
>>>>> "jdbc:mysql://localhost/MyDB?autoReconnect=true"
>>>>> ;
>>>>> ja:dbUser "" ;
>>>>> ja:dbPassword "" ;
>>>>> ja:dbClass "com.mysql.jdbc.Driver" ;
>>>>> ] ;
>>>>> ja:modelName "UserProfiles"
>>>>> .
>>>>>
>>>>> <#service1>
>>>>> rdf:type joseki:Service ;
>>>>> rdfs:label "service point" ;
>>>>> joseki:serviceRef "sparql" ; # web.xml must route this name to
>>>>> Joseki
>>>>> joseki:processor joseki:ProcessorSPARQL ;
>>>>> joseki:dataset<#mydata> ;
>>>>> .
>>>>>
>>>>> <#serviceUpdate>
>>>>> rdf:type joseki:Service ;
>>>>> rdfs:label "SPARQL/Update" ;
>>>>> joseki:serviceRef "update/service" ;
>>>>> # dataset part
>>>>> joseki:dataset<#mydata>;
>>>>> # Service part.
>>>>> # This processor will not allow either the protocol,
>>>>> # nor the query, to specify the dataset.
>>>>> joseki:processor joseki:ProcessorSPARQLUpdate
>>>>> .
>>>>>
>>>>> <#serviceRead>
>>>>> rdf:type joseki:Service ;
>>>>> rdfs:label "SPARQL" ;
>>>>> joseki:serviceRef "sparql/read" ;
>>>>> # dataset part
>>>>> joseki:dataset<#mydata> ; ## Same dataset
>>>>> # Service part.
>>>>> # This processor will not allow either the protocol,
>>>>> # nor the query, to specify the dataset.
>>>>> joseki:processor joseki:ProcessorSPARQL_FixedDS ;
>>>>> .
>>>>>
>>>>> joseki:ProcessorSPARQL
>>>>> rdfs:label "General SPARQL processor" ;
>>>>> rdf:type joseki:Processor ;
>>>>> module:implementation joseki:ImplSPARQL ;
>>>>>
>>>>> # Parameters - this processor processes FROM/FROM NAMED
>>>>> joseki:allowExplicitDataset "true"^^xsd:boolean ;
>>>>> joseki:allowWebLoading "true"^^xsd:boolean ;
>>>>> ## And has no locking policy (it loads data each time).
>>>>> ## The default is mutex (one request at a time)
>>>>> joseki:lockingPolicy joseki:lockingPolicyNone ;
>>>>> .
>>>>>
>>>>> joseki:ProcessorSPARQL_FixedDS
>>>>> rdfs:label "SPARQL processor for fixed datasets" ;
>>>>> rdf:type joseki:Processor ;
>>>>> module:implementation joseki:ImplSPARQL ;
>>>>>
>>>>> # This processor does not accept queries with FROM/FROM NAMED
>>>>> joseki:allowExplicitDataset "false"^^xsd:boolean ;
>>>>> joseki:allowWebLoading "false"^^xsd:boolean ;
>>>>> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
>>>>> .
>>>>>
>>>>> joseki:ProcessorSPARQLUpdate
>>>>> rdfs:label "SPARQL Update processor" ;
>>>>> rdf:type joseki:Processor ;
>>>>> module:implementation joseki:ImplSPARQLUpdate ;
>>>>> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
>>>>> .
>>>>>
>>>>> joseki:ImplSPARQL
>>>>> rdf:type joseki:ServiceImpl ;
>>>>> module:className
>>>>> <java:org.joseki.processors.SPARQL> .
>>>>>
>>>>> joseki:ImplSPARQLUpdate
>>>>> rdf:type joseki:ServiceImpl ;
>>>>> module:className
>>>>> <java:org.joseki.processors.SPARQLUpdate> .
>>>>>
>>>>>
>>>>> %%%%%%%%%%%%%%%
>>>>>
>>>>> Anything that I've missed? I'm also not sure whether to opt for SDB or
>>>>> TDB, and what the implications of either, are?
>>>>>
>>>>> --
>>>>> Rob Stewart
>>>>
>>
Re: Joseki: SPARQL Update not persisting
Posted by Rob Stewart <ro...@googlemail.com>.
Hi Andy,
Unfortunately, joseki errors are very cryptic e.g.:
WARN [http-8080-2] (Servlet.java:183) - Internal server error
java.lang.NullPointerException
at org.joseki.DatasetDesc.acquireDataset(DatasetDesc.java:78)
I am now trying to use TDB as you recommended, but with no luck. My
configuration:
%%%%%%%%%%
[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" . ## Initialize TDB.
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
<#dataset>
a ja:RDFDataset;
ja:defaultGraph [
a ja:InfModel;
ja:baseModel [
a tdb:GraphTDB;
ja:connection
[
ja:dbType "MySQL" ;
ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true" ;
ja:dbUser "" ;
ja:dbPassword "" ;
ja:dbClass "com.mysql.jdbc.Driver" ;
] ;
ja:modelName "UserProfiles"
];
];
.
<#service3>
rdf:type joseki:Service ;
rdfs:label "SPARQL-TDB" ;
joseki:serviceRef "sparql" ; # web.xml must route this name to Joseki
joseki:dataset <#dataset> ;
joseki:processor joseki:ProcessorSPARQL_FixedDS ;
.
<#serviceUpdate>
rdf:type joseki:Service ;
rdfs:label "SPARQL/Update" ;
joseki:serviceRef "update/service" ;
# dataset part
joseki:dataset <#dataset>;
# Service part.
# This processor will not allow either the protocol,
# nor the query, to specify the dataset.
joseki:processor joseki:ProcessorSPARQLUpdate
.
%%%%%%%%
I'm not overly familiar with ttl syntax, but the errors given from
Joseki merely say "NullPointException", without reference to the
problem... ttl syntax? Database error? ja:modelName not found?
--
Rob
On 17 May 2011 11:13, Andy Seaborne <an...@epimorphics.com> wrote:
> Sorry my misreading - but you are stil putting one SDB model into a general
> dataset. If you want to create new models, yo uneed to use a dataset.
> (untested):
>
> joseki:dataset <#mydata> ;
>
> <#mydata> rdf:type sdb:DatasetStore ;
> sdb:store <#store> .
>
> <#store> rdf:type sdb:Store ;
> rdfs:label "SDB" ;
> sdb:layout "layout2" ;
> sdb:connection ....
>
>
> (From joseki-config-sdb.ttl)
>
> http://openjena.org/wiki/SDB/Dataset_Description
>
> Andy
>
>
> On 17/05/11 10:42, Rob Stewart wrote:
>>
>> Hi Andy,
>>
>> Thanks for your input. I can't see in my configuration where I am
>> pointing to "RDB" at all... Could you highlight my error.
>>
>> Looking at the fragment below, I would have thought that I am indeed using
>> SDB ?
>> %%%%%
>> _:ProfileDatabase rdf:type ja:SDBModel ;
>> ja:connection
>> [
>> ja:dbType "MySQL" ;
>> ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true" ;
>> ja:dbUser "" ;
>> ja:dbPassword "" ;
>> ja:dbClass "com.mysql.jdbc.Driver" ;
>> ] ;
>> ja:modelName "UserProfiles"
>> .
>> %%%%
>> thanks,
>>
>> Rob
>>
>> On 17 May 2011 10:28, Andy Seaborne<an...@epimorphics.com> wrote:
>>>
>>> Hi Rob,
>>>
>>> You have one model backed by Jena's old database layer (AKA RDB) in
>>> MySQL.
>>> That model is put into a general purpose, in-memory dataset.
>>>
>>> Any further models you create will be in-memory, not in MySQL.
>>>
>>> You need to use SDB or TDB to get a persistent dataset, rather than a
>>> single
>>> persistent model.
>>>
>>> Currently, DBS provides transactions; TDB scales better.
>>>
>>> Fuseki is "Joseki4" and may be easier to use for you.
>>>
>>> Andy
>>>
>>> On 17/05/11 01:25, Rob Stewart wrote:
>>>>
>>>> Hi,
>>>>
>>>> I'm currently having an issue with Joseki. I have created a mySql
>>>> database, and added 1 Jena model, with a small number of triples.
>>>>
>>>> I can SPARQL query them with the use of the sparql.html form, and I
>>>> receive all the of the results that I would expect. My problem is with
>>>> SPARQL Update, through the use of the update.html form.
>>>>
>>>> I can:
>>>> 1) CREATE GRAPH's
>>>> 2) INSERT DATA INTO these graphs
>>>> 3) Go to the sparql.html form, and query these inserted triples, in
>>>> each of these graphs. So - the data is going into memory.
>>>>
>>>> However - I am monitoring the mySql database as I run the INSERT INTO
>>>> calls, and no triples are added in `jena_g1t1_stmt', and no graphs are
>>>> added in `jena_graph'. Indeed, when I kill Joseki and restart it, all
>>>> of my inserted triples dissapear, and cannot be found with a SPARQL
>>>> query. Perhaps this is down to an incorrect configuration file? Here
>>>> it is, minus sensitive information:
>>>>
>>>> %%%%%%%%%%%%%%
>>>>
>>>> <#server> rdf:type joseki:Server ;
>>>> # Example of some initialization code.
>>>> joseki:initialization
>>>> [ module:implementation
>>>> [ module:className<java:org.joseki.util.ServiceInitSimple>
>>>> ;
>>>> rdfs:label "Example initializer" ; ]
>>>> ] ;
>>>> .
>>>>
>>>> <#mydata> rdf:type ja:RDFDataset ;
>>>> rdfs:label "DSpaceImage" ;
>>>> ja:defaultGraph _:ProfileDatabase
>>>> .
>>>>
>>>> _:ProfileDatabase rdf:type ja:SDBModel ;
>>>> ja:connection
>>>> [
>>>> ja:dbType "MySQL" ;
>>>> ja:dbURL
>>>> "jdbc:mysql://localhost/MyDB?autoReconnect=true"
>>>> ;
>>>> ja:dbUser "" ;
>>>> ja:dbPassword "" ;
>>>> ja:dbClass "com.mysql.jdbc.Driver" ;
>>>> ] ;
>>>> ja:modelName "UserProfiles"
>>>> .
>>>>
>>>> <#service1>
>>>> rdf:type joseki:Service ;
>>>> rdfs:label "service point" ;
>>>> joseki:serviceRef "sparql" ; # web.xml must route this name to
>>>> Joseki
>>>> joseki:processor joseki:ProcessorSPARQL ;
>>>> joseki:dataset<#mydata> ;
>>>> .
>>>>
>>>> <#serviceUpdate>
>>>> rdf:type joseki:Service ;
>>>> rdfs:label "SPARQL/Update" ;
>>>> joseki:serviceRef "update/service" ;
>>>> # dataset part
>>>> joseki:dataset<#mydata>;
>>>> # Service part.
>>>> # This processor will not allow either the protocol,
>>>> # nor the query, to specify the dataset.
>>>> joseki:processor joseki:ProcessorSPARQLUpdate
>>>> .
>>>>
>>>> <#serviceRead>
>>>> rdf:type joseki:Service ;
>>>> rdfs:label "SPARQL" ;
>>>> joseki:serviceRef "sparql/read" ;
>>>> # dataset part
>>>> joseki:dataset<#mydata> ; ## Same dataset
>>>> # Service part.
>>>> # This processor will not allow either the protocol,
>>>> # nor the query, to specify the dataset.
>>>> joseki:processor joseki:ProcessorSPARQL_FixedDS ;
>>>> .
>>>>
>>>> joseki:ProcessorSPARQL
>>>> rdfs:label "General SPARQL processor" ;
>>>> rdf:type joseki:Processor ;
>>>> module:implementation joseki:ImplSPARQL ;
>>>>
>>>> # Parameters - this processor processes FROM/FROM NAMED
>>>> joseki:allowExplicitDataset "true"^^xsd:boolean ;
>>>> joseki:allowWebLoading "true"^^xsd:boolean ;
>>>> ## And has no locking policy (it loads data each time).
>>>> ## The default is mutex (one request at a time)
>>>> joseki:lockingPolicy joseki:lockingPolicyNone ;
>>>> .
>>>>
>>>> joseki:ProcessorSPARQL_FixedDS
>>>> rdfs:label "SPARQL processor for fixed datasets" ;
>>>> rdf:type joseki:Processor ;
>>>> module:implementation joseki:ImplSPARQL ;
>>>>
>>>> # This processor does not accept queries with FROM/FROM NAMED
>>>> joseki:allowExplicitDataset "false"^^xsd:boolean ;
>>>> joseki:allowWebLoading "false"^^xsd:boolean ;
>>>> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
>>>> .
>>>>
>>>> joseki:ProcessorSPARQLUpdate
>>>> rdfs:label "SPARQL Update processor" ;
>>>> rdf:type joseki:Processor ;
>>>> module:implementation joseki:ImplSPARQLUpdate ;
>>>> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
>>>> .
>>>>
>>>> joseki:ImplSPARQL
>>>> rdf:type joseki:ServiceImpl ;
>>>> module:className
>>>> <java:org.joseki.processors.SPARQL> .
>>>>
>>>> joseki:ImplSPARQLUpdate
>>>> rdf:type joseki:ServiceImpl ;
>>>> module:className
>>>> <java:org.joseki.processors.SPARQLUpdate> .
>>>>
>>>>
>>>> %%%%%%%%%%%%%%%
>>>>
>>>> Anything that I've missed? I'm also not sure whether to opt for SDB or
>>>> TDB, and what the implications of either, are?
>>>>
>>>> --
>>>> Rob Stewart
>>>
>
Re: Joseki: SPARQL Update not persisting
Posted by Andy Seaborne <an...@epimorphics.com>.
Sorry my misreading - but you are stil putting one SDB model into a
general dataset. If you want to create new models, yo uneed to use a
dataset.
(untested):
joseki:dataset <#mydata> ;
<#mydata> rdf:type sdb:DatasetStore ;
sdb:store <#store> .
<#store> rdf:type sdb:Store ;
rdfs:label "SDB" ;
sdb:layout "layout2" ;
sdb:connection ....
(From joseki-config-sdb.ttl)
http://openjena.org/wiki/SDB/Dataset_Description
Andy
On 17/05/11 10:42, Rob Stewart wrote:
> Hi Andy,
>
> Thanks for your input. I can't see in my configuration where I am
> pointing to "RDB" at all... Could you highlight my error.
>
> Looking at the fragment below, I would have thought that I am indeed using SDB ?
> %%%%%
> _:ProfileDatabase rdf:type ja:SDBModel ;
> ja:connection
> [
> ja:dbType "MySQL" ;
> ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true" ;
> ja:dbUser "" ;
> ja:dbPassword "" ;
> ja:dbClass "com.mysql.jdbc.Driver" ;
> ] ;
> ja:modelName "UserProfiles"
> .
> %%%%
> thanks,
>
> Rob
>
> On 17 May 2011 10:28, Andy Seaborne<an...@epimorphics.com> wrote:
>> Hi Rob,
>>
>> You have one model backed by Jena's old database layer (AKA RDB) in MySQL.
>> That model is put into a general purpose, in-memory dataset.
>>
>> Any further models you create will be in-memory, not in MySQL.
>>
>> You need to use SDB or TDB to get a persistent dataset, rather than a single
>> persistent model.
>>
>> Currently, DBS provides transactions; TDB scales better.
>>
>> Fuseki is "Joseki4" and may be easier to use for you.
>>
>> Andy
>>
>> On 17/05/11 01:25, Rob Stewart wrote:
>>>
>>> Hi,
>>>
>>> I'm currently having an issue with Joseki. I have created a mySql
>>> database, and added 1 Jena model, with a small number of triples.
>>>
>>> I can SPARQL query them with the use of the sparql.html form, and I
>>> receive all the of the results that I would expect. My problem is with
>>> SPARQL Update, through the use of the update.html form.
>>>
>>> I can:
>>> 1) CREATE GRAPH's
>>> 2) INSERT DATA INTO these graphs
>>> 3) Go to the sparql.html form, and query these inserted triples, in
>>> each of these graphs. So - the data is going into memory.
>>>
>>> However - I am monitoring the mySql database as I run the INSERT INTO
>>> calls, and no triples are added in `jena_g1t1_stmt', and no graphs are
>>> added in `jena_graph'. Indeed, when I kill Joseki and restart it, all
>>> of my inserted triples dissapear, and cannot be found with a SPARQL
>>> query. Perhaps this is down to an incorrect configuration file? Here
>>> it is, minus sensitive information:
>>>
>>> %%%%%%%%%%%%%%
>>>
>>> <#server> rdf:type joseki:Server ;
>>> # Example of some initialization code.
>>> joseki:initialization
>>> [ module:implementation
>>> [ module:className<java:org.joseki.util.ServiceInitSimple> ;
>>> rdfs:label "Example initializer" ; ]
>>> ] ;
>>> .
>>>
>>> <#mydata> rdf:type ja:RDFDataset ;
>>> rdfs:label "DSpaceImage" ;
>>> ja:defaultGraph _:ProfileDatabase
>>> .
>>>
>>> _:ProfileDatabase rdf:type ja:SDBModel ;
>>> ja:connection
>>> [
>>> ja:dbType "MySQL" ;
>>> ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true"
>>> ;
>>> ja:dbUser "" ;
>>> ja:dbPassword "" ;
>>> ja:dbClass "com.mysql.jdbc.Driver" ;
>>> ] ;
>>> ja:modelName "UserProfiles"
>>> .
>>>
>>> <#service1>
>>> rdf:type joseki:Service ;
>>> rdfs:label "service point" ;
>>> joseki:serviceRef "sparql" ; # web.xml must route this name to
>>> Joseki
>>> joseki:processor joseki:ProcessorSPARQL ;
>>> joseki:dataset<#mydata> ;
>>> .
>>>
>>> <#serviceUpdate>
>>> rdf:type joseki:Service ;
>>> rdfs:label "SPARQL/Update" ;
>>> joseki:serviceRef "update/service" ;
>>> # dataset part
>>> joseki:dataset<#mydata>;
>>> # Service part.
>>> # This processor will not allow either the protocol,
>>> # nor the query, to specify the dataset.
>>> joseki:processor joseki:ProcessorSPARQLUpdate
>>> .
>>>
>>> <#serviceRead>
>>> rdf:type joseki:Service ;
>>> rdfs:label "SPARQL" ;
>>> joseki:serviceRef "sparql/read" ;
>>> # dataset part
>>> joseki:dataset<#mydata> ; ## Same dataset
>>> # Service part.
>>> # This processor will not allow either the protocol,
>>> # nor the query, to specify the dataset.
>>> joseki:processor joseki:ProcessorSPARQL_FixedDS ;
>>> .
>>>
>>> joseki:ProcessorSPARQL
>>> rdfs:label "General SPARQL processor" ;
>>> rdf:type joseki:Processor ;
>>> module:implementation joseki:ImplSPARQL ;
>>>
>>> # Parameters - this processor processes FROM/FROM NAMED
>>> joseki:allowExplicitDataset "true"^^xsd:boolean ;
>>> joseki:allowWebLoading "true"^^xsd:boolean ;
>>> ## And has no locking policy (it loads data each time).
>>> ## The default is mutex (one request at a time)
>>> joseki:lockingPolicy joseki:lockingPolicyNone ;
>>> .
>>>
>>> joseki:ProcessorSPARQL_FixedDS
>>> rdfs:label "SPARQL processor for fixed datasets" ;
>>> rdf:type joseki:Processor ;
>>> module:implementation joseki:ImplSPARQL ;
>>>
>>> # This processor does not accept queries with FROM/FROM NAMED
>>> joseki:allowExplicitDataset "false"^^xsd:boolean ;
>>> joseki:allowWebLoading "false"^^xsd:boolean ;
>>> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
>>> .
>>>
>>> joseki:ProcessorSPARQLUpdate
>>> rdfs:label "SPARQL Update processor" ;
>>> rdf:type joseki:Processor ;
>>> module:implementation joseki:ImplSPARQLUpdate ;
>>> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
>>> .
>>>
>>> joseki:ImplSPARQL
>>> rdf:type joseki:ServiceImpl ;
>>> module:className
>>> <java:org.joseki.processors.SPARQL> .
>>>
>>> joseki:ImplSPARQLUpdate
>>> rdf:type joseki:ServiceImpl ;
>>> module:className
>>> <java:org.joseki.processors.SPARQLUpdate> .
>>>
>>>
>>> %%%%%%%%%%%%%%%
>>>
>>> Anything that I've missed? I'm also not sure whether to opt for SDB or
>>> TDB, and what the implications of either, are?
>>>
>>> --
>>> Rob Stewart
>>
Re: Joseki: SPARQL Update not persisting
Posted by Rob Stewart <ro...@googlemail.com>.
Hi Andy,
Thanks for your input. I can't see in my configuration where I am
pointing to "RDB" at all... Could you highlight my error.
Looking at the fragment below, I would have thought that I am indeed using SDB ?
%%%%%
_:ProfileDatabase rdf:type ja:SDBModel ;
ja:connection
[
ja:dbType "MySQL" ;
ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true" ;
ja:dbUser "" ;
ja:dbPassword "" ;
ja:dbClass "com.mysql.jdbc.Driver" ;
] ;
ja:modelName "UserProfiles"
.
%%%%
thanks,
Rob
On 17 May 2011 10:28, Andy Seaborne <an...@epimorphics.com> wrote:
> Hi Rob,
>
> You have one model backed by Jena's old database layer (AKA RDB) in MySQL.
> That model is put into a general purpose, in-memory dataset.
>
> Any further models you create will be in-memory, not in MySQL.
>
> You need to use SDB or TDB to get a persistent dataset, rather than a single
> persistent model.
>
> Currently, DBS provides transactions; TDB scales better.
>
> Fuseki is "Joseki4" and may be easier to use for you.
>
> Andy
>
> On 17/05/11 01:25, Rob Stewart wrote:
>>
>> Hi,
>>
>> I'm currently having an issue with Joseki. I have created a mySql
>> database, and added 1 Jena model, with a small number of triples.
>>
>> I can SPARQL query them with the use of the sparql.html form, and I
>> receive all the of the results that I would expect. My problem is with
>> SPARQL Update, through the use of the update.html form.
>>
>> I can:
>> 1) CREATE GRAPH's
>> 2) INSERT DATA INTO these graphs
>> 3) Go to the sparql.html form, and query these inserted triples, in
>> each of these graphs. So - the data is going into memory.
>>
>> However - I am monitoring the mySql database as I run the INSERT INTO
>> calls, and no triples are added in `jena_g1t1_stmt', and no graphs are
>> added in `jena_graph'. Indeed, when I kill Joseki and restart it, all
>> of my inserted triples dissapear, and cannot be found with a SPARQL
>> query. Perhaps this is down to an incorrect configuration file? Here
>> it is, minus sensitive information:
>>
>> %%%%%%%%%%%%%%
>>
>> <#server> rdf:type joseki:Server ;
>> # Example of some initialization code.
>> joseki:initialization
>> [ module:implementation
>> [ module:className<java:org.joseki.util.ServiceInitSimple> ;
>> rdfs:label "Example initializer" ; ]
>> ] ;
>> .
>>
>> <#mydata> rdf:type ja:RDFDataset ;
>> rdfs:label "DSpaceImage" ;
>> ja:defaultGraph _:ProfileDatabase
>> .
>>
>> _:ProfileDatabase rdf:type ja:SDBModel ;
>> ja:connection
>> [
>> ja:dbType "MySQL" ;
>> ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true"
>> ;
>> ja:dbUser "" ;
>> ja:dbPassword "" ;
>> ja:dbClass "com.mysql.jdbc.Driver" ;
>> ] ;
>> ja:modelName "UserProfiles"
>> .
>>
>> <#service1>
>> rdf:type joseki:Service ;
>> rdfs:label "service point" ;
>> joseki:serviceRef "sparql" ; # web.xml must route this name to
>> Joseki
>> joseki:processor joseki:ProcessorSPARQL ;
>> joseki:dataset<#mydata> ;
>> .
>>
>> <#serviceUpdate>
>> rdf:type joseki:Service ;
>> rdfs:label "SPARQL/Update" ;
>> joseki:serviceRef "update/service" ;
>> # dataset part
>> joseki:dataset<#mydata>;
>> # Service part.
>> # This processor will not allow either the protocol,
>> # nor the query, to specify the dataset.
>> joseki:processor joseki:ProcessorSPARQLUpdate
>> .
>>
>> <#serviceRead>
>> rdf:type joseki:Service ;
>> rdfs:label "SPARQL" ;
>> joseki:serviceRef "sparql/read" ;
>> # dataset part
>> joseki:dataset<#mydata> ; ## Same dataset
>> # Service part.
>> # This processor will not allow either the protocol,
>> # nor the query, to specify the dataset.
>> joseki:processor joseki:ProcessorSPARQL_FixedDS ;
>> .
>>
>> joseki:ProcessorSPARQL
>> rdfs:label "General SPARQL processor" ;
>> rdf:type joseki:Processor ;
>> module:implementation joseki:ImplSPARQL ;
>>
>> # Parameters - this processor processes FROM/FROM NAMED
>> joseki:allowExplicitDataset "true"^^xsd:boolean ;
>> joseki:allowWebLoading "true"^^xsd:boolean ;
>> ## And has no locking policy (it loads data each time).
>> ## The default is mutex (one request at a time)
>> joseki:lockingPolicy joseki:lockingPolicyNone ;
>> .
>>
>> joseki:ProcessorSPARQL_FixedDS
>> rdfs:label "SPARQL processor for fixed datasets" ;
>> rdf:type joseki:Processor ;
>> module:implementation joseki:ImplSPARQL ;
>>
>> # This processor does not accept queries with FROM/FROM NAMED
>> joseki:allowExplicitDataset "false"^^xsd:boolean ;
>> joseki:allowWebLoading "false"^^xsd:boolean ;
>> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
>> .
>>
>> joseki:ProcessorSPARQLUpdate
>> rdfs:label "SPARQL Update processor" ;
>> rdf:type joseki:Processor ;
>> module:implementation joseki:ImplSPARQLUpdate ;
>> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
>> .
>>
>> joseki:ImplSPARQL
>> rdf:type joseki:ServiceImpl ;
>> module:className
>> <java:org.joseki.processors.SPARQL> .
>>
>> joseki:ImplSPARQLUpdate
>> rdf:type joseki:ServiceImpl ;
>> module:className
>> <java:org.joseki.processors.SPARQLUpdate> .
>>
>>
>> %%%%%%%%%%%%%%%
>>
>> Anything that I've missed? I'm also not sure whether to opt for SDB or
>> TDB, and what the implications of either, are?
>>
>> --
>> Rob Stewart
>
Re: Joseki: SPARQL Update not persisting
Posted by Andy Seaborne <an...@epimorphics.com>.
Hi Rob,
You have one model backed by Jena's old database layer (AKA RDB) in
MySQL. That model is put into a general purpose, in-memory dataset.
Any further models you create will be in-memory, not in MySQL.
You need to use SDB or TDB to get a persistent dataset, rather than a
single persistent model.
Currently, DBS provides transactions; TDB scales better.
Fuseki is "Joseki4" and may be easier to use for you.
Andy
On 17/05/11 01:25, Rob Stewart wrote:
> Hi,
>
> I'm currently having an issue with Joseki. I have created a mySql
> database, and added 1 Jena model, with a small number of triples.
>
> I can SPARQL query them with the use of the sparql.html form, and I
> receive all the of the results that I would expect. My problem is with
> SPARQL Update, through the use of the update.html form.
>
> I can:
> 1) CREATE GRAPH's
> 2) INSERT DATA INTO these graphs
> 3) Go to the sparql.html form, and query these inserted triples, in
> each of these graphs. So - the data is going into memory.
>
> However - I am monitoring the mySql database as I run the INSERT INTO
> calls, and no triples are added in `jena_g1t1_stmt', and no graphs are
> added in `jena_graph'. Indeed, when I kill Joseki and restart it, all
> of my inserted triples dissapear, and cannot be found with a SPARQL
> query. Perhaps this is down to an incorrect configuration file? Here
> it is, minus sensitive information:
>
> %%%%%%%%%%%%%%
>
> <#server> rdf:type joseki:Server ;
> # Example of some initialization code.
> joseki:initialization
> [ module:implementation
> [ module:className<java:org.joseki.util.ServiceInitSimple> ;
> rdfs:label "Example initializer" ; ]
> ] ;
> .
>
> <#mydata> rdf:type ja:RDFDataset ;
> rdfs:label "DSpaceImage" ;
> ja:defaultGraph _:ProfileDatabase
> .
>
> _:ProfileDatabase rdf:type ja:SDBModel ;
> ja:connection
> [
> ja:dbType "MySQL" ;
> ja:dbURL "jdbc:mysql://localhost/MyDB?autoReconnect=true" ;
> ja:dbUser "" ;
> ja:dbPassword "" ;
> ja:dbClass "com.mysql.jdbc.Driver" ;
> ] ;
> ja:modelName "UserProfiles"
> .
>
> <#service1>
> rdf:type joseki:Service ;
> rdfs:label "service point" ;
> joseki:serviceRef "sparql" ; # web.xml must route this name to Joseki
> joseki:processor joseki:ProcessorSPARQL ;
> joseki:dataset<#mydata> ;
> .
>
> <#serviceUpdate>
> rdf:type joseki:Service ;
> rdfs:label "SPARQL/Update" ;
> joseki:serviceRef "update/service" ;
> # dataset part
> joseki:dataset<#mydata>;
> # Service part.
> # This processor will not allow either the protocol,
> # nor the query, to specify the dataset.
> joseki:processor joseki:ProcessorSPARQLUpdate
> .
>
> <#serviceRead>
> rdf:type joseki:Service ;
> rdfs:label "SPARQL" ;
> joseki:serviceRef "sparql/read" ;
> # dataset part
> joseki:dataset<#mydata> ; ## Same dataset
> # Service part.
> # This processor will not allow either the protocol,
> # nor the query, to specify the dataset.
> joseki:processor joseki:ProcessorSPARQL_FixedDS ;
> .
>
> joseki:ProcessorSPARQL
> rdfs:label "General SPARQL processor" ;
> rdf:type joseki:Processor ;
> module:implementation joseki:ImplSPARQL ;
>
> # Parameters - this processor processes FROM/FROM NAMED
> joseki:allowExplicitDataset "true"^^xsd:boolean ;
> joseki:allowWebLoading "true"^^xsd:boolean ;
> ## And has no locking policy (it loads data each time).
> ## The default is mutex (one request at a time)
> joseki:lockingPolicy joseki:lockingPolicyNone ;
> .
>
> joseki:ProcessorSPARQL_FixedDS
> rdfs:label "SPARQL processor for fixed datasets" ;
> rdf:type joseki:Processor ;
> module:implementation joseki:ImplSPARQL ;
>
> # This processor does not accept queries with FROM/FROM NAMED
> joseki:allowExplicitDataset "false"^^xsd:boolean ;
> joseki:allowWebLoading "false"^^xsd:boolean ;
> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
> .
>
> joseki:ProcessorSPARQLUpdate
> rdfs:label "SPARQL Update processor" ;
> rdf:type joseki:Processor ;
> module:implementation joseki:ImplSPARQLUpdate ;
> joseki:lockingPolicy joseki:lockingPolicyMRSW ;
> .
>
> joseki:ImplSPARQL
> rdf:type joseki:ServiceImpl ;
> module:className
> <java:org.joseki.processors.SPARQL> .
>
> joseki:ImplSPARQLUpdate
> rdf:type joseki:ServiceImpl ;
> module:className
> <java:org.joseki.processors.SPARQLUpdate> .
>
>
> %%%%%%%%%%%%%%%
>
> Anything that I've missed? I'm also not sure whether to opt for SDB or
> TDB, and what the implications of either, are?
>
> --
> Rob Stewart