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;



=head1 NAME

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

=head1 VERSION

version 0.178


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/}{};
            return ($_[0] =~ qr{^http://dbpedia\.org/resource/.+});


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

=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.


=head1 AUTHOR

Jakob Voß <>


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.