1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-07 07:12:34 +02:00
2010-01-24 09:19:39 +00:00

128 lines
3.3 KiB
C

/* -*- Mode: c; c-basic-offset: 2 -*-
*
* example5.c - Redland example code using querying
*
* Copyright (C) 2004-2008, David Beckett http://www.dajobe.org/
* Copyright (C) 2004-2004, University of Bristol, UK http://www.bristol.ac.uk/
*
* This package is Free Software and part of Redland http://librdf.org/
*
* It is licensed under the following three licenses as alternatives:
* 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
* 2. GNU General Public License (GPL) V2 or any newer version
* 3. Apache License, V2.0 or any newer version
*
* You may not use this file except in compliance with at least one of
* the above three licenses.
*
* See LICENSE.html or LICENSE.txt at the top of this package for the
* complete terms and further detail along with the license texts for
* the licenses in COPYING.LIB, COPYING and LICENSE-2.0.txt respectively.
*
*
*/
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdarg.h>
#include <redland.h>
/* one prototype needed */
int main(int argc, char *argv[]);
int
main(int argc, char *argv[])
{
char *program=argv[0];
librdf_world* world;
librdf_storage *storage;
librdf_model* model;
const char *parser_name;
librdf_parser* parser;
librdf_query* query;
librdf_query_results* results;
librdf_uri *uri;
char *query_string=NULL;
world=librdf_new_world();
librdf_world_open(world);
if(argc !=3) {
fprintf(stderr, "USAGE: %s CONTENT-URI QUERY-STRING\n", program);
return 1;
}
uri=librdf_new_uri(world, argv[1]);
query_string=argv[2];
model=librdf_new_model(world, storage=librdf_new_storage(world, "hashes", "test", "new='yes',hash-type='bdb',dir='.'"), NULL);
if(!model || !storage) {
fprintf(stderr, "%s: Failed to make model or storage\n", program);
return 1;
}
parser_name=raptor_guess_parser_name(NULL, NULL, NULL, 0, librdf_uri_as_string(uri));
parser=librdf_new_parser(world, parser_name, NULL, NULL);
librdf_parser_parse_into_model(parser, uri, NULL, model);
librdf_free_parser(parser);
librdf_free_uri(uri);
query=librdf_new_query(world, "rdql", NULL, NULL, query_string);
results=librdf_model_query_execute(model, query);
if(!results) {
fprintf(stderr, "%s: Query of model with '%s' failed\n",
program, query_string);
return 1;
}
while(!librdf_query_results_finished(results)) {
const char **names=NULL;
librdf_node* values[10];
if(librdf_query_results_get_bindings(results, &names, values))
break;
fputs("result: [", stdout);
if(names) {
int i;
for(i=0; names[i]; i++) {
fprintf(stdout, "%s=", names[i]);
if(values[i]) {
librdf_node_print(values[i], stdout);
librdf_free_node(values[i]);
} else
fputs("NULL", stdout);
if(names[i+1])
fputs(", ", stdout);
}
}
fputs("]\n", stdout);
librdf_query_results_next(results);
}
fprintf(stdout, "%s: Query returned %d results\n", program,
librdf_query_results_get_count(results));
librdf_free_query_results(results);
librdf_free_query(query);
librdf_free_model(model);
librdf_free_storage(storage);
librdf_free_world(world);
#ifdef LIBRDF_MEMORY_DEBUG
librdf_memory_report(stderr);
#endif
/* keep gcc -Wall happy */
return(0);
}