1
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
4

1 回答 1

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语句 - 关于它是否真的有用的意见各不相同
  • 使用 JenaLocationMapperunits.owl文件提供替代位置,以便您仍然可以拥有该owl:imports语句,但实际文件将从其他地方读取(例如,在您的计算机磁盘上)
于 2011-04-14T21:05:26.410 回答