Я пытаюсь сформировать эффективный фильтр запросов в SPARQL на Wikidata.Позвольте мне объяснить мой процесс:
- Я запрашиваю API поисковых объектов, используя ключевые слова, например, (Apple, Orange)
- Запрос API возвращает список идентификаторов соответствующих элементов, например (wd: Q629269, ш.: Q154950, ш.: Q312, ш.определенные типы, например (p: P31 / ps: P31 / wdt: P279 * wd: Q43229) - который возвращает все, если это Организация или ее подкласс.
- Затем для элементов в списке идентификаторов, которые являютсяопределенного класса, вернуть информационные элементы, если они существуют, например (НЕОБЯЗАТЕЛЬНО).
Я новичок в SPARQL.Мой вопрос заключается в том, является ли это наиболее эффективным методом для достижения этого результата?Мне кажется, что это довольно неэффективно, и я не могу найти подобный тип проблемы в примерах учебника .
Вы можете попробовать запрос здесь .
SELECT distinct ?item ?itemLabel ?itemDescription ?web ?inception ?ISIN
WHERE{
FILTER (?item IN (wd:Q629269, wd:Q154950, wd:Q312, wd:Q95, wd:Q4878289, wd:Q10817602))
?item p:P31/ps:P31/wdt:P279* wd:Q43229.
OPTIONAL {
?item wdt:P856 ?web. # get item-web
?item wdt:P571 ?inception. # get item-web
?item wdt:P946 ?ISIN. # get item-isin
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}
LIMIT 10