在RDF4J中键入的文字是否很棘手? [英] Are typed literals "tricky" in RDF4J?

查看:23
本文介绍了在RDF4J中键入的文字是否很棘手?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在RDF中,我可以拥有一个由单个属性绑定到多个文字值的实体。也可以键入这些值以增加清晰度。

:dumpTruck :weight "heavy"^^xsd:string .
:dumpTruck :weight "36000"^^xsd:integer .

在SPARQL中,我可以只查询我想要的类型

SELECT  ?w
WHERE
  { :dumpTruck  :weight  ?w
    FILTER ( datatype(?w) = xsd:integer )
  }

RDF4J中是否有类似getStatement的内容可以受这样的数据类型约束?

推荐答案

不可能有先验约束,但您可以根据数据类型将结果后处理到过滤。例如,您可以按照以下思路使用一些内容(未经测试,但希望您能理解要点):

QueryResults.stream(conn.getStatements(dumptruck, weight, null))
            .filter(s -> ((Literal)s.getObject()).getDatatype().equals(XMLSchema.INTEGER))
            .collect(Collectors.toList());

或者,也可以先插入Model,然后插入过滤:

Model m = QueryResults.asModel(conn.getStatements(dumptruck, weight, null));
List intValues = Models.objectLiterals(m).stream().filter(l -> l.getDatatype().equals(XMLSchema.INTEGER)).collect(Collectors.toList()); 

我确信还有几个其他/更方便的快捷方式我还没有想过。然而,RDF4J docs还有教程和示例可供选择。

这篇关于在RDF4J中键入的文字是否很棘手?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