java - 如何在 Jena 的 Sparql API 中设置属性路径?

标签 java sparql rdf jena arq

我想避免将 SPARQL 查询作为字符串传递。因此,我使用 Jena 的 API 来创建查询。现在我的查询中需要一个 PropertyPath,但我找不到任何支持此功能的 Java 类。你能给我一点提示吗?

这是一些我想插入的示例代码(Jena 3.0.1):

private Query buildQuery(final String propertyPath) {
    ElementTriplesBlock triplesBlock = new ElementTriplesBlock();
    triplesBlock.addTriple(
            new Triple(NodeFactory.createURI(this.titleUri.toString()),
                    //How can I set a property path as predicate here?
                    NodeFactory.???,
                    NodeFactory.createVariable("o"))
    );
    final Query query = buildSelectQuery(triplesBlock);
    return query;
}

private Query buildSelectQuery(final ElementTriplesBlock queryBlock) {
    final Query query = new Query();
    query.setQuerySelectType();
    query.setQueryResultStar(true);
    query.setDistinct(true);
    query.setQueryPattern(queryBlock);
    return query;
}

最佳答案

您可以使用 PathFactory 创建属性路径

考虑下面的图表:

@prefix dc: <http://purl.org/dc/elements/1.1/>.
@prefix ex: <http://example.com/>.

    ex:Manager ex:homeOffice ex:HomeOffice
    ex:HomeOffice dc:title "Home Office Title"

假设您想创建一个如下模式:

?x ex:homeOffice/dc:title ?title

下面的代码实现了它:

 //create the path
Path exhomeOffice = PathFactory.pathLink(NodeFactory.createURI("http://example.com/homeOffice"));
 Path dcTitle = PathFactory.pathLink(NodeFactory.createURI("http://purl.org/dc/elements/1.1/title"));
Path fullPath = PathFactory.pathSeq(exhomeOffice,dcTitle);
TriplePath t = new TriplePath(Var.alloc("x"),fullPath,Var.alloc("title"));

关于java - 如何在 Jena 的 Sparql API 中设置属性路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746584/

相关文章:

java - 使用java中的JDOM在KML中的元素之间插入新元素

java - Android studio setContentView(R.layout.activity_login);即使我的第二个 Activity 名称 Activity_login 出现在布局文件夹中也无法正常工作

java - 访问 ZFile 的统计信息/成员信息 (JZOS)

datetime - 如何使用 TTL 导入日期时间文字?

java - strictfp 关键字在实现/扩展接口(interface)/类时的行为

rdf - 无法使用 SPARQL 从 LinkedMDB 检索具有高 ID 的电影

sparql - 检索最具体的实例类

RDF/OWL 到 TRIPLE 存储

rdf - 单个请求中的多个 SPARQL "INSERT WHERE"查询

c++ - 十进制、 double 、整数等数据类型的范围?