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


Reply via email to