Marco Antonelli wrote:
> Update of /cvsroot/monetdb/MonetDB5/src/modules/mal
> In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv9457/src/modules/mal
>
> Modified Files:
> rdf.mx
> Log Message:
The log message is missing...
It is always nice to have a summary of what you are check in...
It also helps the developers in future debugging tasks....
Romulo
>
>
> U rdf.mx
> Index: rdf.mx
> ===================================================================
> RCS file: /cvsroot/monetdb/MonetDB5/src/modules/mal/rdf.mx,v
> retrieving revision 1.1
> retrieving revision 1.2
> diff -u -d -r1.1 -r1.2
> --- rdf.mx 26 Mar 2008 12:51:06 -0000 1.1
> +++ rdf.mx 1 Apr 2008 14:48:08 -0000 1.2
> @@ -41,7 +41,7 @@
> address RDFimportGraph
> comment "import a graph in a named rdf db";
>
> -command exportGraph( url:str, db:str, graph:str) : void
> +command exportGraph( url:str, db:str, graph:str, order:str, syntax:str) :
> void
> address RDFexportGraph
> comment "export a graph in a named rdf db";
>
> @@ -62,6 +62,7 @@
> #include <raptor.h>
>
> #define rdf_export extern
> +#define RET_MAXLEN 2048
>
> typedef struct {
> lng *cur;
> @@ -73,7 +74,7 @@
> oid *o;
> oid *p;
> oid *s;
> - str ret;
> + str *ret;
> } triple_handler_vars;
> //TODO
> //static lng RDFestimate(str url) {
> @@ -91,34 +92,31 @@
>
> void message_handler(void *user_data, raptor_locator *locator, const char
> *message)
> {
> - unsigned int maxlength = 2048;
> - char finalmessage[maxlength];
> size_t length = 0;
> - char *msg = finalmessage;
> str *ret = (str *)user_data;
> + str msg = *ret;
> if (locator->uri)
> {
> - snprintf(msg, maxlength, "In URI location \"%s\": ",
> raptor_uri_as_string(locator->uri));
> - length = strlen(finalmessage);
> - msg = finalmessage + length*(sizeof(char));
> + snprintf(msg, RET_MAXLEN, "In URI location \"%s\": ",
> raptor_uri_as_string(locator->uri));
> + length = strlen(*ret);
> + msg = *ret + length * (sizeof(char));
> }
> - if (locator->line >=0 && length < maxlength-1)
> + if (locator->line >=0 && length < RET_MAXLEN-1)
> {
> - snprintf(msg, maxlength-length, "at line %d: ", locator->line);
> - length = strlen(finalmessage);
> - msg = finalmessage + length*(sizeof(char));
> + snprintf(msg, RET_MAXLEN-length, "at line %d: ", locator->line);
> + length = strlen(*ret);
> + msg = *ret + length * (sizeof(char));
> }
> - if (locator->column >=0 && length < maxlength-1)
> + if (locator->column >=0 && length < RET_MAXLEN-1)
> {
> - snprintf(msg, maxlength-length, "at column %d: ",
> locator->column);
> - length = strlen(finalmessage);
> - msg = finalmessage + length*(sizeof(char));
> + snprintf(msg, RET_MAXLEN-length, "at column %d: ",
> locator->column);
> + length = strlen(*ret);
> + msg = *ret + length * (sizeof(char));
> }
> - if (message && length < maxlength-1)
> + if (message && length < RET_MAXLEN-1)
> {
> - snprintf(msg, maxlength-length, "%s\n", message);
> + snprintf(msg, RET_MAXLEN-length, "%s\n", message);
> }
> - *ret=finalmessage;
> }
>
> @= RDFins
> @@ -133,7 +131,7 @@
> bun = (BUN) map->batCount;
> if (!BUNappend(map,(ptr)@1v, TRUE)) {
> GDKerror("RDFimport: @1[" LLFMT "] = %s, BUNappend fails\n",
> cur, @1v);
> - data->ret = RDFimport_fail(map,ob,pb,sb);
> + *(data->ret) = RDFimport_fail(map,ob,pb,sb);
> }
> }
> /* s,p,o[cur] are set to the virtual oid which is bun s p and o are
> arrays of oid */
> @@ -153,9 +151,10 @@
> oid *o = data->o;
> oid *p = data->p;
> oid *s = data->s;
> + str *ret = data->ret;
> BATiter mi = bat_iterator(BATmirror(map));
> BUN bun;
> - if (data->ret!=MAL_SUCCEED)
> + if (strlen(*ret)!=0)
> return;
> /* get the subject */
> if (triple->subject_type == RAPTOR_IDENTIFIER_TYPE_RESOURCE)
> @@ -164,7 +163,7 @@
> sv = (str)triple->subject;
> else
> {
> - data->ret="Unexpected subject type";
> + *ret="Unexpected subject type";
> return;
> }
>
> @@ -173,7 +172,7 @@
> pv = (str)raptor_uri_as_string((raptor_uri *)triple->predicate);
> else
> {
> - data->ret="Unexpected predicate type";
> + *ret="Unexpected predicate type";
> return;
> }
>
> @@ -190,18 +189,18 @@
> ov = (str)raptor_uri_as_string((raptor_uri*)triple->object);
> else
> {
> - data->ret="Unexpected object type";
> + *ret="Unexpected object type";
> return;
> }
>
> @:RDFins(o)@
> - if (data->ret == MAL_SUCCEED)
> + if (strlen(*ret)==0)
> {
> @:RDFins(p)@
> - if (data->ret == MAL_SUCCEED)
> + if (strlen(*ret)==0)
> {
> @:RDFins(s)@
> - if (data->ret == MAL_SUCCEED)
> + if (strlen(*ret)==0)
> {
> if (++(*cur) > *lim) {
> *lim *= 2;
> @@ -209,7 +208,7 @@
> pb = BATextend(pb, *lim);
> sb = BATextend(sb, *lim);
> if (ob == NULL || pb == NULL || sb == NULL)
> - data->ret = RDFimport_fail(map,ob,pb,sb);
> + *ret = RDFimport_fail(map,ob,pb,sb);
> o = (oid *) Tloc(ob, BUNfirst(ob));
> p = (oid *) Tloc(pb, BUNfirst(pb));
> s = (oid *) Tloc(sb, BUNfirst(sb));
> @@ -223,6 +222,7 @@
> RDFimport_(BAT** S, BAT** P, BAT **O, str url, BAT *map) {
> raptor_parser *parser;
> raptor_uri *rdf_file;
> + str ret;
> raptor_init();
> parser = raptor_new_parser("rdfxml");
> if (parser)
> @@ -244,41 +244,15 @@
> p = (oid *) Tloc(pb, BUNfirst(pb));
> s = (oid *) Tloc(sb, BUNfirst(sb));
>
> - //char obuf[20],*op, pbuf[20],*pp, sbuf[20],*sp;
> - //str ov, pv, sv;
> -
> if (map == NULL || ob == NULL || pb == NULL || sb == NULL)
> return RDFimport_fail(map,ob,pb,sb);
> -
> -
> -
> -// strcpy(obuf, "object"); for(ov=op=obuf; *op; op++);
> op[1]=0;
> -// strcpy(pbuf, "predicate"); for(pv=pp=pbuf; *pp; pp++);
> pp[1]=0;
> -// strcpy(sbuf, "subject"); for(sv=sp=sbuf; *sp; sp++);
> sp[1]=0;
> -// while (cur < 8 /*redland gives me (ov,pv,sv)*/ ) {
> -// *op = (cur & 4)?'1':'0';
> -// *pp = (cur & 2)?'1':'0';
> -// *sp = (cur & 1)?'1':'0';
> -// RDFins(o) /* mx macros*/
> -// RDFins(p)
> -// RDFins(s)
> -//
> -// if (++cur > lim) {
> -// lim *= 2;
> -// ob = BATextend(ob, lim);
> -// pb = BATextend(pb, lim);
> -// sb = BATextend(sb, lim);
> -// if (ob == NULL || pb == NULL || sb == NULL)
> -// return RDFimport_fail(map,ob,pb,sb);
> -// o = (oid *) Tloc(ob, BUNfirst(ob));
> -// p = (oid *) Tloc(pb, BUNfirst(pb));
> -// s = (oid *) Tloc(sb, BUNfirst(sb));
> -// }
> -// }
>
> - data = malloc(sizeof(triple_handler_vars));
> + data = GDKmalloc(sizeof(triple_handler_vars));
> if (data)
> {
> + char ret_array[RET_MAXLEN];
> + str ret_ptr = ret_array;
> + ret_array[0] = '\0';
> data->cur = cur;
> data->lim = lim;
> data->map =map;
> @@ -288,18 +262,18 @@
> data->s = s;
> data->p = p;
> data->o = o;
> - data->ret = MAL_SUCCEED;
> + data->ret = &ret_ptr;
> raptor_set_statement_handler(parser, data,
> triples_handler);
> - raptor_set_fatal_error_handler(parser,
> &data->ret, message_handler);
> - raptor_set_error_handler(parser, &data->ret,
> message_handler);
> - raptor_set_warning_handler(parser, &data->ret,
> message_handler);
> - //raptor_set_parser_strict(parser, TRUE);
> + raptor_set_fatal_error_handler(parser,
> &ret_ptr, message_handler);
> + raptor_set_error_handler(parser, &ret_ptr,
> message_handler);
> + raptor_set_warning_handler(parser, &ret_ptr,
> message_handler);
> + raptor_set_parser_strict(parser, TRUE);
>
> if (raptor_parse_file(parser, rdf_file, NULL) == 0)
> {
> - /* do something with redland */
> - if (data->ret == MAL_SUCCEED)
> + if(strlen(ret_ptr)==0)
> {
> + ret = MAL_SUCCEED;
> BATseqbase(ob, 0);
> BATseqbase(pb, 0);
> BATseqbase(sb, 0);
> @@ -312,30 +286,31 @@
> BATkey(BATmirror(ob), FALSE);
> BATkey(BATmirror(sb), FALSE);
> BATkey(BATmirror(pb), FALSE);
> -
> - free(data);
> - raptor_free_parser(parser);
> - raptor_free_uri(rdf_file);
> - raptor_finish();
> - return MAL_SUCCEED;
> }
> - else
> - throw(MAL, "rdf.import", data->ret);
> }
> else
> - throw(MAL, "rdf.import", "RDF parsing error");
> + ret = "RDF parsing error";
> + GDKfree(data);
> }
> else
> - throw(MAL, "rdf.import", "triple_handler_vars malloc
> failed");
> + ret = "triple_handler_vars malloc failed";
> + raptor_free_uri(rdf_file);
> }
> else
> - throw(MAL, "rdf.import", "Unexistent file: \"%s\"",
> url);
> + ret = "Unexistent url";
> + raptor_free_parser(parser);
> }
> else
> - throw(MAL, "rdf.import", "Could not create a Redland parser");
> + ret = "Could not create a Redland parser";
> + raptor_finish();
> + if (ret != MAL_SUCCEED)
> + throw(MAL, "rdf.import", ret);
> +
> + return MAL_SUCCEED;
> }
>
> -rdf_export str RDFimport(int* S, int* P, int* O, str *url, bat m)
> +rdf_export
> +str RDFimport(int* S, int* P, int* O, str *url, bat m)
> {
> BAT *sb = NULL, *ob=NULL, *pb = NULL, *map = BATdescriptor(m);
> str ret;
> @@ -352,45 +327,109 @@
> }
>
> static str
> -RDFexport_(str url, bat M, bat S, bat P, bat O) {
> - str ret = "RDFexport failed to obtain bats";
> +RDFexport_(str url, bat M, bat S, bat P, bat O, str syntax)
> +{
> + str ret = MAL_SUCCEED;
> BAT *map = BATdescriptor(M);
> - if (map) {
> + (void)url;
> + if (map)
> + {
> BAT *sb = BATdescriptor(S);
> - if (sb) {
> + if (sb)
> + {
> BAT *pb = BATdescriptor(P);
> - if (pb) {
> + if (pb)
> + {
> BAT *ob = BATdescriptor(O);
> - if (ob) {
> - lng i, cnt = BATcount(ob);
> + if (ob)
> + {
> + raptor_serializer* rdf_serializer;
> + const char *filename="/ufs/antonell/Desktop/output.rdf";
> + lng i, cnt = BATcount(ob);
> oid *o = (oid *) Tloc(ob, BUNfirst(ob));
> oid *p = (oid *) Tloc(pb, BUNfirst(pb));
> oid *s = (oid *) Tloc(sb, BUNfirst(sb));
> //var_t position in heap
> var_t *off = (var_t *) Tloc(map, BUNfirst(map));
> str base = (str) map->T->vheap->base;//heap first
> position
> -
> - for(i=0; i <cnt; i++) {
> - str ov = base + off[o[i]];
> - str pv = base + off[p[i]];
> - str sv = base + off[s[i]];
> - stream_printf(GDKout, "'%s' '%s' '%s' '%s'\n", ov,
> pv, sv, url);
> +
> + raptor_init();
> + rdf_serializer = raptor_new_serializer(syntax);
> +
> + if (rdf_serializer)
> + {
> + char ret_array[RET_MAXLEN];
> + str ret_ptr = ret_array;
> + ret_array[0] = '\0';
> + raptor_serializer_set_error_handler(rdf_serializer,
> &ret_ptr, message_handler);
> +
> raptor_serializer_set_warning_handler(rdf_serializer, &ret_ptr,
> message_handler);
> + if
> (raptor_serialize_start_to_filename(rdf_serializer, filename) == 0)
> + {
> + for(i=0; i <cnt; i++)
> + {
> + if (strlen(ret_ptr)==0)
> + {
> + raptor_statement *triple;
> + str ov = base + off[o[i]];
> + str pv = base + off[p[i]];
> + str sv = base + off[s[i]];
> + //stream_printf(GDKout, "'%s' '%s'
> '%s' '%s'\n", ov, pv, sv, url);
> + /* Make
> a triple with URI subject, URI predicate, literal object */
> +
> triple=GDKmalloc(sizeof(raptor_statement));
> +
> +
> triple->subject=(void*)raptor_new_uri((const unsigned char*)sv);
> +
> triple->subject_type=RAPTOR_IDENTIFIER_TYPE_RESOURCE;
> +
> +
> triple->predicate=(void*)raptor_new_uri((const unsigned char*)pv);
> +
> triple->predicate_type=RAPTOR_IDENTIFIER_TYPE_RESOURCE;
> +
> +
> triple->object=ov;
> +
> triple->object_type=RAPTOR_IDENTIFIER_TYPE_LITERAL;
> +
> //triple->object_literal_language=(const unsigned char*)"en";
> +
> triple->object_literal_language=NULL;
> +
> triple->object_literal_datatype = NULL;
> + /*
> Write the triple */
> + if
> (raptor_serialize_statement(rdf_serializer, triple)!=0)
> +
> ret="failed to serialize a statement";
> +
> + /*
> Delete the triple */
> +
> raptor_free_uri((raptor_uri*)triple->subject);
> +
> raptor_free_uri((raptor_uri*)triple->predicate);
> +
> GDKfree(triple);
> + }
> + }
> + ret = MAL_SUCCEED;
> + raptor_serialize_end(rdf_serializer);
> + }
> + else
> + ret = "raptor_serialize_start failed";
> + raptor_free_serializer(rdf_serializer);
> }
> - ret = MAL_SUCCEED;
> + else
> + ret = "raptor_new_serializer failed";
> + raptor_finish();
> BBPreleaseref(ob->batCacheid);
> - }
> + }
> + else
> + ret = "Failed to obtain O bat";
> BBPreleaseref(pb->batCacheid);
> - }
> + }
> + else
> + ret = "Failed to obtain P bat";
> BBPreleaseref(sb->batCacheid);
> - }
> + }
> + else
> + ret = "Failed to obtain S bat";
> BBPreleaseref(map->batCacheid);
> - }
> + }
> + else
> + ret = "Failed to obtain MAP bat";
> return ret;
> }
>
> str
> RDFexport(str *url, bat M, bat S, bat P, bat O) {
> - str ret = RDFexport_(*url, M, S, P, O);
> + str ret = RDFexport_(*url, M, S, P, O, "dummy syntax");
> if (ret != MAL_SUCCEED)
> throw(MAL, "RDFexport", ret);
> return MAL_SUCCEED;
> @@ -513,23 +552,23 @@
>
> ret = "RDFimportGraph: sorting failed";
> if (sorted) {
> - ret = @:sort(sb, pb, ob, Spo, sPo, spO)@
> + ret = @:sort(sb,pb,ob,Spo,sPo,spO)@
> if (ret == MAL_SUCCEED) {
> - ret = @:sort(sb, ob, pb, Sop, sOp, soP)@
> + ret = @:sort(sb,ob,pb,Sop,sOp,soP)@
> if (ret == MAL_SUCCEED) {
> BBPreclaim(sorted);
> sorted = BATmirror(BATsort(BATmirror(pb)));
> if (sorted) {
> - ret = @:sort(pb, ob,sb,Pos,pOs,poS)@
> + ret = @:sort(pb,ob,sb,Pos,pOs,poS)@
> if (ret == MAL_SUCCEED) {
> - ret = @:sort(pb, sb,ob,Pso,pSo,psO)@
> + ret = @:sort(pb,sb,ob,Pso,pSo,psO)@
> if (ret == MAL_SUCCEED) {
> BBPreclaim(sorted);
> sorted =
> BATmirror(BATsort(BATmirror(ob)));
> if (sorted) {
> - ret = @:sort(ob, pb, sb, Ops, oPs, opS)@
> + ret = @:sort(ob,pb,sb,Ops,oPs,opS)@
> if (ret == MAL_SUCCEED) {
> - ret = @:sort(ob, sb,
> pb,Osp,oSp,osP)@
> + ret =
> @:sort(ob,sb,pb,Osp,oSp,osP)@
> if (ret == MAL_SUCCEED) {
> ret = MAL_SUCCEED;
> goto succeed;
> @@ -572,15 +611,84 @@
> throw(MAL, "RDFimportGraph", ret);
> return MAL_SUCCEED;
> }
> -str RDFexportGraph(str *url, str *db, str *graph) {
> +
> +static str getBatNames(str db, str graph, char *s_buf,char *p_buf,char
> *o_buf, str order)
> +{
> + str err = "order may be only one among
> \"spo\",\"sop\",\"pso\",\"pos\",\"osp\",\"ops\"";
> + if (strlen(order)>3)
> + return err;
> + if (strcmp(order, "spo")==0)
> + {
> + snprintf(s_buf, 1024, "%s_%s_Spo", db, graph);
> + snprintf(p_buf, 1024, "%s_%s_sPo", db, graph);
> + snprintf(o_buf, 1024, "%s_%s_spO", db, graph);
> + }
> + else if (strcmp(order, "sop")==0)
> + {
> + snprintf(s_buf, 1024, "%s_%s_Sop", db, graph);
> + snprintf(o_buf, 1024, "%s_%s_sOp", db, graph);
> + snprintf(p_buf, 1024, "%s_%s_soP", db, graph);
> + }
> + else if (strcmp(order, "pos")==0)
> + {
> + snprintf(p_buf, 1024, "%s_%s_Pos", db, graph);
> + snprintf(o_buf, 1024, "%s_%s_pOs", db, graph);
> + snprintf(s_buf, 1024, "%s_%s_poS", db, graph);
> + }
> + else if (strcmp(order, "pso")==0)
> + {
> + snprintf(p_buf, 1024, "%s_%s_Pso", db, graph);
> + snprintf(s_buf, 1024, "%s_%s_pSo", db, graph);
> + snprintf(o_buf, 1024, "%s_%s_psO", db, graph);
> + }
> + else if (strcmp(order, "osp")==0)
> + {
> + snprintf(o_buf, 1024, "%s_%s_Osp", db, graph);
> + snprintf(s_buf, 1024, "%s_%s_oSp", db, graph);
> + snprintf(p_buf, 1024, "%s_%s_osP", db, graph);
> + }
> + else if (strcmp(order, "ops")==0)
> + {
> + snprintf(o_buf, 1024, "%s_%s_Ops", db, graph);
> + snprintf(p_buf, 1024, "%s_%s_oPs", db, graph);
> + snprintf(s_buf, 1024, "%s_%s_opS", db, graph);
> + }
> + else
> + return err;
> + return MAL_SUCCEED;
> +}
> +
> +static str checkSyntax(str syntax)
> +{
> + if ( //!strcmp(syntax, "atom") ||
> + !strcmp(syntax, "ntriples") ||
> + !strcmp(syntax, "rdfxml") ||
> + !strcmp(syntax, "rdfxml-abbrev") ||
> + !strcmp(syntax, "rdfxml-xmp") ||
> + !strcmp(syntax, "turtle") ||
> + //!strcmp(syntax, "rdfxml-xmp") ||
> + !strcmp(syntax, "rss-1.0") ||
> + !strcmp(syntax, "dot"))
> + {
> + return MAL_SUCCEED;
> + }
> + else
> + return "syntax may be only one among
> \"atom\",\"ntriples\",\"rdfxml\",\"rdfxml-abbrev\",\"rdfxml-xmp\",\"turtle\",\"rdfxml-xmp\",\"rss-1.0\",\"dot\"";
> +}
> +
> +str RDFexportGraph(int *d, str *url, str *db, str *graph, str *order, str
> *syntax)
> +{
> char m_buf[1024], o_buf[1024], p_buf[1024], s_buf[1024];
> bat map, ob, pb, sb;
> - str ret = "RDFexportGraph failed to obtain bats";
> -
> + str ret;
> + (void)d;
> + ret = checkSyntax(*syntax);
> + if (ret!= MAL_SUCCEED)
> + throw(MAL, "RDFexportGraph", ret);
> + ret = getBatNames(*db, *graph, s_buf, p_buf, o_buf, *order);
> + if (ret!= MAL_SUCCEED)
> + throw(MAL, "RDFexportGraph", ret);
> snprintf(m_buf, 1024, "%s_%s_map", *db, *graph);
> - snprintf(p_buf, 1024, "%s_%s_Ops", *db, *graph);
> - snprintf(o_buf, 1024, "%s_%s_oPs", *db, *graph);
> - snprintf(s_buf, 1024, "%s_%s_opS", *db, *graph);
> map = BBPindex(m_buf);
> if (map) {
> sb = BBPindex(s_buf);
> @@ -589,11 +697,19 @@
> if (pb) {
> ob = BBPindex(o_buf);
> if (ob) {
> - ret = RDFexport_(*url, map, sb, pb, ob);
> + ret = RDFexport_(*url, map, sb, pb, ob, *syntax);
> }
> + else
> + ret = "Failed to obtain O bat";
> }
> + else
> + ret = "Failed to obtain P bat";
> }
> + else
> + ret = "Failed to obtain S bat";
> }
> + else
> + ret = "Failed to obtain map bat";
> if (ret != MAL_SUCCEED)
> throw(MAL, "RDFexportGraph", ret);
> return MAL_SUCCEED;
>
>
> -------------------------------------------------------------------------
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services for
> just about anything Open Source.
> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
> _______________________________________________
> Monetdb-checkins mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/monetdb-checkins
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
Monetdb-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-developers