Redland ライブラリと Perl の RDF::Redland バインディングは、永続ストアとモデルを作成し、RDF/XML ファイルをそれに解析することに関して、非常によく文書化されています (たとえば、こことここ)。
一方で、永続ストアからモデルを取得する方法の例を見つけることができず、明らかな方法は機能しません。
こんな感じでお店を作りました。
my $storage =
new RDF::Redland::Storage( "hashes", "test",
"new='yes',hash-type='bdb',dir='data'" )
or die "Failed to create RDF::Redland::Storage\n";
my $model = new RDF::Redland::Model( $storage, "" )
or die "Failed to create RDF::Redland::Model for storage\n";
my $uri = new RDF::Redland::URI("file:test.rdf");
my $parser = new RDF::Redland::Parser( "rdfxml", "application/rdf+xml" )
or die "Failed to find parser\n";
my $stream = $parser->parse_as_stream( $uri, $uri );
my $count = 0;
while ( !$stream->end ) {
$model->add_statement( $stream->current );
$count++;
$stream->next;
}
$stream = undef;
$storage = undef;
$model = undef;
print "Done. There were $count statements.\n";
これは機能し、300k 程度のステートメントがあることを知らせてくれます。
次に、別のスクリプトでこのデータを取得しようとします。
my $storage =
new RDF::Redland::Storage( "hashes", "test",
"hash-type='bdb',dir='data'" )
or die "Failed to create RDF::Redland::Storage\n";
my $model = new RDF::Redland::Model( $storage, "" )
or die "Failed to create RDF::Redland::Model for storage\n";
$model->sync; # tried with and without this line
my $stream = $model->as_stream;
while ( !$stream->end ) {
print "Statement: ", $stream->current->as_string, "\n";
$stream->next;
}
これはまったく何も印刷しません。
助けてくれてありがとう!