Outputs next triple to ses in TTL serialization. This function does not terminate the printed triple in hope that the next triple will has same "s" or pair of "s" and "p". So "intermediate" semicolon or comma can be used instead of "trailing" dot.
# vector (dict_new (some big size), 0, '', '', '', 0, 0, 0, 0), for ex.: vector (dict_new (16000), 0, '', '', '', 0, 0, 0, 0);
Any
Example 1
CREATE PROCEDURE dump_one_graph ( IN srcgraph VARCHAR , IN out_file VARCHAR , IN file_length_limit INTEGER := 1000000000 ) { DECLARE file_name varchar; DECLARE env, ses any; DECLARE ses_len, max_ses_len, file_len, file_idx integer; SET ISOLATION = 'uncommitted'; max_ses_len := 10000000; file_len := 0; file_idx := 1; file_name := sprintf ('%s%06d.ttl', out_file, file_idx); string_to_file ( file_name || '.graph', srcgraph, -2 ); string_to_file ( file_name, sprintf ( '# Dump of graph <%s>, as of %s\n', srcgraph, CAST (NOW() AS VARCHAR) ), -2 ); env := vector (dict_new (16000), 0, '', '', '', 0, 0, 0, 0); ses := string_output (); FOR (SELECT * FROM ( SPARQL DEFINE input:storage "" SELECT ?s ?p ?o { GRAPH `iri(?:srcgraph)` { ?s ?p ?o } } ) AS sub OPTION (LOOP)) DO { http_ttl_triple (env, "s", "p", "o", ses); ses_len := length (ses); IF (ses_len > max_ses_len) { file_len := file_len + ses_len; IF (file_len > file_length_limit) { http (' .\n', ses); string_to_file (file_name, ses, -1); file_len := 0; file_idx := file_idx + 1; file_name := sprintf ('%s%06d.ttl', out_file, file_idx); string_to_file ( file_name, sprintf ( '# Dump of graph <%s>, as of %s (part %d)\n', srcgraph, CAST (NOW() AS VARCHAR), file_idx), -2 ); env := vector (dict_new (16000), 0, '', '', '', 0, 0, 0, 0); } ELSE string_to_file (file_name, ses, -1); ses := string_output (); } } IF (LENGTH (ses)) { http (' .\n', ses); string_to_file (file_name, ses, -1); } } ;
Example 2
create procedure dump_rdftriples_to_ttl(inout triples any, inout ses any) { declare env any; declare tcount, tctr integer; tcount := length (triples); if (0 = tcount) { http ('# Empty TURTLE\n', ses); return; } env := vector (dict_new (__min (tcount, 16000)), 0, '', '', '', 0, 0, 0, 0); { whenever sqlstate '*' goto end_pred_sort; rowvector_subj_sort (triples, 1, 1); end_pred_sort: ; } { whenever sqlstate '*' goto end_subj_sort; rowvector_subj_sort (triples, 0, 1); end_subj_sort: ; } for (tctr := 0; tctr < tcount; tctr := tctr + 1) { http_ttl_triple (env, triples[tctr][0], triples[tctr][1], triples[tctr][2], ses); } http (' .', ses); } ;