1

アプレットを使用してリポジトリを変更したい。これを行うために、私は次のコードを書きました:

LoadOntology:

package owlapi.loader;

import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.io.*;
import org.semanticweb.owlapi.model.*;
import org.semanticweb.owlapi.util.DefaultPrefixManager;
import org.semanticweb.owlapi.util.OWLEntityRenamer;

import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Map;


public class LoadOntology {
    private static String             ontologyDir   = "./owlapi/loader/featurepool.owl";
    private static OWLOntology        localOntology;
    private static OWLOntologyManager manager;
    private static OWLDataFactory     factory;
    private static PrefixManager      pm            = new DefaultPrefixManager("http://wise.vub.ac.be/Members/lamia/variability/Feature_Assembly/FAM.owl#");

public LoadOntology() {
    manager = OWLManager.createOWLOntologyManager();
    File file = new File(ontologyDir);
    try {
        localOntology = manager.loadOntologyFromOntologyDocument(file);
        System.out.println("Loaded ontology: " + localOntology);
        factory = manager.getOWLDataFactory();
        }   
    catch (UnparsableOntologyException e) {
        System.out.println("Could not parse the ontology: " + e.getMessage());
        Map<OWLParser, OWLParserException> exceptions = e.getExceptions();
        for (OWLParser parser : exceptions.keySet()) {
            System.out.println("Tried to parse the ontology with the " + parser.getClass().getSimpleName() + " parser");
            System.out.println("Failed because: " + exceptions.get(parser).getMessage());
        }
    }
    catch (UnloadableImportException e) {
        System.out.println("Could not load import: " + e.getImportsDeclaration());
        OWLOntologyCreationException cause = e.getOntologyCreationException();
        System.out.println("Reason: " + cause.getMessage());
    }
    catch (OWLOntologyCreationException e) {
        System.out.println("Could not load ontology: " + e.getMessage());
    }   
}

public void addInstance(String Class, String individual) {
    OWLClass owlClass = factory.getOWLClass(Class, pm);
    OWLClass superClass = factory.getOWLThing();
    OWLIndividual instance = factory.getOWLNamedIndividual(individual, pm);

    OWLClassAssertionAxiom classAssertion1 = factory.getOWLClassAssertionAxiom(superClass, instance);
    manager.addAxiom(localOntology, classAssertion1);
    OWLClassAssertionAxiom classAssertion2 = factory.getOWLClassAssertionAxiom(owlClass, instance);
    manager.addAxiom(localOntology, classAssertion2);
    System.out.println("Instance added");
}
}

InJava(javascriptにロードされたアプレット):

public class InJava extends Applet{
private static LoadOntology loadedOntology;

public void addInstance(String Class, String individual) {
    Graphics g = getGraphics();
     g.drawString("Test", 10, 10);
    loadedOntology = new LoadOntology();
    loadedOntology.addInstance(Class, individual);
    }
}

アプレットをロードしてもエラーはまったく発生しませんが、メソッドaddInstanceを呼び出そうとすると次のようになります。

<input type="button" value="call Java Applet method" onClick = 'document.owlapi.addInstance("Abstract_Feature", "New_Test")'>
<APPLET CODE="owlapi/InJava.class" NAME="owlapi" HEIGHT=100 WIDTH=100> </APPLET>  

ブラウザがエラーをスローするUncaught Error: Error calling method on NPObject.stackoverflowでこれに関するいくつかの質問を読んだ後、プラグインに何か問題があるはずだという結論に達しました。

動作するメソッド(drawString( "Test"、10、10))にテストコードを追加したので、LoadOntologyクラスの構築にはいくつかの問題があることをお勧めします(このクラスは、それ自体で完全に動作するように個別にテストされました)。誰かが私が間違っていることを見ていますか?

更新:アプレットで使用されるJavaクラスの一部であるリポジトリローダーを追加しました。提供されたすべてのコードをコンパイルする必要があります。

更新:コードはこのMASCRIPT/SCRIPTABLE例に基づいているため、使用しませんでした。これは、現在のブラウザー(chrome)で機能します。

udpate:ビルドパスにowlapijarを含める必要があります。ビルドパスはここからダウンロードできます。

4

1 に答える 1

1

私が知っているフラグメントに基づいて、この HTML を試すことをお勧めします。

<html>
<body>
<APPLET 
    CODE="owlapi.InJava" 
    NAME="owlapi" 
    archive="owlapi/owl1.jar,owlapi/owl2.jar"
    HEIGHT=100 
    WIDTH=100> 
</APPLET>  
</body>
</html>

この HTML は、JavaScript を使用せずにアプレットを「静的に」埋め込みます。class-name (code属性) は、ファイル名ではなく、クラスの完全修飾名である必要があります。後者は一般的に許容されますが、正しくありません。owlapiディレクトリから API をインポートし、必要に応じて名前を変更する方法を示します。

また、ルース ク​​ラス ファイルと Jar が混在していることも懸念されます。これは、開発者と JRE の両方を混乱させる傾向があります。代わりに、owlapi.InJavaクラスが 内に置かれmy.jar、その Jar が残りと同じディレクトリに置かれた場合、 acodebaseが追加され、archiveパスが短くなる可能性があります。このような:

<html>
<body>
<APPLET 
    CODE="owlapi.InJava" 
    NAME="owlapi" 
    codebase="owlapi"
    archive="my.jar,owl1.jar,owl2.jar"
    HEIGHT=100 
    WIDTH=100> 
</APPLET>  
</body>
</html>

これは有効な HTML ではありません。基本を確認するためのテストです。後で、それを有効な HTML にし、(おそらく)アプレット情報deployJava.jsに記載されているものを使用してアプレットをデプロイする必要があります。ページ

于 2012-04-28T13:27:53.937 に答える