| RDF-Query documentation | Contained in the RDF-Query distribution. |
RDF::Query::Expression::Unary - Class for unary expressions
This document describes RDF::Query::Expression::Unary version 2.907.
Beyond the methods documented below, this class inherits methods from the RDF::Query::Expression class.
sseReturns the SSE string for this algebra expression.
as_sparqlReturns the SPARQL string for this algebra expression.
evaluate ( $query, \%bound )Evaluates the expression using the supplied bound variables. Will return a RDF::Query::Node object.
Gregory Todd Williams <gwilliams@cpan.org>
| RDF-Query documentation | Contained in the RDF-Query distribution. |
# RDF::Query::Expression::Unary # -----------------------------------------------------------------------------
package RDF::Query::Expression::Unary; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Query::Expression); use Data::Dumper; use Scalar::Util qw(blessed); use Carp qw(carp croak confess); ###################################################################### our ($VERSION); BEGIN { $VERSION = '2.907'; } ######################################################################
sub sse { my $self = shift; my $context = shift; return sprintf( '(%s %s)', $self->op, map { $_->sse( $context ) } $self->operands, ); }
sub as_sparql { my $self = shift; my $context = shift; my $indent = shift; my $op = $self->op; return sprintf("($op %s)", map { $_->as_sparql( $context, $indent ) } $self->operands); }
sub evaluate { my $self = shift; my $query = shift; my $bound = shift; my $context = shift; my $op = $self->op; my ($data) = $self->operands; if ($op eq '+' or $op eq '-') { my $l = $data->isa('RDF::Query::Algebra') ? $data->evaluate( $query, $bound, $context, @_ ) : ($data->isa('RDF::Query::Node::Variable')) ? $bound->{ $data->name } : $data; my $value; if ($op eq '+') { $value = $l->numeric_value; } elsif ($op eq '-') { $value = -1 * $l->numeric_value; } return RDF::Query::Node::Literal->new( $value, undef, $l->literal_datatype ); } elsif ($op eq '!') { my $alg = RDF::Query::Expression::Function->new( "sparql:ebv", $data ); my $bool = $alg->evaluate( $query, $bound, $context, @_ ); if ($bool->literal_value eq 'true') { return RDF::Query::Node::Literal->new( 'false', undef, 'http://www.w3.org/2001/XMLSchema#boolean' ); } else { return RDF::Query::Node::Literal->new( 'true', undef, 'http://www.w3.org/2001/XMLSchema#boolean' ); } } else { warn "unknown unary op: $op"; throw RDF::Query::Error::ExecutionError -text => "Unknown unary op '$op'"; } } 1; __END__