Beta Shell
v2.0 ยท web2.us.cloudlogin.co
[FM]
[CMD]
[PHP]
[DB]
[INFO]
[SEC]
File Manager
~
/
usr
/
share
/
perl5
/
vendor_perl
/
RDF
/
Trine
/
Statement
Upload
3 items
Name
Size
Perms
Modified
Actions
[ .. / .. ]
Quad.pm
3.72 KB
-rw-r--r--
2018-01-05 04:59:13
Edit
Del
Editing: Quad.pm
(3.72 KB)
Path: /usr/share/perl5/vendor_perl/RDF/Trine/Statement/Quad.pm
Back
# RDF::Trine::Statement::Quad # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Statement::Quad - Class for quads and quad patterns =head1 VERSION This document describes RDF::Trine::Statement::Quad version 1.019 =cut package RDF::Trine::Statement::Quad; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Statement); use Scalar::Util qw(blessed); use Carp qw(croak); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.019'; } ###################################################################### =head1 METHODS Beyond the methods documented below, this class inherits methods from the L<RDF::Trine::Statement> class. =over 4 =cut =item C<new ( $s, $p, $o, $c )> Returns a new Quad structure. =cut sub new { my $class = shift; my @nodes = @_; unless (scalar(@nodes) == 4) { throw RDF::Trine::Error::MethodInvocationError -text => "Quad constructor must have four node arguments"; } my @names = qw(subject predicate object context); foreach my $i (0 .. 3) { unless (defined($nodes[ $i ])) { $nodes[ $i ] = RDF::Trine::Node::Variable->new($names[ $i ]); } } return bless( [ @nodes ], $class ); } =item C<< nodes >> Returns the subject, predicate and object of the triple pattern. =cut sub nodes { my $self = shift; return @$self; } =item C<< node_names >> Returns the method names for accessing the nodes of this statement. =cut sub node_names { return qw(subject predicate object context); } =item C<< graph >> =item C<< context >> Returns the graph node of the quad pattern. =cut sub context { my $self = shift; if (@_) { $self->[3] = shift; } return $self->[3]; } *graph = \&context; =item C<< sse >> Returns the SSE string for this algebra expression. =cut sub sse { my $self = shift; my $context = shift; my @nodes = $self->nodes; my @sse = map { $_->sse( $context ) } (@nodes); return sprintf( '(quad %s %s %s %s)', @sse ); } =item C<< type >> Returns the type of this algebra expression. =cut sub type { return 'QUAD'; } =item C<< clone >> =cut sub clone { my $self = shift; my $class = ref($self); return $class->new( $self->nodes ); } =item C<< from_redland ( $statement, $name ) >> Given a RDF::Redland::Statement object and a graph name, returns a perl-native RDF::Trine::Statement::Quad object. =cut sub from_redland { my $self = shift; my $rstmt = shift; my $graph = shift; my $rs = $rstmt->subject; my $rp = $rstmt->predicate; my $ro = $rstmt->object; my $cast = sub { my $node = shift; my $type = $node->type; if ($type == $RDF::Redland::Node::Type_Resource) { return RDF::Trine::Node::Resource->new( $node->uri->as_string ); } elsif ($type == $RDF::Redland::Node::Type_Blank) { return RDF::Trine::Node::Blank->new( $node->blank_identifier ); } elsif ($type == $RDF::Redland::Node::Type_Literal) { my $lang = $node->literal_value_language; my $dturi = $node->literal_datatype; my $dt = ($dturi) ? $dturi->as_string : undef; return RDF::Trine::Node::Literal->new( $node->literal_value, $lang, $dt ); } else { croak 'Unknown node type in statement conversion'; } }; my @nodes; foreach my $n ($rs, $rp, $ro) { push(@nodes, $cast->( $n )); } my $st = $self->new( @nodes, $graph ); return $st; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L<https://github.com/kasei/perlrdf/issues>. =head1 AUTHOR Gregory Todd Williams C<< <gwilliams@cpan.org> >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut