RDF4J中是否"tricky"类型化文字?



在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文档提供了教程和示例。

最新更新