Apache-XPointer-RDQL
view release on metacpan or search on metacpan
lib/Apache/XPointer/RDQL.pm view on Meta::CPAN
$range =~ s/\s+$//;
$range =~ s/\bWHERE/\f FROM <%s> WHERE/;
my $query = sprintf($range,$apache->filename());
my $parser = Apache::XPointer::RDQL::Parser->new();
$parser->parse($query);
return (undef,$parser);
}
sub bind {
my $pkg = shift;
my $query = shift;
my @bind = ();
foreach my $var ($query->bind_variables()) {
my ($prefix,$localname) = $query->bind_predicate($var);
my $uri = $query->lookup_namespaceURI($prefix);
push @bind, {localname => $localname,
prefix => $prefix,
namespaceuri => $uri,
value => undef};
}
return \@bind;
}
=head1 VERSION
1.1
=head1 DATE
$Date: 2004/11/16 04:33:33 $
lib/Apache/XPointer/RDQL/Parser.pm view on Meta::CPAN
=head1 SYNOPSIS
use Apache:::XPointer::RDQL::Parser;
my $query = "SELECT ...";
my $parser = Apache::XPointer::RDQL::Parser->new();
$parser->parse($query);
foreach my $var ($parser->bind_variables()) {
my ($prefix, $localname) = $parser->bind_predicate($var);
my $uri = $parser->lookup_namespaceURI($prefix);
}
=head1 DESCRIPTION
Apache::XPointer::RDQL specific methods for RDQL::Parser.
=cut
=head1 OBJECT METHODS
lib/Apache/XPointer/RDQL/Parser.pm view on Meta::CPAN
Returns the original RDQL query string.
=cut
sub query_string {
my $self = shift;
return $self->{'__query'};
}
=head2 $obj->bind_variables()
Returns a list.
=cut
sub bind_variables {
my $self = shift;
return map {
$_ =~ /^\?(.*)/;
$1;
} @{$self->{'resultVars'}};
}
=head2 $obj->bind_predicate($bind_variable)
Returns a list containting a prefix and a localname.
=cut
sub bind_predicate {
my $self = shift;
my $bind_variable = shift;
foreach my $spo (@{$self->{'triplePatterns'}}) {
if ($spo->[2] eq "?$bind_variable") {
$spo->[1] =~ /^<([^:]+)::([^>]+)>$/;
return ($1,$2);
}
}
return undef;
}
=head2 $obj->lookup_namespaceURI($prefix)
lib/Apache/XPointer/RDQL/RDFStore.pm view on Meta::CPAN
else {
return undef;
}
}
sub query {
my $pkg = shift;
my $apache = shift;
my $query = shift;
my $bind = $pkg->bind($query);
my $dbh = undef;
my $sth = undef;
eval {
$dbh = DBI->connect("DBI:RDFStore:");
};
if ($@) {
return $pkg->_fatal($apache,
lib/Apache/XPointer/RDQL/RDFStore.pm view on Meta::CPAN
"failed to prepare query statement, $@");
}
$sth->execute();
if ($dbh->err()) {
return $pkg->_fatal($apache,
$dbh->errstr());
}
$sth->bind_columns(map { \$_->{value} } @$bind);
#
return {success => 1,
bind => $bind,
result => $sth};
}
sub send_multipart {
my $pkg = shift;
my $apache = shift;
my $res = shift;
my $factory = RDFStore::NodeFactory->new();
lib/Apache/XPointer/RDQL/RDFStore.pm view on Meta::CPAN
my $model = RDFStore::Model->new();
my $subject = $factory->createUniqueResource();
map {
my $property = $factory->createResource($_->{namespaceuri},$_->{localname});
my $object = $_->{value};
$model->add($factory->createStatement($subject,$property,$object));
} @{$res->{'bind'}};
$apache->print(qq(--match\n));
$apache->print(sprintf("Content-type: text/xml; charset=%s\n\n","UTF-8"));
$apache->print(sprintf("%s\n",$model->serialize()));
}
$apache->print(qq(--match--\n));
return 1;
}
lib/Apache/XPointer/RDQL/RDFStore.pm view on Meta::CPAN
my $result = $factory->createOrdinal($i+1);
map {
my $property = $factory->createResource($_->{namespaceuri} . $_->{localname});
my $object = $_->{value};
$model->add($factory->createStatement($result,$property,$object));
} @{$res->{'bind'}};
$model->add($factory->createStatement($seq,$li,$result));
}
$apache->print($model->serialize());
return 1;
}
sub _fatal {
my $pkg = shift;
( run in 0.855 second using v1.01-cache-2.11-cpan-2398b32b56e )