在RDF4J中输入的文字是“棘手的”吗?

时间:2017-07-25 16:01:18

标签: sparql 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的内容可以受到类似数据类型的约束?

1 个答案:

答案 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有备用的教程和示例。