Exception while using createOntologyModel
package tutorial;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.ResultSetFormatter;
import com.hp.hpl.jena.rdf.model.ModelFactory;
public class Jena {
/**
* @param args
* @throws IOException
*/
开发者_运维问答 public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InputStream in = new FileInputStream(new File("E:\\Applications\\workspace-protoge\\periodic.owl"));
OntModel model2 = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM);
model2.read( in, null );
//prints out the RDF/XML structure
in.close();
System.out.println(" ");
// Create a new query
String queryString =
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "+
"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+
"select ?uri "+
"where { "+
"?uri rdfs:subClassOf <http://www.co-ode.org/roberts/pto.owl#Charge> "+
"} \n ";
Query query = QueryFactory.create(queryString);
System.out.println("----------------------");
System.out.println("Query Result Sheet");
System.out.println("----------------------");
System.out.println("Direct&Indirect Descendants (model1)");
System.out.println("-------------------");
// Execute the query and obtain results
QueryExecution qe = QueryExecutionFactory.create(query, model2);
com.hp.hpl.jena.query.ResultSet results = qe.execSelect();
// Output query results
ResultSetFormatter.out(System.out, results, query);
}
}
On running the above code,i get the following warning. I cannot understand why
WARN [main] (OntDocumentManager.java:1078) - An error occurred while attempting to read from http://www.cs.man.ac.uk/~stevensr/ontology/units.owl. Msg was 'java.net.SocketException: Permission denied: connect'.
com.hp.hpl.jena.shared.JenaException: java.net.SocketException: Permission denied: connect
at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:91)
at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:187)
at com.hp.hpl.jena.util.FileManager.readModelWorker(FileManager.java:367)
at com.hp.hpl.jena.util.FileManager.readModel(FileManager.java:335)
at com.hp.hpl.jena.util.FileManager.readModel(FileManager.java:319)
at com.hp.hpl.jena.ontology.OntDocumentManager.read(OntDocumentManager.java:1064)
at com.hp.hpl.jena.ontology.OntDocumentManager$1.readModel(OntDocumentManager.java:1034)
at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.getModel(ModelMakerImpl.java:78)
at com.hp.hpl.jena.ontology.OntDocumentManager.fetchLoadedImportModel(OntDocumentManager.java:1031)
at com.hp.hpl.jena.ontology.OntDocumentManager.fetchPossiblyCachedImportModel(OntDocumentManager.java:1004)
at com.hp.hpl.jena.ontology.OntDocumentManager.loadImport(OntDocumentManager.java:977)
at com.hp.hpl.jena.ontology.OntDocumentManager.loadImports(OntDocumentManager.java:771)
at com.hp.hpl.jena.ontology.OntDocumentManager.loadImports(OntDocumentManager.java:709)
at com.hp.hpl.jena.ontology.impl.OntModelImpl.loadImports(OntModelImpl.java:1887)
at com.hp.hpl.jena.ontology.impl.OntModelImpl.read(OntModelImpl.java:2050)
at tutorial.Jena.main(Jena.java:30)
Caused by: java.net.SocketException: Permission denied: connect
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance
The problem is clearly stated in the first line of the exception trace:
WARN [main] (OntDocumentManager.java:1078) -
An error occurred while attempting to read from
http://www.cs.man.ac.uk/~stevensr/ontology/units.owl.
Msg was 'java.net.SocketException: Permission denied: connect'.
You are trying to read http://www.cs.man.ac.uk/~stevensr/ontology/units.owl
, and failing. Since that file does exist (I just checked), the likelihood is either that you are not connected to a network, or that you are behind a web proxy, and so you will have to configure your JVM with the appropriate proxy settings.
Why is your code reading that file? Almost certainly, it's because the ontology you are reading imports the units ontology. Something like:
<> a owl:Ontology ;
owl:imports <http://www.cs.man.ac.uk/~stevensr/ontology/units.owl>
That statement will be recognised by the OntModel
loader, which will attempt to fetch and load the imported ontology. If this is not what you want, or it's inconvenient (e.g. because you are not on a network always), then you have three remedies:
- turn off imports processing:
yourOntModel.getDocumentManager().setProcessImports(false);
- remove the
owl:imports
statement from your source model - opinions vary as to whether or not it's really useful anyway - use Jena's
LocationMapper
to provide an alternative location for theunits.owl
file, so that you can still have theowl:imports
statement, but the actual file will be read from somewhere else (e.g. on your computer's disk)
精彩评论