# -*- Mode: Perl -*- # # Stream.pm - Redland Perl RDF Stream module # # Copyright (C) 2000-2003 David Beckett - http://www.dajobe.org/ # Copyright (C) 2000-2003 University of Bristol - http://www.bristol.ac.uk/ # # This package is Free Software and part of Redland http://librdf.org/ # # It is licensed under the following three licenses as alternatives: # 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version # 2. GNU General Public License (GPL) V2 or any newer version # 3. Apache License, V2.0 or any newer version # # You may not use this file except in compliance with at least one of # the above three licenses. # # See LICENSE.html or LICENSE.txt at the top of this package for the # full license terms. # # # package RDF::Redland::Stream; use strict; use RDF::Redland::Statement; =pod =head1 NAME RDF::Redland::Stream - Redland RDF Stream of RDF::Redland::Statement objects Class =head1 SYNOPSIS use RDF::Redland; ... my $stream=$model->serialise; while($stream && !$stream->end) { my $statement=$stream->current; ... $stream->next; } =head1 DESCRIPTION Represents a sequence of RDF::Redland::Statement objects passed between various Redland objects. =cut ###################################################################### =pod =head1 CONSTRUCTORS No public constructors - are created and returned from various methods of classes including RDF::Redland::Model and RDF::Redland::Parser =cut sub new ($$$) { my($proto,$object,$creator)=@_; my $class = ref($proto) || $proto; my $self = {}; $self->{STREAM}=$object; # Keep around a reference to the object that created the stream so # that perl destroys us before it. $self->{CREATOR}=$creator; bless ($self, $class); return $self; } # DESTRUCTOR sub DESTROY ($) { my $self=shift; warn "RDF::Redland::Stream DESTROY $self" if $RDF::Redland::Debug; &RDF::Redland::CORE::librdf_free_stream($self->{STREAM}) if($self->{STREAM}); $self->{CREATOR}=undef; warn "RDF::Redland::Stream DESTROY done\n" if $RDF::Redland::Debug; } =head1 METHODS =over =item end Returns non 0 if the stream is finished. =cut sub end ($) { my $self=shift; return 1 if !$self->{STREAM}; &RDF::Redland::CORE::librdf_stream_end($self->{STREAM}); } =item current Returns the current RDF::Redland::Statement object in the stream or undef if the stream is finished. =cut sub current ($) { my $self=shift; return undef if !$self->{STREAM}; my $statement=&RDF::Redland::CORE::librdf_stream_get_object($self->{STREAM}); RDF::Redland::Statement->_new_from_object($statement); } =pod =item next Moves to the next RDF::Redland::Statement object in the stream. Returns non-zero if the stream is finished. =cut sub next ($) { my $self=shift; return 1 if !$self->{STREAM}; return &RDF::Redland::CORE::librdf_stream_next($self->{STREAM}); } =item context Returns the context RDF::Redland::Node object in the stream or undef if the stream is finished. =cut sub context ($) { my $self=shift; return undef if !$self->{STREAM}; my $object=&RDF::Redland::CORE::librdf_stream_get_context($self->{STREAM}); RDF::Redland::Node->_new_from_object($object); } =pod =back =head1 SEE ALSO L and L =head1 AUTHOR Dave Beckett - http://www.dajobe.org/ =cut 1;