jena-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Frank Budinsky <fra...@ca.ibm.com>
Subject Re: Problem replacing graph
Date Wed, 02 Feb 2011 16:47:11 GMT
Andy,

Good news, it's working fine with the latest build :-)

I'm using TDB for storage.

Thanks,
Frank.


Andy Seaborne <andy.seaborne@epimorphics.com> wrote on 02/02/2011 11:13:33
AM:

> [image removed]
>
> Re: Problem replacing graph
>
> Andy Seaborne
>
> to:
>
> jena-users
>
> 02/02/2011 11:14 AM
>
> Please respond to jena-users
>
> Frank,
>
> Could you try this with the latest snapshot builds?
>
> http://www.openjena.org/repo-dev/com/hp/hpl/jena/arq/
>
> It might a manifestation of a recently fixed bug (ARQ, TDB).
>
> If it persists, could you create a test case (wrap in something add the
> data) and say what storage your are using for Dataset?  In-memory? TDB?
SDB?
>
>    Andy
>
> On 02/02/11 06:03, Frank Budinsky wrote:
> >
> > Thanks for your reply Andy. What I'm trying to do is replace a named
graph
> > with a newer version. The way I do this is by first removing the old
graph
> > and then I add the new one. It seems that the "removing the old
version"
> > part is causing the problem. I added some debug code to the method like
> > this:
> >
> > protected Resource addOrReplaceResource(Dataset dataset, String
> > resourceURI, InputStream instream)
> > {
> >     Resource resource = dataset.containsNamedModel(resourceURI) ?
> >        dataset.getNamedModel(resourceURI).getResource(resourceURI) :
null;
> >     if (resource != null) {
> >        System.out.print("before remove: ");
> >        for (Iterator iter = dataset.listNames(); iter.hasNext(); ) {
> >           System.out.println("  " + iter.next());
> >        }
> >        dataset.asDatasetGraph().removeGraph(resource.asNode());
> >        System.out.print("after remove: ");
> >        for (Iterator iter = dataset.listNames(); iter.hasNext(); ) {
> >           System.out.println("  " + iter.next());
> >        }
> >     }
> >     Model model = dataset.getNamedModel(resourceURI);
> >     model.read(instream, null);
> >     resource = model.getResource(resourceURI);
> >     return resource;
> > }
> >
> > When I ran the code with
> > resourceURI="https://frankb-tp.torolab.ibm.com:9443/ccm/resource/
> itemName/com.ibm.team.workitem.WorkItem/20",
> >   I got this output:
> >
> >
> > before remove:
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/11
> >
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/10
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/6
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/20
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/18
> >
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/22
> >
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/5
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/1
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/9
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/23
> >
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/8
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/27
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/13
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/3
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/25
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/19
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/2
> >
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/24
> >
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/14
> >
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/4
> >
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/26
> >
> > https://frankb-tp.torolab.ibm.com:9443/ccm/resource/itemName/
> com.ibm.team.workitem.WorkItem/21
> >
> > after remove:
> >
> > Notice that there are no names being returned from dataset.listNames()
> > after the call to removeGraph(). I was expecting it to only have
removed
> > "...WorkItem/20", but it seems to have removed all the graphs.
> >
> > Any idea why this is happening? Am I using the wrong API for this?
> >
> > Thanks,
> > Frank
> >
> >
> > Andy Seaborne<andy.seaborne@epimorphics.com>  wrote on 02/01/2011
04:20:58
> > PM:
> >
> >> [image removed]
> >>
> >> Re: Problem replacing graph
> >>
> >> Andy Seaborne
> >>
> >> to:
> >>
> >> jena-users
> >>
> >> 02/01/2011 04:23 PM
> >>
> >> Please respond to jena-users
> >>
> >>
> >>
> >> On 01/02/11 14:47, Frank Budinsky wrote:
> >>>
> >>>
> >>> Hi All,
> >>>
> >>> I'm having trouble doing a fairly straightforward operation in Jena,
> > which
> >>> probably just means I'm doing something wrong. I'm trying to add or
> > replace
> >>> a resource (as a graph) in my dataset. The code I wrote looks
something
> >>> like this:
> >>>
> >>>         protected Resource addOrReplaceResource(Dataset dataset,
String
> >>> resourceURI, InputStream instream)
> >>>         {
> >>>               Resource resource = dataset.containsNamedModel
> > (resourceURI) ?
> >>>                   dataset.getNamedModel(resourceURI).getResource
> >>> (resourceURI) : null;
> >>>               if (resource != null)
> >>>                     dataset.asDatasetGraph().removeGraph
(resource.asNode
> > ());
> >>>               Model model = dataset.getNamedModel(resourceURI);
> >>>               model.read(instream, null);
> >>>               resource = model.getResource(resourceURI);
> >>>               return resource;
> >>>         }
> >>>
> >>> When a resourceURI is added for the first time, it works fine but
when
> >>> replacing a graph the call to removeGraph() seems to wipe out the
> > entire
> >>> dataset. The only thing left in the dataset after that is the single
> >>> resource which gets added after the removeGraph call.
> >>
> >> resources aren't added by getResource - in fact, it does not change
the
> >> model and and RDF model does not have resources without being in a
> >> statement.
> >>
> >>>
> >>> Is there something obvious that I'm doing wrong here?
> >>>
> >>> Thanks,
> >>> Frank.
> >>
> >> removeGraph(String) removes the graph (all the statements).
> >>
> >> Then it depends what's in the RDF/XML in instream.
> >>
> >> What happens if you print the model, or print the dataset, just before
> >> the return?
> >>
> >>     Andy
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message