The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;
no warnings 'redefine';
use File::Spec;
use File::Slurp;
use LWP::UserAgent;

use RDF::Trine;
use RDF::Trine::Store::DBI;
use RDF::Trine::Statement;

unless (@ARGV >= 6) {
	print <<"END";
USAGE: $0 server-type dbname username password model-name file base [host]

	server-type can be either 'mysql' or 'sqlite'


END
	exit;
}

my $server	= shift;
my $dbname	= shift;
my $user	= shift;
my $pass	= shift;
my $model	= shift;
my $file	= shift;
my $base	= shift;
my $host	= shift;

my $dsn;
if ($server eq 'mysql') {
	$dsn	= "DBI:mysql:database=${dbname}";
} elsif ($server eq 'sqlite') {
	$dsn	= "DBI:SQLite:dbname=${dbname}";
} elsif ($server eq 'pg') {
	$dsn	= "DBI:Pg:dbname=${dbname}";
	if ($host) {
		$dsn	.= ';host=' . $host;
	}
} else {
	warn "Unknown server type: $server\n";
	exit;
}

my $data;
my $store	= RDF::Trine::Store::DBI->new($model, $dsn, $user, $pass);
if ($file =~ qr[^http(s?)://]) {
	my $ua	= LWP::UserAgent->new;
	$ua->agent( "RDF::Trine/${RDF::Trine::VERSION}" );
	$ua->default_header( 'Accept' => 'application/turtle,application/x-turtle,application/rdf+xml' );
	my $resp	= $ua->get( $file );
	if ($resp->is_success) {
		$data		= $resp->content;
	} else {
		die $resp->status_line;
	}
	
	unless ($base) {
		$base		= $file;
	}
} else {
	$data	= read_file( $file );
	unless ($base) {
		my $abs	= File::Spec->rel2abs( $file );
		$base	= 'file://' . $abs;
	}
}

# my $format	= 'guess';
# my $baseuri		= RDF::Redland::URI->new( $base );
# my $basenode	= RDF::Trine::Node::Resource->new( $base );
# my $parser		= RDF::Redland::Parser->new( $format );
# my $stream		= $parser->parse_string_as_stream( $data, $baseuri );
# while ($stream and !$stream->end) {
# 	my $statement	= $stream->current;
# 	my $stmt		= RDF::Trine::Statement->from_redland( $statement );
# 	$store->add_statement( $stmt, $basenode );
# 	$stream->next;
# }
# 

my $parser	= RDF::Trine::Parser::RDFXML->new();
my $m		= RDF::Trine::Model->new( $store );
$parser->parse_into_model( $base, $data, $m );