- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想过滤一个模型,获取所有具有特定谓词和 C 类型主语的三元组。下面的代码不返回任何结果,有人知道如何实现它吗?
return triples.filter(null, new URIImpl(property.getFullIRI()), null).filter
(null, RDF.TYPE,new URIImpl(C.getFullIRI()));
最佳答案
问题是您正在对第一个过滤器的结果应用第二个过滤器 - 但第一个过滤器的结果仅包含具有您所使用的属性的三元组已过滤 - 因此第二个过滤器只能返回空结果(因为中间结果中没有三元组具有 rdf:type 谓词)。
由于您以这种方式表达“非顺序”的次要约束,因此您无法仅通过过滤来解决此问题。您将需要构建一个新的模型
并在进行过程中填充数据。大致如下:
// always use a ValueFactory, avoid instantiating URIImpl directly.
ValueFactory vf = ValueFactoryImpl().getInstance();
URI c = vf.createURI(C.getFullIRI());
URI prop = vf.createURI(property.getFullIRI())
// create a new Model for the resulting triple collection
Model result = new LinkedHashModel();
// filter on the supplied property
Model propMatches = triples.filter(null, prop, null);
for(Resource subject: propMatches.subjects()) {
// check if the selected subject is of the supplied type
if (triples.contains(subject, RDF.TYPE, c)) {
// add the type triple to the result
result.add(subject, RDF.TYPE, c);
// add the property triple(s) to the result
result.addAll(propMatches.filter(subject, null, null));
}
}
return result;
以上内容适用于 Sesame 2。如果您使用 Sesame 4(支持 Java 8 及其 Stream API),您可以更轻松地执行此操作,如下所示:
return triples.stream().filter(st ->
{
if (prop.equals(st.getPredicate()) {
// add this triple if its subject has the correct type
return triples.contains(st.getSubject(), RDF.TYPE, c));
} else if (RDF.TYPE.equals(st.getPredicate())
&& c.equals(st.getObject()) {
// add this triple if its subject has the correct prop
return triples.contains(st.getSubject(), prop, null);
}
return false;
}).collect(Collectors.toCollection(LinkedHashModel::new));
关于java - openrdf 芝麻模型中的多个过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34820081/
在我的 Apache Tomcat 服务器上,我有一个 OpenRDF Sesame 三元组来处理与用户和文档相关的 RDF 三元组以及这些实体之间的双向链接: http://local/id/doc
在 Sesame NativeRDF 上执行 SPARQL 更新时,临时数据将写入/tmp。在我们的例子中,这可能相当大,因此超出了/tmp 上的可用空间。这个目录设置在哪里,以便我们可以(重新)将它
我在 Apache Tomcat 安装下的 webapps 文件夹中有 OpenRDF Sesame。我可以访问/openrdf-workbench webapp,但是/openrdf-sesame
在我为我的机器添加更多 RAM 后,我重新启动了它。我发现 Sesame 不再工作了,而且我不断收到更改服务器消息。 我在 Ubuntu 13.10 上使用 Sesame 2.7.11、Apache
我是一名优秀的程序员,十分优秀!