如何消除SPARQL中的空结果集?

she*_*eba 2 resultset sparql jena

我正在Semantic Web下做一个项目.这是我正在使用的RDF文件的一个例子

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://www.xmlns.com/foaf/0.1">
<rdf:Description>
    <foaf:name>aricent</foaf:name>
   <foaf:url>www.placementhub.net</foaf:url>
  </rdf:Description>
</rdf:RDF>
Run Code Online (Sandbox Code Playgroud)

如果用户输入"准备aricent"来搜索链接,我编码的方式是将每个值"prepare","for","aricent"并动态生成SPARQL查询以查找相关记录.这是SPARQL查询

String queryString ="PREFIX rdf:http: //www.w3.org/1999/02/22-rdf-syntax-ns# "+"PREFIX foaf:http://www.xmlns.com/foaf/0.1 "+ "SELECT?name?url WHERE {?a foaf:name?name FILTER regex(?name,'"+ values [i] +"')?a foaf:url?url}";

其中values [i]现在在第一个循环中"准备",第二个循环中的"for"和第三个循环中的"aricent".在这种情况下,如果它被执行,我会得到

--------------------------------------
| name       | url                   |
======================================
|            |                       |
--------------------------------------

--------------------------------------
| name       | url                   |
======================================
|            |                       |
--------------------------------------

--------------------------------------
| name       | url                   |
======================================
| "aricent" | "www.placementhub.net" |
--------------------------------------
Run Code Online (Sandbox Code Playgroud)

因此,对于"prepare"和"for",结果集为空(没有值),结果仅为"aricent"获得,因为它在RDF中可用.您可以告诉我如何消除(只有具有值的表应该向用户显示获得的空结果集?我使用了JENA API.Thank You

Ste*_*ris 5

我不确定你在这里消除你的意思,但你可以在一个查询中完成所有这些,例如:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://www.xmlns.com/foaf/0.1>
SELECT ?name ?url
WHERE {
  ?a foaf:name ?name
  FILTER regex(?name,'(prepare|for|aricent)')
  ?a foaf:url ?url
}
Run Code Online (Sandbox Code Playgroud)

这将返回包含任何这些单词的任何字符串.

或者,如果您只想要具有所有这些单词的字符串

  FILTER regex(?name,'prepare')
  FILTER regex(?name,'for')
  FILTER regex(?name,'aricent')
Run Code Online (Sandbox Code Playgroud)

从你的问题中不清楚你想要实现什么.

  • 为什么每次都需要创建一个新的查询而不改变它?只需在用户输入上生成过滤条件,将其粘贴到查询中,然后执行即可.简单.或者,如果您的实际问题是如何在Jena中检查查询结果是否为空,则可以使用`ResultSet.hasNext()`来检查查询是否有任何结果. (2认同)