Bu amaçla öncelikle Jena SPARQL dökümanına bakmak yararlı olacaktır.
Jena SPARQL sorgularını işlemek üzere ARQ isimli bir kütüphane kullanıyor: ARQ dökümanı.
ARQ yardımı ile SPARQL sorgularına örnek olarak şu adreslere bakılabilir:
http://jena.sourceforge.net/ARQ/Tutorial/query1.html
http://www.ibm.com/developerworks/xml/library/j-sparql/
SPARQL ile sorgulama yapmak için örnek olarak aşağıdaki sorgu gibi bir sorgu hazırlayıp, yine aşağıda metodu çağırarak bu sorgunun sonucunu alabiliriz:
Q: which persons has same surname with "Ayder"
SPARQL:
PREFIX rdf: http://localhost/TestDocumentOntology.owl#
SELECT ?Result
WHERE { ?Person rdf:Surname ?Result .
FILTER regex(?Result, \"ayder\", \"i\" )}
import com.hp.hpl.jena.ontology.*;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.shared.ConfigException;
import com.hp.hpl.jena.shared.JenaException;
import com.hp.hpl.jena.query.*;
import com.hp.hpl.jena.shared.PrefixMapping;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
import com.hp.hpl.jena.util.iterator.Filter;
static OntModel ontModel = null;
static final String inputFileName = "MyOntology.owl";
public static OntModel loadOntology(){
try{
ontModel = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM, null );
InputStream in = FileManager.get().open( inputFileName );
if (in == null) {
throw new IllegalArgumentException( "File: " + inputFileName + " not found");
}
// read the RDF/XML file
ontModel.read(in, "");
}
catch (JenaException jx) {
if (jx.getCause() instanceof NoRouteToHostException
|| jx.getCause() instanceof UnknownHostException
|| jx.getCause() instanceof ConnectException
|| jx.getCause() instanceof IOException) {
System.out.println("Cannot access public internet - content negotiation test not executed");
} else
throw jx;
}
catch(Exception e){
System.out.println(e.getMessage());
}
return ontModel;
}
public static ArrayList executeQuery( ArrayList queryList ){
ArrayList resultList = new ArrayList();
String key = null;
System.out.println("------------------------------------");
// Execute the query and obtain results
QueryExecution qe = null;//QueryExecutionFactory.create(query[0], model);
ResultSet results = null;//qe.execSelect();
//use alternative queries
for(int i= 0; i < queryList.size() ; i++)
{
qe = QueryExecutionFactory.create(queryList.get(i).toString(), ontModel);
results = qe.execSelect();
System.out.println("**********************");
System.out.println("query : " + queryList.get(i) );
System.out.println("**********************");
if(results.hasNext())
{
resultList.add(ResultSetFormatter.asText(results));
// Output query results
//ResultSetFormatter.out(System.out, results);
for (int k=0;k
System.out.println(resultList.get(k));
break;
}else
{
System.out.println("NO RESULT for the query " + i);
}
}
// Important - free up resources used running the query
qe.close();
return resultList;
}
2 yorum:
Merhabalar,
Yukarıdaki kod, Jena ile RDF/XML dosyalarını okutulabiliyor. Fakat, OWL/XML dosyalarını nasıl okutabiliriz?
Şimdiden teşekkürler...
JEna 2.0 içerisinde OWL Full desteği war temelde "ontModel = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM, null );" yeterlidir.
Yorum Gönder