File: models.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 (108 lines) | stat: -rwxr-xr-x 2,936 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
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
#!/usr/bin/env 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;