it seems that if i write a triple with 3 uris like this:
<uri:foo> <uri:bar> <uri:baz>.
in a SPARQL query, it will return no results, even if such a triple is in the graph.


pResults: 29a98; not finished
count: 4
pResults: 29af8; not finished
count: 2
pResults: 299d8; not finished
count: 2
pResults: 29ad8; not finished
count: 2
librdf warning URI file:///home/ms216673/rdf/:1 - Variable s was selected but is unused in the query. librdf warning URI file:///home/ms216673/rdf/:1 - Variable p was selected but is unused in the query. librdf warning URI file:///home/ms216673/rdf/:1 - Variable o was selected but is unused in the query.
pResults: 29b28; is finished
count: 0
pResults: 29bc8; is finished
count: 0


see attached program: queries 1-4 seem to work
query 5 returns no result, but should return one result with nulls
query 6 returns no result, but should return 2 results.

here is the output of the same queries with Sesame 2.0:


SELECT ?s ?p ?o FROM <uri:context> WHERE { ?foo ?bar ?baz . ?s ?p ?o. }
result: uri:baz uri:foo uri:bar
result: uri:bar uri:baz uri:foo
result: uri:baz uri:foo uri:bar
result: uri:bar uri:baz uri:foo
end results.

SELECT ?s ?p ?o FROM <uri:context> WHERE { <uri:foo> ?bar ?baz . ?s ?p ?o. }
result: uri:baz uri:foo uri:bar
result: uri:bar uri:baz uri:foo
end results.

SELECT ?s ?p ?o FROM <uri:context> WHERE { <uri:foo> <uri:bar> ?baz . ?s ?p ?o. }
result: uri:baz uri:foo uri:bar
result: uri:bar uri:baz uri:foo
end results.

SELECT ?s ?p ?o FROM <uri:context> WHERE { <uri:foo> ?bar <uri:baz> . ?s ?p ?o. }
result: uri:baz uri:foo uri:bar
result: uri:bar uri:baz uri:foo
end results.

SELECT ?s ?p ?o FROM <uri:context> WHERE { <uri:foo> <uri:bar> <uri:baz>. }
result: <null> <null> <null>
end results.

SELECT ?s ?p ?o FROM <uri:context> WHERE { <uri:foo> <uri:bar> <uri:baz>. ?s ?p ?o. }
result: uri:baz uri:foo uri:bar
result: uri:bar uri:baz uri:foo
end results.


oh, and serializing the result of a query does not seem to work either (see FIXME in attached file).

michael

--
"The fact that Pythonesque is a word in the dictionary shows the extent
 to which we failed." -- A Monty Python member (I forgot which) on their
attempt to create comedy that could not be defined.



#include <librdf.h>

void query(librdf_world *pWorld, librdf_model *pModel, unsigned char* query)
{
    librdf_query *pQuery = librdf_new_query(pWorld, "sparql", NULL, query, NULL);
    librdf_query_results *pResults = librdf_query_execute(pQuery, pModel);
    fprintf(stderr, "pResults: %p; %s finished\n", pResults,
        librdf_query_results_finished(pResults) ? "is" : "not" );
    int count = 0;
    while (!librdf_query_results_finished(pResults)) {
        ++count;
        librdf_query_results_next(pResults);
    }
    fprintf(stderr, "count: %d\n", count);

/* FIXME this does not seem to work...    
    unsigned char SXML[]
        = "http://www.w3.org/TR/2004/WD-rdf-sparql-XMLres-20041221/";;
    librdf_uri* pSXML = librdf_new_uri(pWorld, SXML);
    librdf_query_results_to_file_handle(pResults, stderr, pSXML, NULL);
    unsigned char* str = librdf_query_results_to_string(pResults, pSXML, NULL);
*/
}

int main()
{
    librdf_world *pWorld = librdf_new_world();
    librdf_world_open(pWorld);
    librdf_storage *pStorage = librdf_new_storage(pWorld,
//        "memory", NULL, "contexts='yes'");
        "hashes", NULL, "contexts='yes',hash-type='memory'");
    librdf_model *pModel = librdf_new_model(pWorld, pStorage, NULL);
    librdf_node *pContext = librdf_new_node_from_uri_string(pWorld,
        (const unsigned char*) ("uri:context"));
    librdf_node *pFoo = librdf_new_node_from_uri_string(pWorld,
        (const unsigned char*) ("uri:foo"));
    librdf_node *pBar = librdf_new_node_from_uri_string(pWorld,
        (const unsigned char*) ("uri:bar"));
    librdf_node *pBaz = librdf_new_node_from_uri_string(pWorld,
        (const unsigned char*) ("uri:baz"));

    librdf_statement *pStatement =
        librdf_new_statement_from_nodes(pWorld, pFoo, pBar, pBaz);
    librdf_model_context_add_statement(pModel, pContext, pStatement);
    librdf_statement *pStatement2 =
        librdf_new_statement_from_nodes(pWorld, pBar, pBaz, pFoo);
    librdf_model_context_add_statement(pModel, pContext, pStatement2);

    unsigned char query1[] =
"SELECT ?s ?p ?o FROM <uri:context> WHERE { ?foo ?bar ?baz . ?s ?p ?o. }";
    unsigned char query2[] =
"SELECT ?s ?p ?o FROM <uri:context> WHERE { <uri:foo> ?bar ?baz . ?s ?p ?o. }";
    unsigned char query3[] =
"SELECT ?s ?p ?o FROM <uri:context> WHERE { <uri:foo> <uri:bar> ?baz . ?s ?p ?o. }";
    unsigned char query4[] =
"SELECT ?s ?p ?o FROM <uri:context> WHERE { <uri:foo> ?bar <uri:baz> . ?s ?p ?o. }";
    unsigned char query5[] =
"SELECT ?s ?p ?o FROM <uri:context> WHERE { <uri:foo> <uri:bar> <uri:baz>. }";
    unsigned char query6[] =
"SELECT ?s ?p ?o FROM <uri:context> WHERE { <uri:foo> <uri:bar> <uri:baz>. ?s ?p ?o. }";

    query(pWorld, pModel, query1);
    query(pWorld, pModel, query2);
    query(pWorld, pModel, query3);
    query(pWorld, pModel, query4);
    query(pWorld, pModel, query5);
    query(pWorld, pModel, query6);

    return 0;
}

_______________________________________________
redland-dev mailing list
[email protected]
http://lists.librdf.org/mailman/listinfo/redland-dev

Reply via email to