RDF::Redland::Storage - Redland RDF Storage Class


Redland documentation Contained in the Redland distribution.

Index


Code Index:

NAME

Top

RDF::Redland::Storage - Redland RDF Storage Class

SYNOPSIS

Top

  use RDF::Redland;
  my $storage=new RDF::Redland::Storage("hashes", "test", "new='yes',hash-type='memory'");
  ...

DESCRIPTION

Top

Create objects for storing RDF::Redland::Model objects either persistently or in memory.

CONSTRUCTORS

Top

new STORAGE_NAME [NAME [OPTIONS_STRING]]

Create a new RDF::Redland::Storage object for the storage factory named STORAGE_NAME with storage named NAME and storage options OPTIONS_STRING which are specific to the storage factory type.

The storage options may be given either as a Perl hash or as a string. The string form are formatted in the form key1='value1',key2='value2' and the single quotes are required. The Perl hash form follows normal Perl conventions, and the boolean options use normal Perl concepts of truth.

Currently defined storage options:

new='yes'

Create a new storage erasing any existing one (boolean, default).

write='yes'

Provide write access to store (boolean, default) otherwise is read only.

dir='DIR'

Work in DIR directory when creating files.

mode='MODE'

File creation mode, default is (octal) 0644 Takes decimal (123), hex (0x123) or octal (0123).

contexts='yes'

Enable statement contexts. Each statement can be stored with an optional context Node and the context retrieved after queries. Boolean.

hash-type='TYPE' (hashes storage only)

Use the TYPE hash-type for hashes storage. Current defined types are 'memory' and 'bdb' but is dependent on the hash factories available.

index-predicates='yes' (hashes storage only)

Enable indexing from predicates to (subject,object) which can in particular be useful for rdf:type relations. Boolean.

bulk='no' (mysql storage only)

Whether model/storage method add_statements should be optimized, until a model/storage sync operation. Boolean.

merge='no' (mysql storage only)

Whether to maintain a table with merged models. Boolean.

Example, string form:

  $storage=new RDF::Redland::Storage("hashes", "test", 
                            "new='yes',hash-type='bdb',dir='.'");

Example, Perl hash form:

  $storage=new RDF::Redland::Storage("hashes", "test", 
                            {new=>1,hash-type=>'bdb',dir=>'.'});

Creates a new storage of the hashes type (indexed hashes) named test (these will be file names or URIs if the storage is persistent) and with options new='yes',hash-type='bdb',dir='.' so a new storage is created with BerkeleyDB (BDB) key:value hashes i.e. persistent and in the current directory.

Example, Perl hash form:

  $storage=new RDF::Redland::Storage("mysql", "test", {host=>'localhost',database=>'testdb',user=>'testuser',new=>0,password=>'',contexts=>1});

Uses an existing storage of the mysql type, named test on localhost with database name testdb using a user testuser and no password. Contexts are enabled.

new_from_storage STORAGE

Create a new RDF::Redland::Storage object from RDF::Redland::Storage STORAGE (copy constructor). The new storage may have a new name chosen by the storage factory.

SEE ALSO

Top

RDF::Redland::Model

AUTHOR

Top

Dave Beckett - http://purl.org/net/dajobe/


Redland documentation Contained in the Redland distribution.
# -*- Mode: Perl -*-
#
# Storage.pm - Redland Perl RDF Storage module
#
# $Id: Storage.pm 10593 2006-03-05 08:30:38Z dajobe $
#
# Copyright (C) 2000-2005 David Beckett - http://purl.org/net/dajobe/
# Copyright (C) 2000-2005 University of Bristol - http://www.bristol.ac.uk/
# 
# This package is Free Software or Open Source available under the
# following licenses (these are alternatives):
#   1. GNU Lesser General Public License (LGPL)
#   2. GNU General Public License (GPL)
#   3. Mozilla Public License (MPL)
# 
# See LICENSE.html or LICENSE.txt at the top of this package for the
# full license terms.
# 
# 
#

package RDF::Redland::Storage;

use strict;

######################################################################

sub new ($$;$$) {
  my($proto,$storage_name,$name,$options)=@_;
  my $class = ref($proto) || $proto;
  my $self  = {};
  my $options_string = $options; # Default to use the string as is.
  if (ref($options) eq 'HASH') { # Build the string from a key=>value hash
    my %booleans = (new=>1,bulk=>1,merge=>1,write=>1,contexts=>1,'index-predicates'=>1);
    $options_string = '';
    while (my ($key, $value) = each(%{$options})) {
      if (defined($value)) {
        if (length($options_string) > 0) {
          $options_string .= ',';
        }
        if ($booleans{$key}) {
          $options_string .= "$key='". (($value) ? 'yes':'no') ."'";
        } else {
          $options_string .= "$key='$value'";
        }
      }
    }
  }

  warn qq{RDF::Redland::Storage->new("$storage_name", "$name", "$options_string")\n} if $RDF::Redland::Debug;

  $self->{STORAGE}=&RDF::Redland::CORE::librdf_new_storage($RDF::Redland::World->{WORLD},$storage_name,$name,$options_string);
  return undef if !$self->{STORAGE};

  bless ($self, $class);
  return $self;
}

sub new_from_storage ($$$) {
  my($proto,$storage)=@_;
  my $class = ref($proto) || $proto;
  my $self  = {};
  $self->{STORAGE}=&RDF::Redland::CORE::librdf_new_storage_from_storage($storage->{STORAGE});
  return undef if !$self->{STORAGE};

  bless ($self, $class);
  return $self;
}

sub DESTROY ($) {
  my $self=shift;
  warn "RDF::Redland::Storage DESTROY $self" if $RDF::Redland::Debug;
  if(!$self->{STORAGE}) {
    warn "RDF::Redland::Storage DESTROY - librdf storage object gone\n" if $RDF::Redland::Debug;
  } else {
    &RDF::Redland::CORE::librdf_free_storage($self->{STORAGE});
  }
  warn "RDF::Redland::Storage DESTROY done\n" if $RDF::Redland::Debug;
}

1;