#!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use lib qw(. t); BEGIN { require "models.pl"; } my @files = map { "data/$_" } qw(foaf.xrdf); my (@data) = test_models_and_classes( @files ); use Test::More; plan tests => 1 + 15 * scalar(@data); use RDF::Trine::Iterator (qw(sgrep smap)); use_ok( 'RDF::Query' ); foreach my $data (@data) { my $model = $data->{'modelobj'}; print "\n#################################\n"; print "### Using model: $model\n\n"; { my $query = new RDF::Query ( <<"END", undef, undef, 'sparql' ); PREFIX foaf: SELECT ?person ?homepage WHERE { ?person a foaf:Person ; foaf:name "Gregory Todd Williams" ; foaf:homepage ?homepage . } END isa_ok( $query, 'RDF::Query' ); my $stream = $query->execute( $model ); isa_ok( $stream, 'RDF::Trine::Iterator' ); my @names = $stream->binding_names; is_deeply( \@names, [qw(person homepage)], 'binding_names' ); is( $stream->binding_name( 1 ), 'homepage', 'bindging_name' ); my $homepage = $stream->binding_value_by_name( 'person' ); ok( $homepage->isa('RDF::Trine::Node::Resource'), 'binding_value_by_name' ); is( $homepage->uri_value, 'http://kasei.us/about/foaf.xrdf#greg', 'binding_value_by_name' ); my @values = $stream->binding_values(); is( scalar(@values), 2, 'binding_values' ); my ($p, $h) = @values; ok( $p->isa('RDF::Trine::Node::Resource'), 'binding_values' ); is( $p->uri_value, 'http://kasei.us/about/foaf.xrdf#greg', 'binding_values' ); ok( $h->isa('RDF::Trine::Node::Resource'), 'binding_values' ); is( $h->uri_value, 'http://kasei.us/', 'binding_values' ); my $count = $stream->bindings_count; is( $count, 2, 'bindings_count' ); } { my $query = new RDF::Query ( <<"END", undef, undef, 'sparql' ); PREFIX foaf: SELECT ?person WHERE { ?person a foaf:Person ; foaf:name "Gregory Todd Williams" . } END my $stream = $query->execute( $model ); my $string = $stream->to_string; like( $string, qr/\A\Q DESCRIBE ?person WHERE { ?person a foaf:Person ; foaf:name "Gregory Todd Williams" . } END my $stream = $query->execute( $model ); my $string = $stream->as_xml; like( $string, qr/^\Q SELECT ?person WHERE { ?person a foaf:Person ; foaf:name "Gregory Todd Williams" . } END my $stream = $query->execute( $model ); my $string = $stream->to_string('http://www.w3.org/2001/sw/DataAccess/json-sparql/'); like( $string, qr/\A\Q\E/m, 'to_string json' ); } }