NAME

Class::RDF - Perl extension for mapping objects to RDF and back

SYNOPSIS

 use Class::RDF;

 # connect to an existing database
 Class::RDF->set_db( "dbi:mysql:rdf", "user", "pass" );

 # or use a temporary database
 Class::RDF->is_transient;

 # define xml namespace aliases, export some as perl namespaces.
 Class::RDF->define(
     rdf => "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
     rdfs => "http://www.w3.org/2000/01/rdf-schema#",
     foaf => "http://xmlns.com/foaf/0.1/",
 );
	
 Class::RDF::NS->export( 'rdf', 'rdfs', 'foaf' );

 # eat RDF from the world
 my @objects = Class::RDF->parse( xml => $some_rdf_xml );
 @objects = Class::RDF->parse( uri => $a_uri_pointing_to_some_rdf_xml );

 # build our own RDF objects
 my $obj = Class::RDF::Object->new( $new_uri );
 $obj->rdf::type( foaf->Person );
 $obj->foaf::name( "Larry Wall" );

 # search for RDF objects in the database
 my @people = Class::RDF::Object->search( rdf->type => foaf->Person );
 for my $person (@people) {
     print $person->foaf::OnlineAccount->foaf::nick, "\n";
 }

 my $rdf_xml = Class::RDF->serialize( @people );

DESCRIPTION

  Class::RDF is a perl object layer over an RDF triplestore. 
  It is based on Class::DBI, the perl object / RDBMS package.
  Thus it works with mysql, postgresql, sqlite etc.
  Look in the sql/ directory distributed with this module for database schemas.

  It provides an 'rdf-y' shortcut syntax for addressing object properties.
  It also contains a triples-matching RDF API.
	  		

Class::RDF

METHODS

set_db

Class::RDF->set_db( "dbi:mysql:rdfdb", "user", "pass );

Specify the DBI connect string, username, and password of your RDF store. This method just wraps the set_db() method inherited from Class::DBI. If you want a simple temporary data store, use is_transient() instead.

is_transient

Class::RDF->is_transient;
Class::RDF->is_transient( DIR => "/tmp" );

Specify a temporary data store for Class::RDF. Class::RDF uses File::Temp to create an SQLite data store in a temporary file that is removed when your program exits. Optional arguments to is_transient() are passed to File::Temp->new as is, potentially overriding Class::RDF's defaults. See File::Temp for more details.

define

Class::RDF->define('foaf','http://xmlns.com/foaf/0.1/');

Define an alias for an XML namespace. This needs to be done once per program, and is probably accompanied by a Class::RDF::NS->export('short_name').

This should be superseded by a loaded RDF model of namespaces and aliases which comes with the distribution and lives in the database.

parse

my @objects = Class::RDF->parse( xml => $some_xml );
my @objects = Class::RDF->parse( uri => $uri_of_some_xml );

Parses the xml either passed in as a string or available at a URI, directly into the triplestore and returns the objects represented by the graph.

serialise

my $xml = Class::RDF->serialise( @objects );

Take a number of Class::RDF::Object objects, and serialise them as RDF/XML.

Class::RDF::Object

Class::RDF::Object is the base class for RDF perl objects. It is designed to be subclassed:

package Person; use base 'Class::RDF::Object';

Create a Class::RDF::Object derived object, then RDF predicate - object pairs can be set on it with a perlish syntax.

RDF resources - that is http:// , mailto: etc URIs, are automatically turned into Class::RDF::Objects when they are requested. To observe them as URIs they have to be referenced as $object->uri->value. RDF literals - ordinary strings - appear as regular properties.

my $person = Person->new({foaf->mbox => 'mailto:zool@frot.org',
			  foaf->nick => 'zool'});
print $person->uri->value;
print $person->foaf::nick;
print $person->foaf::mbox->uri->value;

METHODS

new ( [uri], [{ properties}], [context],[ baseuri] )

my $obj = Class::RDF::Object->new({ rdf->type => foaf->Person, 
				    foaf->nick => 'zool'});
# creates a stored object with blank node uri

my $obj = Class::RDF::Object->new($uri);
# creates (or retrieves) a stored object with a uri

my $obj = Class::RDF::Object->new($uri,$context_uri);
# creates (or retrieves) a stored object with a uri with a context

search ( predicate => object )

my @found = $object->search( rdf->type => foaf->Person );
my $found = $object->search( foaf->mbox );

Search for objects with predicate - object matching pairs. Can also supply a predicate without a corresponding object.

uri

my $uri = $object->uri;
print $uri->value;

Returns the uri of the object.

Class::RDF::Statement

Class::RDF also provides the equivalent of a triples-matching API to the RDF store.

my @statements = Class::RDF::Statement->search(subject => $uri);
my @statements = Class::RDF::Statement->search(predicate => foaf->nick,
					       object => 'zool');
my @statements = Class::RDF::Statement->search(context => $uri);

my @triples = map {$_->triples} @statements;
# three Class::RDF::Node objects

Class::RDF::Node

my $node = Class::RDF::Node->new($uri); # create or retrieve
my $exists = Class::RDF::Node->find($uri);

SEE ALSO

Class::DBI(3pm), RDF::Simple(3pm)

http://space.frot.org/grout.html - an RDF aggregator built on Class::RDF

TODO/BUGS

lots! 

AUTHORS

Schuyler D. Erle <schuyler@nocat.net>

jo walsh <jo@frot.org>

COPYRIGHT AND LICENSE

Copyright (C) 2004 by Schuyler Erle & Jo Walsh

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.3 or, at your option, any later version of Perl 5 you may have available.