在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的内容可以受到类似数据类型的约束?
答案 0 :(得分:2)
不存在先验约束,但您可以对结果进行后处理以过滤数据类型。例如,你可以沿着这些线使用某些东西(未经测试,但你希望得到漂移):
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有备用的教程和示例。