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.931 second using v1.01-cache-2.11-cpan-2398b32b56e )