整数カーディナリティ制約を持つインスタンスを推論する際の問題
質問
Protege 4.1 alpha を使用して RDF/OWL ファイルを作成しました。また、Protege でCheapPhone という定義済みのクラスも作成しました。このクラスには、以下に示す制限があります。
(hasPrice some integer[< 350])
携帯電話の価格が 350 未満の場合は、CheapPhone と推定されます。Protege 4.1 alpha ではこれを推論するのに問題はありません。ただし、Jena を使用してこれを推測することはできません。
また、SmartPhone という定義済みクラスも作成しました。このクラスには、以下に示す制限もあります。
(has3G value true) and (hasInternet value true)
電話機が 3G とインターネットを備えている場合は常に、スマートフォンと推定されます。この状況では、Protege と Jena の両方でこれを推測することに問題はありません。
Jena のデフォルトの推論エンジンに問題があるのではないかと思い始めました。Javaで使用するコードは以下のとおりです。
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
reasoner = reasoner.bindSchema(ontModel);
OntModelSpec ontModelSpec = OntModelSpec.OWL_MEM_MINI_RULE_INF;
ontModelSpec.setReasoner(reasoner);
// Create ontology model with reasoner support
// ontModel was created and read before, so I don't share the code in order
// not to create garbage here
OntModel model = ModelFactory.createOntologyModel(ontModelSpec, ontModel);
OntClass sPhone = model.getOntClass(ns + "SmartPhone");
ExtendedIterator s = sPhone.listInstances();
while(s.hasNext()) {
OntResource mp = (OntResource)s.next();
System.out.println(mp.getURI());
}
このコードは完全に機能し、インスタンスを返しますが、以下のコードを変更して、CheapPhone に適したものにすると、何も返されません。
OntClass sPhone = model.getOntClass(ns + "CheapPhone");
私は何か間違ったことをしているでしょうか?
解決
データ範囲 ( [< 350]
bit)はOWL 2の機能です。Jena は OWL 2 をサポートしていません。W3C を参照 OWL 2の実装 OWL 2をサポートするツールのリストのページを参照してください。これらのツールのいずれかを使用する必要があります。(Jena 向けに進行中の実験的な作業がそこにリストされていますが、これはまだ Jena リリースには含まれていません。)
所属していません StackOverflow