Oh, just thought of one more thing. If you want to avoid the inversion of control with the anonymous Sink<Triple> class (and don't mind living on the bleeding edge), you can use the latest ARQ Snapshot [1] which has this method:
Iterator<Triple> it = RiotReader.createIteratorTriples(...) -Stephen [1] https://repository.apache.org/content/repositories/snapshots/org/apache/jena/jena-arq/2.9.1-incubating-SNAPSHOT/ On Sun, Apr 22, 2012 at 7:05 PM, Stephen Allen <[email protected]> wrote: > On Sun, Apr 22, 2012 at 6:17 PM, Gunaratna, Dalkandura Arachchige > Kalpa Shashika Silva <[email protected]> wrote: >> Hi, >> I have a simple requirement and that is to read >> <http://www.w3.org/2002/07/owl#sameAs> object values (sameAs link value) in >> a rdf file. For that I create an ontology model and read the whole file. >> Following is a code sample I sue for that. >> >> model=ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM); >> SysRIOT.wireIntoJena() ; >> model.read(url); >> StmtIterator stmtItr=model.listStatements(); >> >> This way of processing has a huge processing overhead for my program since >> for every rdf file I just need to read the whole file to get sameAs links. >> Is there any other way of doing this kind of work or only possible way is to >> read the whole file to get the specific property type we want? >> >> And also, what happens if we do not call model.close() at the end? Will it >> be a problem which will cause heap out of space problem? >> >> Thank you, >> Kalpa > > Hi Kalpa, > > If you are simply interested in parsing an RDF file in a streaming > fashion, you can do something like below. If you know that you don't > have any duplicate triples, then you can eliminate the HashSet. > > final Set<Triple> sameAsTriples = new HashSet<Triple>(); > Sink<Triple> sink = new Sink<Triple>() > { > @Override > public void send(Triple t) > { > if (OWL.sameAs.asNode().equals(t.getPredicate())) > { > // You can either do something immediately with this > triple, or stick it a HashSet to enforce uniqueness > sameAsTriples.add(t); > } > } > > @Override > public void flush() { } > > @Override > public void close() { } > }; > > // To enable RDFS inferencing uncomment the following two lines. > // You need to have your T-Box (ontology) loaded into some model > //Model ontologyModel = ... > //sink = InfFactory.infTriples(sink, ontologyModel); > > String filename = ... > RiotReader.parseTriples(new FileInputStream(filename), > Lang.guess(filename), null, sink); > > // Now do something with sameAsTriples
