| RDF-Query documentation | Contained in the RDF-Query distribution. |
RDF::Query::Algebra::NamedGraph - Algebra class for NamedGraph patterns
This document describes RDF::Query::Algebra::NamedGraph version 2.907.
Beyond the methods documented below, this class inherits methods from the RDF::Query::Algebra class.
new ( $graph, $pattern )Returns a new NamedGraph structure.
construct_argsReturns a list of arguments that, passed to this class' constructor, will produce a clone of this algebra pattern.
graphReturns the graph node of the named graph expression.
patternReturns the graph pattern of the named graph expression.
quadsReturns a list of the quads belonging to this NamedGraph.
sseReturns the SSE string for this algebra expression.
explainReturns a string serialization of the algebra appropriate for display on the command line.
as_sparqlReturns the SPARQL string for this algebra expression.
as_hashReturns the query as a nested set of plain data structures (no objects).
as_spin ( $model )Adds statements to the given model to represent this algebra object in the SPARQL Inferencing Notation (http://www.spinrdf.org/).
typeReturns the type of this algebra expression.
referenced_variablesReturns a list of the variable names used in this algebra expression.
potentially_boundReturns a list of the variable names used in this algebra expression that will bind values during execution.
definite_variablesReturns a list of the variable names that will be bound after evaluating this algebra expression.
qualify_uris ( \%namespaces, $base_uri )Returns a new algebra pattern where all referenced Resource nodes representing QNames (ns:local) are qualified using the supplied %namespaces.
Gregory Todd Williams <gwilliams@cpan.org>
| RDF-Query documentation | Contained in the RDF-Query distribution. |
# RDF::Query::Algebra::NamedGraph # -----------------------------------------------------------------------------
package RDF::Query::Algebra::NamedGraph; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Query::Algebra); use Data::Dumper; use Log::Log4perl; use RDF::Query::Error; use Carp qw(carp croak confess); use Scalar::Util qw(blessed reftype); use RDF::Trine::Iterator qw(sgrep smap swatch); ###################################################################### our ($VERSION); BEGIN { $VERSION = '2.907'; } ######################################################################
sub new { my $class = shift; my $graph = shift; my $pattern = shift; return bless( [ 'GRAPH', $graph, $pattern ], $class ); }
sub construct_args { my $self = shift; return ($self->graph, $self->pattern); }
sub graph { my $self = shift; if (@_) { my $graph = shift; $self->[1] = $graph; } my $graph = $self->[1]; return $graph; }
sub pattern { my $self = shift; return $self->[2]; }
sub quads { my $self = shift; my @quads; foreach my $p ($self->subpatterns_of_type('RDF::Query::Algebra::BasicGraphPattern')) { push(@quads, $p->quads); } my @graphquads; foreach my $q (@quads) { my $st = RDF::Trine::Statement::Quad->new( $q->subject, $q->predicate, $q->object, $self->graph, ); push(@graphquads, $st); } return @graphquads; }
sub sse { my $self = shift; my $context = shift; my $prefix = shift || ''; my $indent = $context->{indent} || ''; return sprintf( "(namedgraph\n${prefix}${indent}%s\n${prefix}${indent}%s)", $self->graph->sse( $context, "${prefix}${indent}" ), $self->pattern->sse( $context, "${prefix}${indent}" ) ); }
sub explain { my $self = shift; my $s = shift; my $count = shift; my $indent = $s x $count; my $string = "${indent}named graph pattern\n" . "${indent}${s}graph: " . $self->graph->as_string . "\n" . $self->pattern->explain( $s, $count+1 ); return $string; }
sub as_sparql { my $self = shift; my $context = shift || {}; my $indent = shift; my $pcontext = { %$context, force_ggp_braces => 1 }; my $string = sprintf( "GRAPH %s %s", $self->graph->as_sparql( $context, $indent ), $self->pattern->as_sparql( $pcontext, $indent ), ); return $string; }
sub as_hash { my $self = shift; my $context = shift; return { type => lc($self->type), graph => $self->graph, pattern => $self->pattern->as_hash, }; }
sub as_spin { my $self = shift; my $model = shift; my $spin = RDF::Trine::Namespace->new('http://spinrdf.org/spin#'); my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my @t = $self->pattern->as_spin( $model ); my $ng = RDF::Query::Node::Blank->new(); my $list = $model->add_list( @t ); $model->add_statement( RDF::Trine::Statement->new($ng, $rdf->type, $spin->NamedGraph) ); $model->add_statement( RDF::Trine::Statement->new($ng, $spin->elements, $list) ); return $ng; }
sub type { return 'GRAPH'; }
sub referenced_variables { my $self = shift; my @list = RDF::Query::_uniq( $self->pattern->referenced_variables, (map { $_->name } grep { $_->isa('RDF::Query::Node::Variable') } ($self->graph)), ); return @list; }
sub potentially_bound { my $self = shift; my @list = RDF::Query::_uniq( $self->pattern->potentially_bound, (map { $_->name } grep { $_->isa('RDF::Query::Node::Variable') } ($self->graph)), ); return @list; }
sub definite_variables { my $self = shift; return RDF::Query::_uniq( map { $_->name } grep { $_->isa('RDF::Query::Node::Variable') } ($self->graph), $self->pattern->definite_variables, ); }
sub qualify_uris { my $self = shift; my $class = ref($self); my $ns = shift; my $base_uri = shift; my $pattern = $self->pattern->qualify_uris( $ns, $base_uri ); my $graph = $self->graph; if (blessed($graph) and $graph->isa('RDF::Query::Node::Resource')) { my $uri = $graph->uri; if (ref($uri)) { my ($n,$l) = @$uri; unless (exists($ns->{ $n })) { throw RDF::Query::Error::QuerySyntaxError -text => "Namespace $n is not defined"; } my $resolved = join('', $ns->{ $n }, $l); $graph = RDF::Query::Node::Resource->new( $resolved, $base_uri ); } } return $class->new( $graph, $pattern ); } 1; __END__