Esempio n. 1
0
SLV2Value
slv2_results_get_binding_value(SLV2Results results, unsigned index)
{
	return slv2_value_from_librdf_node(results->world,
			librdf_query_results_get_binding_value(
					results->rdf_results, index));
}
Esempio n. 2
0
SLV2Values
slv2_query_get_variable_bindings(SLV2World   world,
                                 SLV2Results results,
                                 int         variable)
{
	SLV2Values result = NULL;

    if (!librdf_query_results_finished(results->rdf_results))
		result = slv2_values_new();

	while (!librdf_query_results_finished(results->rdf_results)) {
		librdf_node* node = librdf_query_results_get_binding_value(results->rdf_results, variable);

		if (node == NULL) {
			fprintf(stderr, "SLV2 ERROR: Variable %d bound to NULL.\n", variable);
			librdf_query_results_next(results->rdf_results);
			continue;
		}

		SLV2Value val = slv2_value_from_librdf_node(world, node);
		if (val)
			raptor_sequence_push(result, val);

		librdf_free_node(node);
		librdf_query_results_next(results->rdf_results);
	}

    return result;
}
Esempio n. 3
0
void
slv2_port_get_range(SLV2Plugin p, 
                    SLV2Port   port,
                    SLV2Value* def,
                    SLV2Value* min,
                    SLV2Value* max)
{
	if (def)
		*def = NULL;
	if (min)
		*min = NULL;
	if (max)
		*max = NULL;

	char* query = slv2_strjoin(
			"SELECT DISTINCT ?def ?min ?max WHERE {\n"
			"<", slv2_value_as_uri(p->plugin_uri), "> lv2:port ?port .\n"
			"?port lv2:symbol \"", slv2_value_as_string(port->symbol), "\".\n",
			"OPTIONAL { ?port lv2:default ?def }\n",
			"OPTIONAL { ?port lv2:minimum ?min }\n",
			"OPTIONAL { ?port lv2:maximum ?max }\n",
			"\n}", NULL);
	
	librdf_query_results* results = slv2_plugin_query(p, query);

    while (!librdf_query_results_finished(results)) {
		librdf_node* def_node = librdf_query_results_get_binding_value(results, 0);
		librdf_node* min_node = librdf_query_results_get_binding_value(results, 1);
		librdf_node* max_node = librdf_query_results_get_binding_value(results, 2);

		if (def && def_node && !*def)
			*def = slv2_value_new_librdf_node(p->world, def_node);
		if (min && min_node && !*min)
			*min = slv2_value_new_librdf_node(p->world, min_node);
		if (max && max_node && !*max)
			*max = slv2_value_new_librdf_node(p->world, max_node);

		if ((!def || *def) && (!min || *min) && (!max || *max))
			break;

		librdf_query_results_next(results);
	}
			
	librdf_free_query_results(results);

	free(query);
}
Esempio n. 4
0
  RdfStorePrivate::ResultMap RdfStorePrivate::ExecuteTupleQuery(const std::string& query) const
  {
    RdfStorePrivate::ResultMap resultMap;

    const std::string completeQuery = this->PrependPrefixes(query);

    librdf_query* rdfQuery = librdf_new_query(m_World, "sparql", nullptr, (const unsigned char*) completeQuery.c_str(), nullptr);

    if (!rdfQuery) return resultMap;

    librdf_query_results* results = librdf_query_execute(rdfQuery, m_Model);

    if (!results)
    {
      librdf_free_query(rdfQuery);
      return resultMap;
    }

    if (!librdf_query_results_is_bindings(results))
    {
      librdf_free_query_results(results);
      librdf_free_query(rdfQuery);
      return resultMap;
    }

    while (!librdf_query_results_finished(results))
    {
      int count = librdf_query_results_get_bindings_count(results);

      for (int i = 0; i < count; ++i)
      {
        const char *name = librdf_query_results_get_binding_name(results, i);

        if (!name) continue;

        std::string key = name;

        std::list<RdfNode> list;

        if(!resultMap[key].empty())
        {
          list = resultMap[key];
        }

        librdf_node *node = librdf_query_results_get_binding_value(results, i);

        list.push_back(LibRdfNodeToRdfNode(node));

        resultMap[key] = list;
      }

      librdf_query_results_next(results);
    }

    librdf_free_query_results(results);
    librdf_free_query(rdfQuery);

    return resultMap;
  }
