SIOC::Exporter - SIOC RDF exporter class


SIOC documentation Contained in the SIOC distribution.

Index


Code Index:

NAME

Top

SIOC::Exporter -- SIOC RDF exporter class

VERSION

Top

This documentation refers to SIOC::Exporter version 1.0.0.

SYNOPSIS

Top

   use SIOC::Exporter;

   # create SIOC object instance, e.g. a SIOC::User
   use SIOC::User;
   my $user = SIOC::User->new(...);

   # create exporter instance
   my $exporter = SIOC::Exporter->new({
       host => 'http://www.example.com',
   });

   # pass object to exporter
   $exporter->export_object($user);

   # output the object's information as RDF data
   print $exporter->output(), "\n";




DESCRIPTION

Top

This module implements a SIOC exporter class. It will output the RDF representation of SIOC objects passed to it.

ATTRIBUTES

Top

host

The host attribute stores the URL of the website whose information is exported.

This attribute is required and must be set in the creation of a class instance with new().

encoding

The encoding attribute stores the character encoding used. This information will be used in the XML processing instruction and in the charset header generated by the output() method.

generator

The generator attribute stores the identification of the software using SIOC::Exporter to generate SIOC information.

export_email

The export_email attribute stores a boolean value that determines if email addresses will be included in the RDF output.

SUBROUTINES/METHODS

Top

new(\%attributes)

Creates a new class instance. Arguments are passed as a hash reference. See the ATTRIBUTES section above for required arguments.

register_object($sioc_object)

This method registers a SIOC object with the exporter, assigning a SIOC exporter URL to it. This URL is necessary to reference the object in RDF.

export_object

Pass the SIOC object you want to export with output() as an argument to this method.

object_export_url

This method generates the URL at which the SIOC data of the object passed as an argument will be provided. It's used by register_object().

Change this method in a derived subclass to reflect your website configuration.

output

DIAGNOSTICS

Top

For diagnostics information, see the SIOC base class.

CONFIGURATION AND ENVIRONMENT

Top

This module doesn't need configuration.

DEPENDENCIES

Top

This module depends on the following modules:

INCOMPATIBILITIES

Top

There are no known incompatibilities.

BUGS AND LIMITATIONS

Top

There are no known bugs in this module.

Please report problems via the bug tracking system on the perl-SIOC project website: http://developer.berlios.de/projects/perl-sioc/.

Patches are welcome.

AUTHOR

Top

Jochen Lillich <geewiz@cpan.org>

LICENSE AND COPYRIGHT

Top


SIOC documentation Contained in the SIOC distribution.

###########################################################
# SIOC::Exporter
# Exporter class for the SIOC ontology
###########################################################
#
# $Id: Exporter.pm 21 2008-03-21 17:45:07Z geewiz $
#

package SIOC::Exporter;

use strict;
use warnings;

use version; our $VERSION = qv(1.0.0);

use Moose;
use MooseX::AttributeHelpers;
use Carp;

# singleton Template::Provider for this class
my $template_provider = Template::Provider::FromDATA->new({
    CLASSES => __PACKAGE__,
});

### required attributes

has 'host' => (
    isa => 'Str',
    is => 'rw',
    required => 1,
);

### optional attributes

has 'encoding' => (
    isa => 'Str',
    is => 'ro',
    default => sub { 'utf-8' },
);
has 'generator' => (
    isa => 'Str',
    is => 'ro',
    default => sub { 'perl-SIOC' },
);
has 'export_email' => (
    isa => 'Str',
    is => 'ro',
    default => sub { 0 },
);
    
### internal attributes

has '_object' => (
    isa => 'SIOC',
    is => 'rw',
);
has '_url' => (
    isa => 'Str',
    is => 'ro',
    default => sub { 'http://wiki.sioc.org/...' },
);
has '_version' => (
    isa => 'Str',
    is => 'ro',
    default => sub { "$VERSION" },    
);

### methods

sub _init_template {
    my ($self) = @_;

    # create new Template object
    my $template = Template->new({
        LOAD_TEMPLATES => [ 
            $template_provider,
        ]
    });

    return $template;
}

sub register_object {
    my ($self, $object) = @_;
    
    my $export_url = $self->object_export_url($object);
    $object->export_url($export_url);
    
    return $export_url;
}

sub export_object {
    my ($self, $object) = @_;
    
    $self->_object($object);
    
    return 1;
};

sub object_export_url {
    my ($self, $object) = @_;
    
    my $url = sprintf("%s/sioc.pl?class=%s&id=%s", 
        $self->host,
        $object->type, 
        $object->id
    );

    return $url;
}

sub output {
    my ($self) = @_;

    # prepare template engine
    my $template = $self->_init_template();
    my $output;

    my $object_rdf = q();

    # set object url attribute
    $self->_object->export_url($self->object_export_url($self->_object));

    # fill template variables
    my $template_vars = {
        encoding => $self->encoding,
        exporter_url => $self->_url,
        exporter_version => $VERSION,
        exporter_generator => 'perl-SIOC',
        object => $self->_object,
    };

    # process template
    my $ok = $template->process('rdfoutput', $template_vars, \$output);
    if (! $ok) {
        croak $template->error();
    }

    return $output;
}

1;
__DATA__
__rdfoutput__
Content-Type: application/rdf+xml; charset=[% encoding %]

<?xml version="1.0" encoding="[% encoding %]" ?>
<rdf:RDF
    xmlns="http://xmlns.com/foaf/0.1/"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:dcterms="http://purl.org/dc/terms/"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:sioc="http://rdfs.org/sioc/ns#">

<foaf:Document rdf:about="">
	<dc:title>SIOC profile for [% object.name %]</dc:title>
	<dc:description>A SIOC profile describes the structure and contents of a community site (e.g., weblog) in a machine processable form. For more information refer to the <a href="http://rdfs.org/sioc">SIOC project page</a>'></dc:description>
	<foaf:primaryTopic rdf:resource="[% object.url | url %]"/>
	<admin:generatorAgent rdf:resource="[% exporter_url | url %]?version=[% exporter_version | uri %]"/>
	<admin:generatorAgent rdf:resource="[% exporter_generator %]"/>
</foaf:Document>

[% IF rdf_content %][% rdf_content %][% END %]

[% IF object %]
<!-- type: [% object.type %], id: [% object.id %] -->
[% object.export_rdf %]
[% END %]

</rdf:RDF>
__END__