# $File: //member/autrijus/RDF-YAML/lib/RDF/Simple/Parser/YAML.pm $ $Author: autrijus $ # $Revision: #2 $ $Change: 8524 $ $DateTime: 2003/10/22 05:20:04 $ package RDF::Simple::Parser::YAML; $RDF::Simple::Parser::YAML::VERSION = '0.01'; use strict; use YAML; use Class::MethodMaker new_hash_init => 'new', get_set => [ qw(base ns)]; =head1 NAME RDF::Simple::Parser::YAML - Simple RDF/YAML parser =head1 DESCRIPTION This module is a simple RDF/XML parser. It reads a string containing RDF in YAML, and returns an array of RDF triples. =head1 SYNOPSIS my $uri = 'http://www.w3.org/2000/08/w3c-synd/home.rss'; my $rdf = LWP::Simple::get($uri); my $parser = RDF::Simple::Parser::YAML->new(base => $uri) my @triples = $parser->parse_rdf($rdf); # returns an array of array references which are triples =head1 METHODS =head2 new( base => $uri ) Create a new RDF::Simple::Parser::YAML object. The optional parameter C supplies a base URI for relative URIs found in the document. (This function is currently unimplemented.) =head2 parse_rdf($rdf) Accepts a string which is an RDF/YAML document. Returns an array of array references which are RDF triples. =cut sub parse_rdf { my ($self, $rdf) = @_; my $hash = YAML::Load($rdf) or return []; my $ns = $self->ns($hash->{''}); $ns->{''} = 'urn:empty' unless exists $ns->{''}; my @rv; foreach my $subject (sort grep length, keys %$hash) { my $node = $hash->{$subject} or next; foreach my $predicate (sort grep length, keys %$node) { my $object = $node->{$predicate}; $predicate =~ s/^(\w[^:]*):/$ns->{$1}/g or $predicate =~ /:/ or $predicate = $ns->{''} . $predicate; push @rv, [ $subject, $predicate, $object ]; } } return @rv; } 1; =head1 SEE ALSO L, L =head1 AUTHORS Autrijus Tang Eautrijus@autrijus.orgE =head1 COPYRIGHT Copyright 2003 by Autrijus Tang Eautrijus@autrijus.orgE. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L =cut