首页 文章

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

提问于
浏览
2

我正在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:名称>爱瑞森特</ FOAF:名称>
<FOAF:URL> www.placementhub.net </ FOAF:URL>
</ rdf:Description的>
</ RDF:RDF>

如果用户输入“准备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" |
--------------------------------------

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

1 回答

  • 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
    }
    

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

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

    FILTER regex(?name,'prepare')
      FILTER regex(?name,'for')
      FILTER regex(?name,'aricent')
    

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

相关问题