Thanks Ivan, that looks promising.

Will this method work with relational data that I have setup an RDF view
for?  

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...?  

I'm trying this, and it doesn't like my define 'input:storage' line 

Create procedure TEST()
{
  declare ses any;
  ses := string_output();

RDF_GRAPH_TO_TTL( 'http://terapath.net/adb/source/data/concepts#', ses
);

  string_to_file( 'test.ttl', ses, -2);

};

sparql define input:storage
<http://terapath.net/adb/quad_storage/default>;

TEST();



- 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 
> 
> 

Reply via email to