The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package RDF::Trine::Serializer::OwlFn;

BEGIN {
	$RDF::Trine::Serializer::OwlFn::AUTHORITY = 'cpan:TOBYINK';
	$RDF::Trine::Serializer::OwlFn::VERSION   = '0.001';
};

use 5.008;
use strict;

use RDF::Trine;
use base qw[RDF::Trine::Serializer];
use OWL::DirectSemantics;

BEGIN
{
	$RDF::Trine::Serializer::serializer_names{$_} = __PACKAGE__
		foreach qw[ofn owlfn owlfunctional];
	
	$RDF::Trine::Serializer::format_uris{'http://www.w3.org/ns/formats/OWL_Functional'} = __PACKAGE__;
	
	$RDF::Trine::Serializer::media_types{'text/owl-functional'} = __PACKAGE__;
}

sub new
{
	my ($class, %args) = @_;
	return bless \%args, $class;
}

sub serialize_model_to_file
{
	my ($self, $fh, $model) = @_;
	
	my $tmp = RDF::Trine::Model->temporary_model;
	$model->as_stream->each(sub { $tmp->add_statement($_[0]) });
	
	my $translator = OWL::DirectSemantics->new;
	my $ontology   = $translator->translate($tmp);
	
	print $fh $ontology->fs;
}

1;

=head1 NAME

RDF::Trine::Serializer::OwlFn - OWL Functional Syntax Serializer

=head1 SYNOPSIS

	use RDF::Trine;
	my $ser = RDF::Trine::Serializer->new('owlfn');
	print $ser->serialize_model_to_string($model);

=head1 DESCRIPTION

=head2 Methods

This class inherits methods from the L<RDF::Trine::Serializer> class.

=head1 SEE ALSO

L<RDF::Closure>, L<RDF::Trine::Parser::OwlFn>.

L<http://www.perlrdf.org/>.

=head1 AUTHOR

Toby Inkster E<lt>tobyink@cpan.orgE<gt>.

=head1 COPYRIGHT

Copyright 2011-2012 Toby Inkster

This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=head1 DISCLAIMER OF WARRANTIES

THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.