Charles,

It works for me. I'm having to fill in the details from your description, so something in the detail is different.

Do you have a complete, minimal example?

(You can use TDFCatory.createDataset() to get a in-memory TDB dataset - they ar enot very efficient but they are a complete simulation of TDB because it's just a the most basic disk access operations replaced by a simple RAM disk).

        Andy

On 02/06/15 14:02, Charles Abela wrote:
Thanks for ypour reply Andy,


On Tue, Jun 2, 2015 at 2:50 PM, Andy Seaborne <[email protected]> wrote:

On 02/06/15 09:20, Charles Abela wrote:

Hi,
I'm working with a dynamic environment and have instances with some of
their properties that get updated with time, such as the rank property
below

<http://jena.apache.org/documentation/tdb/tdb_transactions.html>
          a       <http://test.org/vocabulary/actions/Node> ;
          <http://test.org/vocabulary/actions/id>
                  92 ;
          <http://test.org/vocabulary/actions/rank>
                  "2.181"^^<http://www.w3.org/2001/XMLSchema#double> ,
"1.672"^^<http://www.w3.org/2001/XMLSchema#double> , "0.233"^^<
http://www.w3.org/2001/XMLSchema#double> , "0.466"^^<
http://www.w3.org/2001/XMLSchema#double> , "0.274"^^<
http://www.w3.org/2001/XMLSchema#double> , "0.543"^^<
http://www.w3.org/2001/XMLSchema#double> , "0.86"^^<
http://www.w3.org/2001/XMLSchema#double> , "1.234"^^<
http://www.w3.org/2001/XMLSchema#double> .


A double can be written shorthand as 1.234e0 -- the "e0" indicates a
double and wil be part of the lexical form.

@prefix :  <http://test.org/vocabulary/actions/> .
@prefix text:  <http://jena.apache.org/text#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .
@prefix actions:  <http://test.org/vocabulary/actions/> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<http://jena.apache.org/documentation/tdb/tdb_transactions.html>
         rdf:type      actions:Node ;
         actions:id    92 ;
         actions:rank  "2.181"^^xsd:double ;
         actions:rank  "1.672"^^xsd:double ;
         actions:rank  "0.233"^^xsd:double ;
         actions:rank  "0.466"^^xsd:double ;
         actions:rank  "0.274"^^xsd:double ;
         actions:rank  "0.543"^^xsd:double ;
         actions:rank  "0.86"^^xsd:double ;
         actions:rank  "1.234"^^xsd:double .


   From the excerpt it can be seen that multiple rank values are being
added.

I'm using sparql's combination of delete/insert to delete the current
value
and add the updated one, as follows:

String pre = StrUtils.strjoinNL
                  (" PREFIX  : <http://test.org/vocabulary/actions/>"


Not that it wil have any effect, you have the same namespace twice :


noted :)


PREFIX  :       <http://test.org/vocabulary/actions/>
PREFIX actions: <http://test.org/vocabulary/actions/>

                           , "PREFIX text: <http://jena.apache.org/text#>"
                          , "PREFIX rdfs: <
http://www.w3.org/2000/01/rdf-schema#>"
                          ,"PREFIX xsd:   <
http://www.w3.org/2001/XMLSchema#>"
                          ," PREFIX actions: <
http://test.org/vocabulary/actions/>"
                          ,"PREFIX rdf: <
http://www.w3.org/1999/02/22-rdf-syntax-ns#>") ;

String prop = StrUtils.strjoinNL(
                          node,


What's the string 'node'?


node is essentially a placeholder for the  object, in the case of the code
above it will be bound to <
http://jena.apache.org/documentation/tdb/tdb_transactions.html>, and that
will change depending on the data being accessed.


                           " actions:rank ?rank . ");

dataset.begin(ReadWrite.WRITE) ;


This is TDB right?

yes


           String dq = StrUtils.strjoinNL
                  (
                      "DELETE { ",
                                prop, " }",
                       "INSERT {", data, "}",


What's data?


data is a string with the data that will be inserted


                       "WHERE { ",
                                  prop," }"
                      );


Looks sort of OK. Something readable would be nice.

Printing the update to check is good for checkign things are happenign as
expected:

           try {
              UpdateRequest update = UpdateFactory.create(pre+"\n"+dq);


System.out.println(update) ;


               GraphStore graphStore = GraphStoreFactory.create(dataset);
              UpdateAction.execute(update,graphStore);
              dataset.commit();
          }catch(Exception ex){
          ex.printStackTrace();
          }finally { dataset.end() ; }

any ideas as to why the values are not being deleted?


Possibly node is wrong.

have checked this and it is correct


Does data get inserted?


yes data gets inserted, thus the multiple values for the same property...
some other values like   <http://test.org/vocabulary/actions/id> 92 ;
do not change, and only one entry per instance exists

Is teh data in the

Personally, I'd write:

DELETE WHERE { ... } ;
INSERT DATA { ... }


but that's a style thing.

         Andy


thanks in advance.





Reply via email to