Ah, I figured out a way to do this.. I write to the string stream as I
go, and every N times through the loop I append it to a file and flush
the string stream.

- Alex

> -----Original Message-----
> From: virtuoso-users-boun...@lists.sourceforge.net 
> [mailto:virtuoso-users-boun...@lists.sourceforge.net] On 
> Behalf Of Alex Black
> Sent: Monday, April 30, 2007 2:14 PM
> To: imikhailov; virtuoso-users@lists.sourceforge.net
> Subject: Re: [Virtuoso-users] Export RDF to a file
> 
> Thanks again Ivan.
> 
> Is there any way I can write out to a file as I go - rather 
> than storing it all in an in-memory string stream?
> 
> - Alex 
> 
> > -----Original Message-----
> > From: imikhailov [mailto:imikhai...@openlinksw.com]
> > Sent: Monday, April 30, 2007 1:49 PM
> > To: Alex Black; virtuoso-users@lists.sourceforge.net
> > Subject: RE: [Virtuoso-users] Export RDF to a file
> > 
> > Alex,
> > 
> > > Will this method work with relational data that I have 
> setup an RDF 
> > > view
> > for?
> > 
> > The idea will work, thw procedure will not. It access directly to 
> > RDF_QUAD ignoring any quad maps ('RDF views').
> > 
> > > When I invoke this method with my graph, I get an empty
> > file, which I
> > assume is because I have not figured out how to speicfy my quad 
> > storage...?
> > 
> > 
> > Yes,
> > To get data from your storage, the loop
> > 
> > for (select S as subj, P as pred, O as obj from RDF_QUAD where G = 
> > iri_to_id
> > (graph_iri)) do
> > 
> > should be replaced with something like
> > 
> > for (select subq."s" as subj, subq."p" as pred, subq."o" as 
> obj from ( 
> > sparql
> >   define output:valmode "LONG"
> >   define input:storage 
> <http://terapath.net/adb/quad_storage/default>
> >   select ?s ?p ?o from <graph-in-question>
> >   ) subq) do
> > 
> > Best Regards,
> > IvAn.
> > 
> > 
> > 
> > - Alex
> > 
> > > -----Original Message-----
> > > From: imikhailov [mailto:imikhai...@openlinksw.com]
> > > Sent: Monday, April 30, 2007 11:36 AM
> > > To: Alex Black; virtuoso-users@lists.sourceforge.net
> > > Subject: RE: [Virtuoso-users] Export RDF to a file
> > > 
> > > Alex,
> > > 
> > > CONSTRUCT is definitely not the best way, because it
> > creates in-memory
> > > dictionary of created triples, 1.8.Gb dictionary of this sort may 
> > > abort client connection by 'memory low' alert.
> > > 
> > > Latest commercial Virtuoso build contains function
> > > 
> > > DB.DBA.RDF_GRAPH_TO_TTL (in graph_iri varchar, inout ses any)
> > > 
> > > that gets a graph IRI and writes the content of the graph
> > into string
> > > output object that is passes as second argument (if second
> > argument is
> > > NULL then it will output to the current HTTP client
> > connection, if the
> > > procedure is called not from an HTTP request then NULL
> > argument will
> > > result in error).
> > > 
> > > While the patch that contains this function is on its way 
> to public 
> > > Virtuoso Open Source repository, you may temporarily clone it.
> > > 
> > > create procedure DB.DBA.RDF_GRAPH_TO_TTL (in graph_iri
> > varchar, inout
> > > ses
> > > any)
> > > {
> > >   declare tcount integer;
> > >   declare res varchar;
> > >   declare prev_s, prev_p IRI_ID;
> > >   tcount := 0;
> > >   prev_s := null;
> > >   prev_p := null;
> > >   for (select S as subj, P as pred, O as obj from RDF_QUAD
> > where G =
> > > iri_to_id (graph_iri)) do
> > >     {
> > >       if (prev_s = subj)
> > >         {
> > >           if (prev_p = pred)
> > >             {
> > >               http (',\n\t\t', ses);
> > >               goto print_o;
> > >             }
> > >           http (';\n\t', ses);
> > >           goto print_p;
> > >         }
> > >       if (prev_s is not null)
> > >         http ('.\n', ses);
> > >       if (subj >= #i1000000000)
> > >         http (sprintf ('_:b%d ', iri_id_num (subj)), ses);
> > >       else
> > >         {
> > >           res := id_to_iri (subj);
> > >           http ('<', ses);
> > >           http_escape (res, 12, ses, 1, 1);
> > >           http ('> ', ses);
> > >         }
> > >       prev_s := subj;
> > >       prev_p := null;
> > > print_p:
> > >       if (pred >= #i1000000000)
> > >         signal ('RDFXX', 'DB.DBA.RDF_GRAPH_TO_TTL(): 
> blank node as 
> > > predicate');
> > >       else
> > >         {
> > >           res := id_to_iri (pred);
> > >           http ('<', ses);
> > >           http_escape (res, 12, ses, 1, 1);
> > >           http ('> ', ses);
> > >         }
> > >       prev_p := pred;
> > > print_o:
> > >        DB.DBA.RDF_LONG_TO_TTL (obj, ses);
> > >        tcount := tcount + 1;
> > >     }
> > >   if (0 = tcount)
> > >     http ('# Empty TURTLE', ses);
> > >   else
> > >     http ('.\n', ses);
> > > }
> > > ;
> > > 
> > > Please rename it to something else to avoid possible
> > conflict when the
> > > function with this name will appear in the VOS release; you
> > may also
> > > create it without renaming but drop it before the upgrade.
> > > You may also replace the condition 'where G = iri_to_id
> > (graph_iri)' 
> > > with something else. but in that case you may wish to add 
> 'order by 
> > > 1,2,3' or the result may become not so pretty-printed.
> > > 
> > > Before next major release, Virtuoso will optimize some CONSTRUCT 
> > > queries so they will avoid in-memory dictionary in some cases, 
> > > including 'dump graph'
> > > case; this will eliminate the complication.
> > > 
> > > Best Regards,
> > > IvAn Mikhailov.
> > > 
> > > 
> > > -----Original Message-----
> > > From: Alex Black [mailto:alex.bl...@terapath.net]
> > > Sent: Monday, April 30, 2007 10:11 PM
> > > To: imikhailov; virtuoso-users@lists.sourceforge.net
> > > Subject: RE: [Virtuoso-users] Export RDF to a file
> > > 
> > > Ok, thanks Ivan.
> > > 
> > > Related to this, are there any other options for exporting
> > triples to
> > > a file?
> > > 
> > > If I want to export my 1.8gb of data to RDF TTL, is this the most 
> > > performant method in Virtuoso?
> > > 
> > > - Alex
> > > 
> > > 
> > 
> > 
> 
> --------------------------------------------------------------
> -----------
> This SF.net email is sponsored by DB2 Express Download DB2 
> Express C - the FREE version of DB2 express and take control 
> of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> Virtuoso-users mailing list
> Virtuoso-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/virtuoso-users
> 

Reply via email to