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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
#!/usr/bin/env 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 @models = test_models( @files );
use Test::More;
plan tests => 1 + (37 * scalar(@models));
use_ok( 'RDF::Query' );
foreach my $model (@models) {
print "\n#################################\n";
print "### Using model: $model\n\n";
{
my $query = new RDF::Query ( <<"END", undef, undef, 'rdql' );
SELECT
?person
WHERE
(?person foaf:name "Gregory Todd Williams")
USING
foaf FOR <http://xmlns.com/foaf/0.1/>
END
isa_ok( $query, 'RDF::Query' );
ok( not($query->is_update), "query isn't an update" );
print "# (?var qname literal)\n";
my ($p, $c) = $query->prepare( $model );
my @results = $query->execute_plan( $p, $c );
ok( scalar(@results), 'got result' );
isa_ok( $results[0], 'HASH' );
is( scalar(@{ [ keys %{ $results[0] } ] }), 1, 'got one field' );
ok( $results[0]{'person'}->isa('RDF::Trine::Node::Resource'), 'Resource' );
is( $results[0]{'person'}->uri_value, 'http://kasei.us/about/foaf.xrdf#greg', 'got person uri' );
}
{
my $query = new RDF::Query ( <<"END", undef, undef, 'rdql' );
SELECT
?person
WHERE
(?person foaf:homepage <http://kasei.us/>)
USING
foaf FOR <http://xmlns.com/foaf/0.1/>
END
isa_ok( $query, 'RDF::Query' );
ok( not($query->is_update), "query isn't an update" );
print "# (?var qname quri)\n";
my @results = $query->execute( $model );
ok( scalar(@results), 'got result' );
isa_ok( $results[0], 'HASH' );
is( scalar(@{ [ keys %{ $results[0] } ] }), 1, 'got one field' );
ok( $results[0]{person}->isa('RDF::Trine::Node::Resource'), 'Resource' );
is( $results[0]{person}->uri_value, 'http://kasei.us/about/foaf.xrdf#greg', 'got person uri' );
}
{
print "# multiple namespaces\n";
my $query = new RDF::Query ( <<"END", undef, undef, 'sparql' );
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT
?title
WHERE {
?desc rdf:type foaf:PersonalProfileDocument .
?desc foaf:maker ?person .
?person foaf:name "Gregory Todd Williams" .
?desc dc:title ?title .
}
END
isa_ok( $query, 'RDF::Query' );
ok( not($query->is_update), "query isn't an update" );
my ($p, $c) = $query->prepare( $model );
my @results = $query->execute_plan( $p, $c );
ok( scalar(@results), 'got result' );
isa_ok( $results[0], 'HASH' );
is( scalar(@{ [ keys %{ $results[0] } ] }), 1, 'got one field' );
ok( ref($results[0]) && $results[0]{title}->isa('RDF::Trine::Node::Literal'), 'Literal' );
is( ref($results[0]) && $results[0]{title}->literal_value, 'FOAF Description for Gregory Williams', 'got file title' );
}
{
my $query = new RDF::Query ( <<"END", undef, undef, 'rdql' );
SELECT
?page
WHERE
(?person foaf:name "Gregory Todd Williams")
(?person foaf:homepage ?page)
USING
foaf FOR <http://xmlns.com/foaf/0.1/>
END
isa_ok( $query, 'RDF::Query' );
ok( not($query->is_update), "query isn't an update" );
print "# chained (name->person->homepage)\n";
my @results = $query->execute( $model );
ok( scalar(@results), 'got result' );
isa_ok( $results[0], 'HASH' );
is( scalar(@{ [ keys %{ $results[0] } ] }), 1, 'got one field' );
ok( $results[0]{page}->isa('RDF::Trine::Node::Resource'), 'Resource' );
is( $results[0]{page}->uri_value, 'http://kasei.us/', 'got homepage url' );
}
{
my $query = new RDF::Query ( <<"END", undef, undef, 'rdql' );
SELECT
?name ?mbox
WHERE
(?person foaf:homepage <http://kasei.us/>)
(?person foaf:name ?name)
(?person foaf:mbox ?mbox)
USING
foaf FOR <http://xmlns.com/foaf/0.1/>
END
isa_ok( $query, 'RDF::Query' );
ok( not($query->is_update), "query isn't an update" );
print "# chained (homepage->person->(name|mbox)\n";
my @results = $query->execute( $model );
ok( scalar(@results), 'got result' );
isa_ok( $results[0], 'HASH' );
is( scalar(@{ [ keys %{ $results[0] } ] }), 2, 'got two field' );
ok( $results[0]{name}->isa('RDF::Trine::Node::Literal'), 'Literal' );
ok( $results[0]{mbox}->isa('RDF::Trine::Node::Resource'), 'Resource' );
is( $results[0]{name}->literal_value, 'Gregory Todd Williams', 'got name' );
is( $results[0]{mbox}->uri_value, 'mailto:greg@evilfunhouse.com', 'got mbox uri' );
}
}
|