File: query_url.pl

package info (click to toggle)
librdf-query-perl 2.919-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,580 kB
  • sloc: perl: 30,628; javascript: 131; sh: 13; makefile: 2
file content (53 lines) | stat: -rwxr-xr-x 1,443 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env perl

use strict;
use warnings;
use RDF::Query;

unless (@ARGV) {
	print STDERR <<"END";
USAGE: $0 query.rq http://path/to/data.rdf

Reads in a SPARQL query from query.rq, and loads RDF data from the supplied URL.
The SPARQL query is executed against a triplestore containing the loaded RDF,
and query results are printed to standard output.

END
	exit;
}

# get the query file from the arguments array
my $query_file	= shift(@ARGV);

#open the query file and read in the query
my $sparql	= do { local($/) = undef; open(my $fh, '<:utf8', $query_file); <$fh> };

# construct the query object
my $query	= RDF::Query->new( $sparql );

unless ($query) {
	# the query couldn't be constructed. print out the reason why.
	warn RDF::Query->error;
	exit;
}

# create a temporary triplestore (in memory), and wrap it into a model
my $store	= RDF::Trine::Store::DBI->temporary_store();
my $model	= RDF::Trine::Model->new( $store );


# load the RDF data from the url into the model.
# the parse_url_into_model method will attempt to guess the appropriate format for parsing.
my $url	= shift(@ARGV);
RDF::Trine::Parser->parse_url_into_model( $url, $model );

# execute the query against data contained in the model
my $iter	= $query->execute( $model );

# print the results as a string to standard output
print $iter->as_string;

### or, if you want to iterator over each result row:
# while (my $s = $iter->next) {
# 	print $s . "\n";
# }