アプレットを使用してリポジトリを変更したい。これを行うために、私は次のコードを書きました:
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を含める必要があります。ビルドパスはここからダウンロードできます。