使用createOntologyModel时出现异常

时间:2011-04-14 17:47:02

标签: java sparql ontology jena

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);

    }

}

在运行上面的代码时,我收到以下警告。 我无法理解为什么

 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

1 个答案:

答案 0 :(得分:2)

问题在异常追踪的第一行中清楚说明:

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'.

您正在尝试阅读http://www.cs.man.ac.uk/~stevensr/ontology/units.owl,但却失败了。由于该文件确实存在(我刚刚检查过),可能是您没有连接到网络,或者您是Web代理后面的,因此您必须使用适当的代理设置配置JVM。

为什么您的代码会读取该文件?几乎可以肯定,这是因为您正在阅读的本体论导入了单位本体。类似的东西:

<> a owl:Ontology ; 
   owl:imports <http://www.cs.man.ac.uk/~stevensr/ontology/units.owl>

OntModel加载程序将识别该语句,该加载程序将尝试获取并加载导入的本体。如果这不是您想要的,或者它不方便(例如因为您不在网络上),那么您有三种补救措施:

  • 关闭导入处理:yourOntModel.getDocumentManager().setProcessImports(false);
  • 从您的来源模型中删除owl:imports声明 - 不管是否真的有用,意见都有所不同
  • 使用Jena的LocationMapperunits.owl文件提供替代位置,以便您仍然可以使用owl:imports语句,但实际文件将从其他位置读取(例如在你电脑的磁盘上)