Apache::XPointer::RDQL::Parser - Apache::XPointer::RDQL specific methods for RDQL::Parser


Apache-XPointer-RDQL documentation Contained in the Apache-XPointer-RDQL distribution.

Index


Code Index:

NAME

Top

Apache::XPointer::RDQL::Parser - Apache::XPointer::RDQL specific methods for RDQL::Parser

SYNOPSIS

Top

 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);
 }

DESCRIPTION

Top

Apache::XPointer::RDQL specific methods for RDQL::Parser.

OBJECT METHODS

Top

This pacakages subclasses RDQL::Parser a defines the following helper methods :

$obj->query_string()

Returns the original RDQL query string.

$obj->bind_variables()

Returns a list.

$obj->bind_predicate($bind_variable)

Returns a list containting a prefix and a localname.

$obj->lookup_namespaceURI($prefix)

Returns a string.

VERSION

Top

1.1

DATE

Top

$Date: 2004/11/16 04:36:26 $

AUTHOR

Top

Aaron Straup Cope <ascope@cpan.org>

SEE ALSO

Top

Apache::XPointer

RDQL::Parser

LICENSE

Top

Copyright (c) 2004 Aaron Straup Cope. All rights reserved.

This is free software, you may use it and distribute it under the same terms as Perl itself.


Apache-XPointer-RDQL documentation Contained in the Apache-XPointer-RDQL distribution.
# $Id: Parser.pm,v 1.6 2004/11/16 04:36:26 asc Exp $
use strict;

package Apache::XPointer::RDQL::Parser;
use base qw (RDQL::Parser);

$Apache::XPointer::RDQL::Parser::VERSION = '1.1';

use overload qq("") => sub {
    my $self = shift;
    return $self->query_string();
};

sub parse {
    my $self = shift;
    my $query = shift;

    $self->{'__query'} = $query;
    return $self->SUPER::parse($query);
}

sub query_string {
    my $self = shift;
    return $self->{'__query'};
}

sub bind_variables {
    my $self = shift;

    return map {
	$_ =~ /^\?(.*)/;
	$1;
    } @{$self->{'resultVars'}};
}

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;
}

sub lookup_namespaceURI {
    my $self   = shift;
    my $prefix = shift;

    if (! exists($self->{'prefixes'}->{$prefix})) {
	return undef;
    }
    
    return $self->{'prefixes'}->{$prefix};
}

return 1;