スピリッツ関係のオントロジを吐き出すプログラムを書いてみた

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ファイルを吐き出すプログラムを書こうかな。入力ファイルの記述形式は、考えておこう。