2017-01-29 13 views
0

我正在使用此查詢獲取使用jena和spark的本體中的特定類。像條件得到rdfs:標籤使用Spark查詢

final String queryString = "" + 
      "prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" + 
      "\n" + 
      "select ?class where {\n" + 
      " ?class rdfs:label \""+ word +"\"\n" + 
      "}\n" + 
      ""; 
ResultSet results = QueryExecutionFactory.create(queryString, model).execSelect(); 

我應該如何更改查詢以獲取單詞是其標籤一部分的類? 實際上我需要像spark中的「sql Like語句」。 感謝您的幫助!

回答

0

它不是Spark它是Sparql,用於Apache的火花頭here。你正在尋找的是字符串函數。您可能正在尋找regex()函數。但除了最瑣碎的查詢之外,其他任何事情都會花費很多時間,事實上,不建議像任何數據庫系統一樣使用。你的SPARQL字符串應該是這樣的:

final String queryString = 
     "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> " + 
     "SELECT ?s ?label ?contains" 
     "WHERE {" + 
     " ?s rdfs:label ?label ." + 
     " BIND(CONTAINS(?label,\""+ variableToFind +"\") AS ?contains)" 
     "}"; 

而且你是不是找你正在尋找的對象的類,並且可以是一個URI,BN,文字。

+0

yes.you是right.it花費很多時間。但我怎麼能在較短的時間搜索? –

+0

對不起,我忘了突出顯示字符串函數,使用CONTAINS它有點快,但沒有倒序索引,它會很慢,使用Lucene或使用[Jena默認實現](https://jena.apache.org/documentation/查詢/文本query.html)。 – Nord

0

更多的搜索後,我發現正確的查詢

String Quert ="PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>" 
      + " SELECT ?x WHERE { ?x rdfs:label ?v ." + 
      "FILTER regex(?v, \"word\", \"i\")}" ;