Andy below is a typical instance:
<http://permalink.gmane.org/gmane.comp.apache.jena.user/7020> a <http://test.org/vocabulary/actions/Node> ; <http://test.org/vocabulary/actions/id> 90 ; <http://test.org/vocabulary/actions/rank> "0.233"^^< http://www.w3.org/2001/XMLSchema#double> . String delete = StrUtils.strjoinNL( "DELETE WHERE { ", "< http://permalink.gmane.org/gmane.comp.apache.jena.user/7020> ", " actions:rank ?r . } "); String data = StrUtils.strjoinNL (" INSERT{ < http://permalink.gmane.org/gmane.comp.apache.jena.user/7020> ", "actions:rank \""+rank+"\"^^xsd:double ;", "actions:id \""+id+"\"^^xsd:integer . } "); I'm creating the dataset using: Dataset ds = DatasetFactory.assemble("text-config.ttl", " http://localhost/jena_example/#text_dataset") ;//where text-config.ttl is a typical config file and am using to delete dataset.begin(ReadWrite.WRITE) ; try { UpdateRequest update = UpdateFactory.create(pre+"\n"+delete); System.out.println(update); UpdateAction.execute(update,m); dataset.commit(); }catch(Exception ex){ System.out.println("Error executing delete"); ex.printStackTrace(); }finally { dataset.end() ; } and am using to insert dataset.begin(ReadWrite.WRITE) ; try { UpdateRequest update = UpdateFactory.create(pre+"\n"+data); System.out.println(update); UpdateAction.execute(update,m); dataset.commit(); }catch(Exception ex){ System.out.println(" Error executing update"); ex.printStackTrace(); }finally { dataset.end() ; } and I checked the UpdateRequest strings when deleting and inserting, here is an example: =======DELETE======== PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX text: <http://jena.apache.org/text#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX actions: <http://test.org/vocabulary/actions/> DELETE WHERE { <http://permalink.gmane.org/gmane.comp.apache.jena.user/7020> actions:rank ?r . } =======INSERT======== PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX text: <http://jena.apache.org/text#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX actions: <http://test.org/vocabulary/actions/> INSERT DATA { <http://permalink.gmane.org/gmane.comp.apache.jena.user/7020> actions:rank "0.502"^^xsd:double . <http://permalink.gmane.org/gmane.comp.apache.jena.user/7020> actions:id 90 . } is it possible that the problem has to do with the prefix resolution or with the model? C On Tue, Jun 2, 2015 at 4:43 PM, Andy Seaborne <[email protected]> wrote: > 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. >>>> >>>> >>>> >>> >> >
