App-perlrdf
view release on metacpan or search on metacpan
lib/App/perlrdf/FileSpec/OutputRDF.pm view on Meta::CPAN
package App::perlrdf::FileSpec::OutputRDF;
use 5.010;
use autodie;
use strict;
use warnings;
use utf8;
BEGIN {
$App::perlrdf::FileSpec::OutputRDF::AUTHORITY = 'cpan:TOBYINK';
$App::perlrdf::FileSpec::OutputRDF::VERSION = '0.006';
}
use Moose;
use RDF::Trine;
use RDF::TriN3;
use RDF::TrineX::Functions -all => { -prefix => 'rdf_' };
use namespace::clean;
extends 'App::perlrdf::FileSpec::OutputFile';
has serializer => (
is => 'ro',
isa => 'Object|Undef',
lazy_build => 1,
);
sub _build_format
{
my $self = shift;
if (lc $self->uri->scheme eq 'file')
{
return 'RDF::TrineX::Parser::Pretdsl'
if $self->uri->file =~ /\.(pret|pretdsl)/i;
return RDF::Trine::Parser
-> guess_parser_by_filename($self->uri->file);
}
if ($self->can('response'))
{
return $self->response->content_type
if $self->response->content_type;
return 'RDF::TrineX::Parser::Pretdsl'
if (($self->response->base // $self->uri) =~ /\.(pret|pretdsl)/i);
return RDF::Trine::Parser->guess_parser_by_filename(
$self->response->base // $self->uri,
);
}
return 'RDF::TrineX::Parser::Pretdsl'
if $self->uri =~ /\.(pret|pretdsl)/i;
return RDF::Trine::Parser->guess_parser_by_filename($self->uri);
}
sub _build_serializer
{
my $self = shift;
my $P = 'RDF::Trine::Serializer';
if (blessed $self->format and $self->format->isa($P))
{
return $self->format;
}
if ($self->format =~ m{/})
{
my (undef, $s) = $P->negotiate(
request_headers => HTTP::Headers->new(
Accept => $self->format,
),
);
return $s;
}
if ($self->format =~ m{::})
{
(my $class = $self->format)
=~ s/::Parser/::Serializer/;
$class = 'RDF::Trine::Serializer::Turtle'
if $class eq 'RDF::TrineX::Serializer::Pretdsl';
return $class->new;
}
return $P->new($self->format);
}
sub serialize_model
{
my ($self, $model) = @_;
rdf_serialize(
$model,
as => $self->serializer,
to => $self->handle,
)
}
1;
( run in 1.246 second using v1.01-cache-2.11-cpan-63c85eba8c4 )