#!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use RDF::Query; use File::Spec; use URI::file; sub test_models { my @models = test_models_and_classes( @_ ); return map { $_->{ 'modelobj' } } @models; } sub test_models_and_classes { my @files = map { File::Spec->rel2abs( $_ ) } @_; my @uris = map { URI::file->new_abs( $_ ) } @files; my @models; { my $store = RDF::Trine::Store::Memory->new(); my $model = RDF::Trine::Model->new( $store ); foreach my $i (0 .. $#files) { my $file = $files[ $i ]; my $uri = $uris[ $i ]; RDF::Trine::Parser->parse_url_into_model( $uri, $model ); } my $data = {}; $data->{ modelobj } = $model; push(@models, $data); } { my ($model, $dsn, $user, $pass); if ($ENV{RDFQUERY_DBI_DATABASE} and $ENV{RDFQUERY_DBI_USER} and $ENV{RDFQUERY_DBI_PASS}) { $dsn = "DBI:mysql:database=$ENV{RDFQUERY_DBI_DATABASE}"; $user = $ENV{RDFQUERY_DBI_USER} || 'test'; $pass = $ENV{RDFQUERY_DBI_PASS} || 'test'; my ($model, $dsn, $user, $pass); if ($ENV{RDFQUERY_DBI_DATABASE} and $ENV{RDFQUERY_DBI_USER} and $ENV{RDFQUERY_DBI_PASS}) { $dsn = "DBI:mysql:database=$ENV{RDFQUERY_DBI_DATABASE}"; $user = $ENV{RDFQUERY_DBI_USER} || 'test'; $pass = $ENV{RDFQUERY_DBI_PASS} || 'test'; $model = eval { my $store = RDF::Trine::Store::DBI->temporary_store($dsn, $user, $pass); $model = RDF::Trine::Model->new( $store ); }; } else { $model = eval { my $store = RDF::Trine::Store::DBI->temporary_store(); $model = RDF::Trine::Model->new( $store ); } } if (not $@) { foreach my $i (0 .. $#files) { my $file = $files[ $i ]; my $uri = $uris[ $i ]; RDF::Trine::Parser->parse_url_into_model( $uri, $model ); } my $data = {}; $data->{ modelobj } = $model; push(@models, $data); } else { warn "Couldn't connect to database: $dsn, $user, $pass" if ($RDF::Query::debug); } } else { warn "RDF::Trine::Store::DBI not loaded: $@\n" if ($RDF::Query::debug); } } if (not $ENV{RDFQUERY_NO_REDLAND}) { eval { require "RDF::Redland"; }; unless ($@) { my $storage = new RDF::Redland::Storage("hashes", "test", "new='yes',hash-type='memory',contexts='yes'"); my $model = new RDF::Redland::Model($storage, ""); my $tmodel = RDF::Trine::Model->new( RDF::Trine::Store->new_with_object( $model ) ); foreach my $uri (@uris) { RDF::Trine::Parser->parse_url_into_model( $uri, $tmodel ); } my $data = { model => 'RDF::Redland::Model', store => 'RDF::Redland::Storage', statement => 'RDF::Redland::Statement', node => 'RDF::Redland::Node', resource => 'RDF::Redland::Node', literal => 'RDF::Redland::Node', blank => 'RDF::Redland::Node', }; $data->{ modelobj } = $model; push(@models, $data); } } if (scalar(@models) == 0) { Carp::confess; } return @models; } 1;