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ローダーはインポートされたオントロジーをフェッチしてロードしようとします。これが希望どおりでない場合、または不便な場合(たとえば、常にネットワークに接続していないため)、次の3つの解決策があります。

  • インポート処理をオフにします。yourOntModel.getDocumentManager().setProcessImports(false);
  • ソースモデルからステートメントを削除owl:importsします-とにかくそれが本当に役立つかどうかについては意見が異なります
  • Jenaを使用してファイルLocationMapperの代替の場所を提供します。これにより、ステートメントを引き続き使用できますが、実際のファイルは別の場所(コンピューターのディスクなど)から読み取られます。units.owlowl:imports
于 2011-04-14T21:05:26.410 に答える