2017-01-29 7 views
0

Я использую этот запрос, чтобы получить конкретный класс в онтологии, используя jena и spark.Как условие для получения rdfs: label using Spark query

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(); 

Как изменить запрос, чтобы получить классы, что слово является частью их меток? На самом деле мне нужно что-то вроде «sql Like statement» в искры. спасибо, что помогли мне!

ответ

0

Это не искра, это 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 default implementation] (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\")}" ;