| RDF-Trine documentation | Contained in the RDF-Trine distribution. |
RDF::Trine::Parser::NQuads - N-Quads Parser
This document describes RDF::Trine::Parser::NQuads version 0.135
use RDF::Trine::Parser; my $parser = RDF::Trine::Parser->new( 'nquads' ); $parser->parse_into_model( $base_uri, $data, $model );
...
Beyond the methods documented below, this class inherits methods from the RDF::Trine::Parser class.
parse_into_model ( $base_uri, $data, $model )Parses the $data, using the given $base_uri. For each RDF triple
or quad parsed, will call $model->add_statement( $statement ).
Gregory Todd Williams <gwilliams@cpan.org>
Copyright (c) 2006-2010 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| RDF-Trine documentation | Contained in the RDF-Trine distribution. |
# RDF::Trine::Parser::NQuads # -----------------------------------------------------------------------------
package RDF::Trine::Parser::NQuads; use strict; use warnings; use utf8; use base qw(RDF::Trine::Parser::NTriples); use Carp; use Encode qw(decode); use Data::Dumper; use Log::Log4perl; use Scalar::Util qw(blessed reftype); use RDF::Trine qw(literal); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION); BEGIN { $VERSION = '0.135'; $RDF::Trine::Parser::parser_names{ 'nquads' } = __PACKAGE__; $RDF::Trine::Parser::format_uris{ 'http://sw.deri.org/2008/07/n-quads/#n-quads' } = __PACKAGE__; foreach my $ext (qw(nq)) { $RDF::Trine::Parser::file_extensions{ $ext } = __PACKAGE__; } my $class = __PACKAGE__; $RDF::Trine::Parser::canonical_media_types{ $class } = 'text/x-nquads'; foreach my $type (qw(text/x-nquads)) { $RDF::Trine::Parser::media_types{ $type } = __PACKAGE__; } } ######################################################################
sub parse_into_model { my $proto = shift; my $self = blessed($proto) ? $proto : $proto->new(); my $uri = shift; if (blessed($uri) and $uri->isa('RDF::Trine::Node::Resource')) { $uri = $uri->uri_value; } my $input = shift; my $model = shift; my %args = @_; if (my $context = $args{'context'}) { throw RDF::Trine::Error::ParserError -text => "Cannot pass a context node to N-Quads parse_into_model method"; } my $handler = sub { my $st = shift; $model->add_statement( $st ); }; return $self->parse( $uri, $input, $handler ); } sub _emit_statement { my $self = shift; my $handler = shift; my $nodes = shift; my $lineno = shift; my $st; if ($self->{canonicalize}) { if ($nodes->[2]->isa('RDF::Trine::Node::Literal') and $nodes->[2]->has_datatype) { my $value = $nodes->[2]->literal_value; my $dt = $nodes->[2]->literal_datatype; my $canon = RDF::Trine::Node::Literal->canonicalize_literal_value( $value, $dt, 1 ); $nodes->[2] = literal( $canon, undef, $dt ); } } if (scalar(@$nodes) == 3) { $st = RDF::Trine::Statement->new( @$nodes ); } elsif (scalar(@$nodes) == 4) { $st = RDF::Trine::Statement::Quad->new( @$nodes ); } else { # warn Dumper($nodes); throw RDF::Trine::Error::ParserError -text => qq[Not valid N-Quads data at line $lineno]; } $handler->( $st ); } 1; __END__