スピリッツ関係のオントロジを吐き出すプログラムを書いてみた
Protege Programmer's Guideを見つつ、↑のスピリッツ関係だけ吐き出すプログラムを書いてみました。
import java.io.File; import java.util.ArrayList; import java.util.Collection; import com.hp.hpl.jena.util.FileUtils; import edu.stanford.smi.protegex.owl.ProtegeOWL; import edu.stanford.smi.protegex.owl.jena.JenaOWLModel; import edu.stanford.smi.protegex.owl.model.OWLNamedClass; public class OWLAPIDemoApplication { public static void main(String[] args) { JenaOWLModel owlModel = ProtegeOWL.createJenaOWLModel(); // スピリッツクラスの作成 OWLNamedClass spiritsClass = owlModel.createOWLNamedClass("スピリッツ"); // サブクラスを作成して、スピリッツクラスの子クラスに加える OWLNamedClass ginClass = owlModel.createOWLNamedClass("ジン"); ginClass.addSuperclass(spiritsClass); ginClass.removeSuperclass(owlModel.getOWLThingClass()); // サブクラスを作成して、スピリッツクラスの子クラスに加える OWLNamedClass vodkaClass = owlModel.createOWLNamedClass("ウォッカ"); vodkaClass.addSuperclass(spiritsClass); vodkaClass.removeSuperclass(owlModel.getOWLThingClass()); // ファイル出力 String fileName = "cocktail.owl"; Collection errors = new ArrayList(); owlModel.save(new File(fileName).toURI(), FileUtils.langXMLAbbrev, errors); System.out.println("File saved with " + errors.size() + " errors."); } }
クラスを作る際に、もっとも基本となるのがOWLModel、もしくは、そのサブクラスのJenaOWLModelです。OWLModelでもクラスを生成することは可能ですが、ファイル出力するためのsaveメソッドが後者のクラスにあったので、そちらをを使ってます。前者で、出力をどうやるのかは分かりません。
JenaOWLModel owlModel = ProtegeOWL.createJenaOWLModel();
クラスはOWLNamedClassのオブジェクトとして生成すると。ん、Namedではないクラスはあるのか?
OWLNamedClass spiritsClass = owlModel.createOWLNamedClass("スピリッツ");
同じようにクラスを作って、そのクラスのスーパークラスにスピリッツを加えると。このままだと、デフォルトでowlThingsがスーパークラスになってるから、そいつを削除しておくと。
OWLNamedClass ginClass = owlModel.createOWLNamedClass("ジン"); ginClass.addSuperclass(spiritsClass); ginClass.removeSuperclass(owlModel.getOWLThingClass());
あとは、ファイルなり、ストリームなりに吐き出したらよいと。明日は、外部ファイルを読み込んで、OWLファイルを吐き出すプログラムを書こうかな。入力ファイルの記述形式は、考えておこう。