Esempio n. 5
0
SLV2ScalePoints
slv2_port_get_scale_points(SLV2Plugin p,
                           SLV2Port port)
{
	char* query = slv2_strjoin(
			"SELECT DISTINCT ?value ?label WHERE {\n"
			"<", slv2_value_as_uri(p->plugin_uri), "> lv2:port ?port .\n"
			"?port  lv2:symbol \"", slv2_value_as_string(port->symbol), "\" ;\n",
			"       lv2:scalePoint ?point .\n"
			"?point rdf:value ?value ;\n"
			"       rdfs:label ?label .\n"
			"\n} ORDER BY ?value", NULL);
	
	librdf_query_results* results = slv2_plugin_query(p, query);
	
	SLV2ScalePoints ret = NULL;

    if (!librdf_query_results_finished(results))
		ret = slv2_scale_points_new();

    while (!librdf_query_results_finished(results)) {
	
		librdf_node* value_node = librdf_query_results_get_binding_value(results, 0);
		librdf_node* label_node = librdf_query_results_get_binding_value(results, 1);

		SLV2Value value = slv2_value_new_librdf_node(p->world, value_node);
		SLV2Value label = slv2_value_new_librdf_node(p->world, label_node);

		raptor_sequence_push(ret, slv2_scale_point_new(value, label));
		
		librdf_query_results_next(results);
	}
			
	librdf_free_query_results(results);

	free(query);

	assert(!ret || slv2_values_size(ret) > 0);

	return ret;
}
Esempio n. 6
0
void run_query2(librdf_world* world, librdf_model* model, const std::string& q)
{

    librdf_stream* strm;

    std::cout << "** Query: " << q << std::endl;

    librdf_uri* uri1 =
	librdf_new_uri(world, (const unsigned char*) "http://bunchy.org");

    if (uri1 == 0)
	throw std::runtime_error("Couldn't parse URI");
    
    librdf_uri* uri2 =
	librdf_new_uri(world, (const unsigned char*) "http://bunchy.org");
    if (uri2 == 0)
	throw std::runtime_error("Couldn't parse URI");
    
    librdf_query* qry =
	librdf_new_query(world, "sparql", uri1,
			 (const unsigned char*) q.c_str(),
			 uri2);
    
    librdf_free_uri(uri1);
    librdf_free_uri(uri2);
    
    if (qry == 0)
	throw std::runtime_error("Couldn't parse query.");
    
    librdf_query_results* results = librdf_query_execute(qry, model);
    if (results == 0)
	throw std::runtime_error("Couldn't execute query");
    
    librdf_free_query(qry);

    std::cout << "--------------------------------------------------------"
	      << std::endl;

    while (true) {
      
	if (librdf_query_results_finished(results)) break;
      
	int bcount = librdf_query_results_get_bindings_count(results);
	if (bcount < 0)
	    throw std::runtime_error("Couldn't get query bindings count");
      
	for(int i = 0; i < bcount; i++) {
	
	    if (i != 0) std::cout << " ";
	
	    librdf_node* value =
		librdf_query_results_get_binding_value(results, i);
	
	    if (value == 0)
		throw std::runtime_error("Couldn't get results binding");
	
	    output_node(value);

	    librdf_free_node(value);

	}

	std::cout << std::endl;

	librdf_query_results_next(results);

    }

    std::cout << "--------------------------------------------------------"
	      << std::endl;

    librdf_free_query_results(results);
    
}
Esempio n. 7
0
int 
print_query_results(librdf_world* world, librdf_model* model, librdf_query_results *results)
{
  int i;
  char *name;
  librdf_stream* stream;
  librdf_serializer* serializer;
  const char *query_graph_serializer_syntax_name="rdfxml";

  if(librdf_query_results_is_bindings(results)) {
    fprintf(stdout, ": Query returned bindings results:\n");

    while(!librdf_query_results_finished(results)) {
      fputs("result: [", stdout);
      for(i=0; i<librdf_query_results_get_bindings_count(results); i++) {
	librdf_node *value=librdf_query_results_get_binding_value(results, i);
	name=(char*)librdf_query_results_get_binding_name(results, i);

	if(i>0)
	fputs(", ", stdout);
	fprintf(stdout, "%s=", name);
	if(value) {
	  librdf_node_print(value, stdout);
	  librdf_free_node(value);
	} else
	fputs("NULL", stdout);
      }
      fputs("]\n", stdout);

      librdf_query_results_next(results);
    }
    fprintf(stdout, ": Query returned %d results\n", librdf_query_results_get_count(results));
  } else if(librdf_query_results_is_boolean(results)) {
    fprintf(stdout, ": Query returned boolean result: %s\n", librdf_query_results_get_boolean(results) ? "true" : "false");
  } else if(librdf_query_results_is_graph(results)) {
    librdf_storage* tmp_storage;
    librdf_model* tmp_model;

    tmp_storage=librdf_new_storage(world, NULL, NULL, NULL);
    tmp_model=librdf_new_model(world, tmp_storage, NULL);

    fprintf(stdout, ": Query returned graph result:\n");

    stream=librdf_query_results_as_stream(results);
    if(!stream) {
      fprintf(stderr, ": Failed to get query results graph\n");
      return -1;
    }
    librdf_model_add_statements(tmp_model, stream);
    librdf_free_stream(stream);

    fprintf(stdout, ": Total %d triples\n", librdf_model_size(model));

    serializer=librdf_new_serializer(world, query_graph_serializer_syntax_name, NULL, NULL);
    if(!serializer) {
      fprintf(stderr, ": Failed to create serializer type %s\n", query_graph_serializer_syntax_name);
      return -1;
    }

    librdf_serializer_serialize_model_to_file_handle(serializer, stdout, NULL, tmp_model);
    librdf_free_serializer(serializer);
    librdf_free_model(tmp_model);
    librdf_free_storage(tmp_storage);
  } else {
    fprintf(stdout, ": Query returned unknown result format\n");
    return -1;
  }
  return 0;
}