首页 文章

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

提问于
浏览
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这样的数据类型可以约束?

1 回答

  • 2

    不存在先验约束,但您可以 post-process 结果来过滤数据类型。例如,你可以沿着这些线使用某些东西(未经测试,但你希望得到漂移):

    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());
    

    我确信有几个 other/handier 快捷方式可用,我没有想到。但是,RDF4J 文档有备用的教程和示例。

相关问题