如何检查 SPARQL 中变量的前缀?

How to check prefix of variables in SPARQL?

我想查找 RDF 中有多少资源,但找不到任何教程来解释如何检查 SPARQL 中变量的前缀。

我试过这个:

select count(?x) where {
  res:?x ?p ?v
}

但它有语法错误。我正在为 DBPedia 使用 virtuoso

您可以使用 strstarts(string,prefix) 检查 string 是否以 prefix[=37= 开头].您可以使用 str 函数来获取 IRI 的字符串表示形式,包括从前缀生成的 IRI。例如,如果你有 前缀 ex: ,那么 ex: 本身就是一个合法的 IRI ,并且 str(ex:) 产生 "http://example.org/"。这意味着您可以通过执行 [=24] 检查作为变量 ?x 值的 IRI 是否以某个特定前缀 p: 开头=]strstarts(str(?x),str(p:))。然后你可以过滤它,或者计算它,等等

这是一个将 ?thing 绑定到几个不同值的示例,其中一些值以 dbpedia-owl:前缀:

select * where {
   values ?thing { dbpedia-owl:a dbpedia-owl:b dbpprop:c }
   bind( strstarts(str(?thing),str(dbpedia-owl:)) as ?startsWithDBpediaOwl )
}

SPARQL results (a and b get true, c gets false)

您也可以对其进行过滤,然后统计结果:

select (count(*) as ?n) where {
   values ?thing { dbpedia-owl:a dbpedia-owl:b dbpprop:c }
   filter strstarts(str(?thing),str(dbpedia-owl:))
}

SPARQL results (2)