Catmandu-RDF

 view release on metacpan or  search on metacpan

lib/Catmandu/Importer/RDF.pm  view on Meta::CPAN

package Catmandu::Importer::RDF;

use open ':std', ':encoding(utf8)';
use namespace::clean;
use Catmandu::Sane;
use Moo;
use RDF::Trine::Parser;
use RDF::Trine::Model;
use RDF::Trine::Store::SPARQL;
use RDF::Trine::Store::LDF;
use RDF::Trine::Store;
use RDF::Query;
use RDF::LDF;
use RDF::aREF;
use RDF::aREF::Encoder;
use RDF::NS;
use IO::Pipe;
use JSON;
use LWP::UserAgent::CHICaching;

our $VERSION = '0.32';

with 'Catmandu::RDF';
with 'Catmandu::Importer';

has url => (
    is => 'ro'
);

has base => (
    is      => 'ro',
    lazy    => 1,
    builder => sub {
        defined $_[0]->file ? "file://".$_[0]->file : "http://example.org/";
    }
);

has encoder => (
    is      => 'ro',
    lazy    => 1,
    builder => sub {
        my $ns = $_[0]->ns;
        RDF::aREF::Encoder->new(
            ns => (($ns // 1) ? $ns : { }),
            subject_map => !$_[0]->predicate_map,
        );
    }
);

has sparql => (
    is      => 'ro',
    lazy    => 1,
    trigger  => sub {
        my ($sparql, $ns) = ($_[1], $_[0]->ns);
        $sparql = do { local (@ARGV,$/) = $sparql; <> } if $sparql =~ /^\S+$/ && -r $sparql;
        my %prefix;
        # guess requires prefixes (don't override existing). Don't mind false positives
        $prefix{$_} = 1 for ($sparql =~ /\s([a-z][a-z0-0_-]*):/mig);
        delete $prefix{$_} for ($sparql =~ /PREFIX\s+([^:]+):/mg);
        $_[0]->{sparql} = join "\n", (map { $ns->SPARQL($_) } keys %prefix), $sparql;
    }
);

has sparql_result => (
    is      => 'ro',
    default => sub { 'simple' }
);

has predicate_map => (
    is      => 'ro',
);

has triples => (
    is      => 'ro',
);

has cache => (
    is      => 'ro',
    default => sub { 0 }
);

has cache_options => (
    is      => 'ro',
    default => sub { +{
        driver => 'Memory',
        global => 1 ,
        max_size => 1024*1024
    } }
);

has speed => (
    is      => 'ro',
);

sub BUILD {
    my ($self) = @_;

    if ($self->cache) {
        my $options = $self->cache_options // {};
        my $cache = CHI->new( %$options );
        my $ua = LWP::UserAgent::CHICaching->new(cache => $cache);
        RDF::Trine->default_useragent($ua);
    }
}

sub generator {
    my ($self) = @_;

    if ($self->sparql) {
        return $self->sparql_generator;
    } else {
        return $self->rdf_generator;
    }
}

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 0.908 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )