Как запросить DBPEDIA SPARQL, чтобы включить нужные значения при использовании LIMIT

Я пытаюсь заполнить свою локальную онтологию 10 случайными книгами. Я хотел бы включить в список 2 известные книги для целей тестирования. т.е. из 10 я хочу указать названия 2 книг, а остальные 8 могут быть случайными.

Я не знаю, как совместить FILTER и LIMIT вместе.

Мне нужны 2 книги в запросе вместе с 8 случайными книгами.

FILTER (str(?name) IN ("Panther in the Basement", "Endless Night"))

Мой код

SELECT  ?book ?date
WHERE {
?book rdf:type dbo:Book .
?book foaf:name ?name .
     ?book dbp:releaseDate ?date .

}
limit 10

person VKB    schedule 12.03.2017    source источник
comment
Онтологии RDF не заполняются данными экземпляра так же, как таблицы SQL заполняются строками. Какая связь со sparqlwrapper? Это домашнее задание? То, что мы делаем вашу работу, не принесет вам много пользы в долгосрочной перспективе.   -  person TallTed    schedule 13.03.2017


Ответы (1)


Непонятно, почему вы хотите это сделать, но это можно сделать с помощью более сложного запроса, который является UNION из

  1. данные 8 других книг
  2. данные для двух заданных книг
SELECT DISTINCT  ?book ?date
WHERE
  {   { SELECT DISTINCT  ?book ?date
        WHERE
          { ?book  rdf:type         dbo:Book ;
                   foaf:name        ?name ;
                   dbp:releaseDate  ?date
            FILTER ( ?book NOT IN (dbr:Panther_in_the_Basement, dbr:Endless_Night) )
          }
        LIMIT   8
      }
    UNION
      { VALUES ?book { dbr:Panther_in_the_Basement dbr:Endless_Night }
        ?book  rdf:type         dbo:Book ;
               foaf:name        ?name ;
               dbp:releaseDate  ?date
      }
  }

Обратите внимание: поскольку набор данных DBpedia не так чист и содержит несколько книг с несколькими значениями для releaseDate, этот запрос может возвращать повторяющиеся книги. Чтобы преодолеть это, вы должны использовать GROUP BY + SAMPLE (или GROUP_CONCAT)

На самом деле, я думаю, что более компактная версия этого запроса также должна работать, но она не возвращает никаких результатов в DBpedia. :

SELECT DISTINCT  ?book ?date
WHERE
  { ?book  foaf:name        ?name ;
           dbp:releaseDate  ?date
      { { SELECT  ?book
          WHERE
            { ?book  rdf:type  dbo:Book }
          LIMIT   8
        }
      }
    UNION
      { VALUES ?book { dbr:Panther_in_the_Basement dbr:Endless_Night } }
  }
person UninformedUser    schedule 12.03.2017