Mark Allen Jensen > REST-Neo4p-0.1284 > REST::Neo4p

Download:
REST-Neo4p-0.1284.tar.gz

Dependencies

Annotate this POD

CPAN RT

New  2
Open  4
Stalled  1
View/Report Bugs
Module Version: 0.1284   Source   Latest Release: REST-Neo4p-0.3004

NAME ^

REST::Neo4p - Perl object bindings for a Neo4j database

SYNOPSIS ^

  use REST::Neo4p;
  REST::Neo4p->connect('http://127.0.0.1:7474');
  $i = REST::Neo4p::Index->new('node', 'my_node_index');
  $i->add_entry(REST::Neo4p::Node->new({ name => 'Fred Rogers' }),
                                       guy  => 'Fred_Rogers');
  $index = REST::Neo4p->get_index_by_name('my_node_index','node');
 ($my_node) = $index->find_entries('guy' => 'Fred_Rogers');
  $new_neighbor = REST::Neo4p::Node->new({'name' => 'Donkey Hoty'});
  $my_reln = $my_node->relate_to($new_neighbor, 'neighbor');

  $query = REST::Neo4p::Query->new("START n=node(".$my_node->id.")
                                    MATCH p = (n)-[]->()
                                    RETURN p");
  $query->execute;
  $path = $query->fetch->[0];
  @path_nodes = $path->nodes;
  @path_rels = $path->relationships;

Batch processing (see REST::Neo4p::Batch for more)

 #!perl
 # loader...
 use REST::Neo4p;
 use REST::Neo4p::Batch;
 
 open $f, shift() or die $!;
 batch {
   while (<$f>) {
    chomp;
    ($name, $value) = split /\t/;
    REST::Neo4p::Node->new({name => $name, value => $value});
   } 'discard_objs';
 exit(0);

DESCRIPTION ^

REST::Neo4p provides a Perl 5 object framework for accessing and manipulating a Neo4j graph database server via the Neo4j REST API. Its goals are

(1) to make the API as transparent as possible, allowing the user to work exclusively with Perl objects, and

(2) to exploit the API's self-discovery mechanisms, avoiding as much as possible internal hard-coding of URLs.

Neo4j entities are represented by corresponding classes:

Actions on class instances have a corresponding effect on the database (i.e., REST::Neo4p approximates an ORM).

The class REST::Neo4p::Query provides a DBIesqe Cypher query facility.

Property Auto-accessors

Depending on the application, it may be natural to think of properties as fields of your nodes and relationships. To create accessors named for the entity properties, set

 $REST::Neo4p::CREATE_AUTO_ACCESSORS = 1;

Then, when "set_property()" is used to first create and set a property, accessors will be created on the class:

 $node1->set_property({ flavor => 'strange', spin => -0.5 });
 printf "Quark has flavor %s\n", $node1->flavor;
 $node1->set_spin(0.5);

If your point of reference is the database, rather than the objects, auto-accessors may be confusing, since once the accessor is created for the class, it will exist for all future instances:

 print "Yes I can!\n" if REST::Neo4p::Node->new()->can('flavor');

but there is no fundamental reason why new nodes or relationships must have the property (it is NoSQL, after all). Therefore this is a choice for you to make; the default is no auto-accessors.

CLASS METHODS ^

connect()
 REST::Neo4p->connect( $server )
get_node_by_id()
 $node = REST::Neo4p->get_node_by_id( $id );
get_relationship_by_id()
 $relationship = REST::Neo4p->get_relationship_by_id( $id );
get_index_by_name()
 $node_index = REST::Neo4p->get_index_by_name( $name, 'node' );
 $relationship_index = REST::Neo4p->get_index_by_name( $name, 'relationship' );
get_relationship_types()
 @all_relationship_types = REST::Neo4p->get_relationship_types;
get_indexes(), get_node_indexes(), get_relationship_indexes()
 @all_indexes = REST::Neo4p->get_indexes;
 @node_indexes = REST::Neo4p->get_node_indexes;
 @relationship_indexes = REST::Neo4p->get_relationship_indexes;

SEE ALSO ^

REST::Neo4p::Node,REST::Neo4p::Relationship,REST::Neo4p::Index, REST::Neo4p::Query, REST::Neo4p::Path, REST::Neo4p::Batch

AUTHOR ^

    Mark A. Jensen
    CPAN ID: MAJENSEN
    majensen -at- cpan -dot- org

LICENSE ^

Copyright (c) 2012 Mark A. Jensen. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

syntax highlighting: