这是我上一个问题的后续问题,因为我仍在为这个主题而苦苦挣扎......我需要从我的模型中选择一些满足特定要求的主题......
如果我列出我的陈述(这只是输出的一小部分),我会得到如下信息:
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
不使用第二个参数(字符串),它会起作用,但不仅会返回 Workorders,还会返回一些带有hasType
属性的东西,这是我不想要的。我的代码有什么问题!我可以使用这样的东西并让它工作吗?不用担心static
这个功能的使用(一旦我知道有什么问题,我会处理这种不优雅的方式。)
此外,我想实现一些更复杂的过滤 - 例如选择具有多个属性的主题,所有这些属性都必须匹配才能返回它们,hasType Workorder, hasResult someResult, inStation station
等等...... Jena 是否支持这样的东西!如果没有,常见的方法是什么?
感谢您的任何提示!
以及后续行动:如何检查我的模型中是否存在某些语句?我知道有model.contains(Statements s)
方法,但我是否必须在 roder 的参数中创建语句才能调用此方法?没有更优雅的方式model.contains(Resource r, Property p, Resource o)
吗?