2

在 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的东西可以受这样的数据类型约束?

4

1 回答 1

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 文档有教程和示例可供使用。

于 2017-07-26T04:55:32.863 回答