use strict;
use warnings;
package RDF::Flow::LinkedData;
{
  $RDF::Flow::LinkedData::VERSION = '0.178';
}
#ABSTRACT: Retrieve RDF from a HTTP-URI

use Log::Contextual::WarnLogger;
use Log::Contextual qw(:log), -default_logger
    => Log::Contextual::WarnLogger->new({ env_prefix => __PACKAGE__ });

use parent 'RDF::Flow::Source';
use RDF::Flow::Source qw(:util);

use Try::Tiny;
use RDF::Trine::Model;
use RDF::Trine::Parser;

sub name {
    shift->{name} || 'anonymous LinkedData source';
}

sub retrieve_rdf {
    my ($self, $env) = @_;
    my $url = rdflow_uri( $env );

    my $model = RDF::Trine::Model->new;

    try {
        die 'not an URL' unless $url =~ /^http[s]?:\/\//;
        RDF::Trine::Parser->parse_url_into_model( $url, $model );
        log_debug { "retrieved data from $url" };
    } catch {
        $self->trigger_error("failed to retrieve RDF from $url: $_", $env);
    };

    return $model;
}

1;


__END__
=pod

=head1 NAME

RDF::Flow::LinkedData - Retrieve RDF from a HTTP-URI

=head1 VERSION

version 0.178

=head1 DESCRIPTION

This L<RDF::Flow::Source> fetches RDF data via HTTP. The request URI is used
as URL to get data from. For instance the following source retrieves RDF data
from DBPedia, if a DBPedia or English Wikipedia URI is provided:

    my $dbpedia = RDF::Flow::LinkedData->new(
        name => "DBPedia",
        match => sub {
            $_[0] =~ s{^http://en\.wikipedia\.org/wiki/}{http://dbpedia.org/resource/};
            return ($_[0] =~ qr{^http://dbpedia\.org/resource/.+});
        }
    );

=head1 CONFIGURATION

The following configuration options from L<RDF::Flow::Source> are useful in
particular:

=over 4

=item name

Name of the source. Defaults to "anonymous LinkedData source".

=item match

Optional regular expression or code reference to match and/or map request URIs.

=back

=head1 AUTHOR

Jakob Voß <voss@gbv.de>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Jakob Voß.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut