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