RDF4J 中的类型文字 "tricky" 是吗?
Are typed literals "tricky" in 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 的东西可以被这样的数据类型约束?
没有可能的先验约束,但您可以 post 处理您的结果以过滤数据类型。例如,您可以按照以下方式使用某些东西(未经测试,但希望您能理解):
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 docs 有教程和示例可供使用。
在 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 的东西可以被这样的数据类型约束?
没有可能的先验约束,但您可以 post 处理您的结果以过滤数据类型。例如,您可以按照以下方式使用某些东西(未经测试,但希望您能理解):
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 docs 有教程和示例可供使用。