2013-02-01 3 views
0

Redland 라이브러리와 펄에 대한 RDF : Redland 바인딩이 아주 잘가 켜짐 예를 herehere.저장된 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; 
} 

이 인쇄 절대적으로 아무것도.

도움 주셔서 감사합니다.

답변

1

나는 내 자신의 문제에 대한 해결책을 찾았는데, 나는 그토록 많은 시간을 잃어 버리는 엄청난 어리 석음을 느낀다. 그래서 그것이 다른 누군가가 같은 지옥을 헤쳐나 가는데 도움이된다면 여기 있습니다.

문제는 저장소를 검색하는 것이 아니라 저장하는 것입니다. 3 개의 버클리 DB 파일의 무게가 366 MB이기 때문에 이것은 분명하지 않았습니다. 따라서 첫 번째 스크립트가 끝나면 스토리지와 모델을 undef에 보내기 전에 $model->sync과 동기화해야합니다.

그게 전부입니다.

(그리고 그 이후 버클리 파일은 여전히 ​​동일한 크기입니다. 이유는 묻지 마십시오.)