#!/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(about.xrdf foaf.xrdf); my @models = test_models( @files ); use Test::More; plan tests => 1 + (12 * scalar(@models)); use_ok( 'RDF::Query' ); ################################################################################ # Log::Log4perl::init( \q[ # log4perl.category.rdf.query.algebra = TRACE, Screen # log4perl.appender.Screen = Log::Log4perl::Appender::Screen # log4perl.appender.Screen.stderr = 0 # log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout # ] ); ################################################################################ foreach my $model (@models) { print "\n#################################\n"; print "### Using model: $model\n"; # my $s = $model->as_stream; # while ($s and not $s->end) { # my $st = $s->current; # warn $st->as_string; # } continue { $s->next } # - Collections: (1 ?x 3) { my $query = new RDF::Query ( <<"END", undef, undef, 'sparql' ); PREFIX rdf: SELECT ?x WHERE { ?a1 rdf:first "1"; rdf:rest ?a2 . ?a2 rdf:first ?x; rdf:rest ?a3 . ?a3 rdf:first "3"; rdf:rest rdf:nil . } END my ($x) = $query->get( $model ); ok( $x, 'got collection element' ); is( $x->literal_value, 2 ); } # - Collections: (1 ?x 3) { my $query = new RDF::Query ( <<"END", undef, undef, 'sparql' ); SELECT ?x WHERE { ("1" ?x "3") } END my ($x) = $query->get( $model ); ok( $x, 'got collection triples' ); is( $x->literal_value, 2 ); } # - Collections: ?s ?p (1 ?x 3) { my $query = new RDF::Query ( <<"END", undef, undef, 'sparql' ); PREFIX test: SELECT ?x WHERE { test:mycollection ("1" ?x "3") . } END my ($x) = $query->get( $model ); ok( $x, 'got object collection triples' ); is( $x->literal_value, 2 ); } # - Object Lists: ?x foaf:nick "kasei", "kasei_" . { my $query = new RDF::Query ( <<"END", undef, undef, 'sparql' ); PREFIX foaf: PREFIX geo: SELECT ?name WHERE { ?x foaf:nick "kasei", "The Samo Fool" . ?x foaf:name ?name } END my ($name) = $query->get( $model ); ok( $name, 'got name' ); is( $name->literal_value, 'Gregory Todd Williams', 'Gregory Todd Williams' ); } # - Blank Nodes: [ :p "v" ] and [] :p "v" . { my $query = new RDF::Query ( <<"END", undef, undef, 'sparql' ); PREFIX foaf: PREFIX geo: SELECT ?name WHERE { [ a geo:Point; geo:lat "52.972770"; foaf:name ?name ] } END my ($name) = $query->get( $model ); ok( $name, 'got name' ); is( $name->literal_value, 'Cliffs of Moher, Ireland', 'Cliffs of Moher, Ireland' ); } # - 'a': ?x a :Class . [ a :myClass ] :p "v" . { my $query = new RDF::Query ( <<"END", undef, undef, 'sparql' ); PREFIX foaf: PREFIX geo: SELECT ?name WHERE { [ a geo:Point; geo:lat "52.972770"; foaf:name ?name ] } END my ($name) = $query->get( $model ); ok( $name, 'got name' ); is( $name->literal_value, 'Cliffs of Moher, Ireland', 'Cliffs of Moher, Ireland' ); } }