私はまだこのトピックに苦労しているので、これは最後の質問のフォローアップの質問です...特定の要件を満たすモデルからいくつかの主題を選択する必要があります..
ステートメントをリストすると (これは出力のごく一部にすぎません)、次のような結果が得られます。
WorkOrder2 hasType Workorder .
WorkOrder2 hasResult Fuselage22 .
WorkOrder2 type NamedIndividual .
今、私はすべての主題を選択して繰り返したいと思いますhasType Workorder
. 私の考えは次のようなものでした:
public static ArrayList<String> listAllWorkorders(Model model) {
ArrayList<String> workorders = new ArrayList<String>();
// list of all work orders associated with given fuselage and work
// station
ResIterator it = model.listSubjectsWithProperty(
ResourceFactory.createProperty(ArumCorePrefix + "hasType"), ArumCorePrefix + "Workorder");
while (it.hasNext()) {
Resource r = it.next();
String workorder = trimPrefix(r.toString());
workorders.add(workorder);
}
// sort the result alphabetically
Collections.sort(workorders);
return workorders;
}
ただし、何も返されません... listSubjectsWithProperty
2 番目の引数 (文字列) なしで使用すると、機能しますが、Workorders だけでなく、hasType
プロパティを含むものも返されます。私のコードの何が問題なのですか! このようなものを使用して機能させることはできますか?この関数の使用について心配する必要はありstatic
ません (何が問題なのかがわかったらすぐに、この非エレガントな方法を処理します)。
また、さらに複雑なフィルタリングを実装したいと思います。たとえば、それらを返すためにすべてが一致する必要がある複数のプロパティを持つサブジェクトを選択するhasType Workorder, hasResult someResult, inStation station
など... Jena はこのようなものをサポートしていますか? そうでない場合、一般的なアプローチは何ですか?
ヒントをありがとう!
フォローアップ: モデルにステートメントが存在するかどうかを確認するにはどうすればよいですか? メソッドがあることは知っていmodel.contains(Statements s)
ますが、このメソッドを呼び出すには、roder の引数にステートメントを作成する必要がありますか? のようなもっとエレガントな方法はありませんmodel.contains(Resource r, Property p, Resource o)
か?