RDF::Simple::Serialiser::YAML - Simple RDF/YAML serialiser


RDF-YAML documentation Contained in the RDF-YAML distribution.

Index


Code Index:

NAME

Top

RDF::Simple::Serialiser::YAML - Simple RDF/YAML serialiser

SYNOPSIS

Top

    my $ser = RDF::Simple::Serialiser::YAML->new;

    my @triples = (
	['http://example.com/url#', 'dc:creator', 'zool@example.com'],
	['http://example.com/url#', 'foaf:Topic', '_id:1234'],
	['_id:1234','http://www.w3.org/2003/01/geo/wgs84_pos#lat','51.334422']
    );

    my $yaml_string = $ser->serialise(@triples);

DESCRIPTION

Top

This module is a subclass of RDF::Simple::Serialiser to produce serialised RDF/YAML documents from an array of triples.

Please see RDF::Simple::Serialiser for a list of supported methods.

SEE ALSO

Top

RDF::YAML, RDF::Simple::Parser::YAML

AUTHORS

Top

Autrijus Tang <autrijus@autrijus.org>

COPYRIGHT

Top


RDF-YAML documentation Contained in the RDF-YAML distribution.
# $File: //member/autrijus/RDF-YAML/lib/RDF/Simple/Serialiser/YAML.pm $ $Author: autrijus $
# $Revision: #1 $ $Change: 8523 $ $DateTime: 2003/10/22 04:14:34 $

package RDF::Simple::Serialiser::YAML;
$RDF::Simple::Serialiser::YAML::VERSION = '0.01';

use strict;
use RDF::Simple::Serialiser;
use base 'RDF::Simple::Serialiser';

# Escapes for unprintable characters
my @escapes = qw(\z   \x01 \x02 \x03 \x04 \x05 \x06 \a
                 \x08 \t   \n   \v   \f   \r   \x0e \x0f
                 \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17
                 \x18 \x19 \x1a \e   \x1c \x1d \x1e \x1f
                );

sub render {
    my ($self, $template, $data, $out_object) = @_;
    $data->{emit} = sub { $self->emit($_[0]) };
    return $self->SUPER::render($template, $data, $out_object);
}

sub emit {
    my ($self, $string) = @_;

    use bytes;
    if ($string =~ /^\W|[\x00-\x08\x0b-\x0d\x0e-\x1f:#]|^\s|\s\z|\A\z/) {
	$string =~ s/\\/\\\\/g;
	$string =~ s/"/\\"/g;
	$string =~ s/([\x00-\x1f])/$escapes[ord($1)]/ge;
	return qq{"$string"};
    }
    else {
	return $string;
    }
}

sub get_template {
    my $template = <<'END_TEMPLATE';
[% USE url('') %]--- #YAML:1.0
'':[% FOREACH key = ns.keys.sort %]
  [% IF key.length %][% key %][% ELSE %]''[% END %]: [% url(ns.$key) %][% END %][% FOREACH object = objects %]
[% IF object.Uri %][% object.Uri %][% ELSE %][% object.NodeId %][% END %]:[% IF object.Class != 'rdf:Description' %]
  rdf:type: [% object.Class %][% END %][% FOREACH lit = object.literal.keys.sort %][% FOREACH prop = object.literal.$lit %]
  [% lit %]: [% emit(prop) %][% END %][% END %][% FOREACH res = object.resource.keys.sort %][% FOREACH prop = object.resource.$res %]
  [% res %]: [% url(prop) %][% END %][% END %][% FOREACH node = object.nodeid.keys.sort %][% FOREACH prop = object.nodeid.$node %]
  [% node %]: [% prop %][% END %][% END %][% END %]
END_TEMPLATE

    return \$template;
}

1;