#!/bin/env perl print "==== Example 4 - Find all the books with a given title (a string)\n" ; # There are several ways of doing this - here, we use the simple "triples" # language to do reverse lookup to find the resource, then "fetch" it. require Joseki ; require RDF::Core::Model ; require RDF::Core::Resource ; my $DC = 'http://purl.org/dc/elements/1.1/' ; my $dcTitle = $DC.'title' ; my $kbURL = 'http://jena.hpl.hp.com:2020/books' ; if ( $#ARGV != -1 ) { $kbURL = shift ; print "Data source = $kbURL\n" ; } my $book = 'http://example.org/book/book1' ; my $bookRef = new RDF::Core::Resource($book) ; ## # Has a vacrd for author ## my $title = 'Harry Potter And The Prisoner Of Azkaban' ; # Has no author information. my $title = 'Harry Potter and the Goblet of Fire' ; my $titleL = new RDF::Core::Literal($title) ; my $dcTitleR = new RDF::Core::Resource($dcTitle) ; my $model = Joseki->triples($kbURL, undef, $dcTitleR, $title) ; # printModelStmts($model) ; # What statements did we get? my $sIter = $model->getStmts(undef, undef, undef) ; my $statement = $sIter->getFirst; for(; defined $statement ; $statement = $sIter->getNext ) { print "Book: ",$statement->getSubject->getURI, "\n" ; my $m2 = Joseki->fetch($kbURL, $statement->getSubject) ; printModelStmts($m2) ; } $sIter->close; sub printModelStmts { my($model) = @_ ; my $sIter = $model->getStmts; my $stmt = $sIter->getFirst; for(; defined $stmt ; $stmt = $sIter->getNext ) { print "[ ",$stmt->getSubject->getURI, ",\n ",$stmt->getPredicate->getURI, ",\n ",$stmt->getObject->getLabel," ]\n" ; } $sIter->close ; }