dc: строковый литерал создателя и фильтр регулярных выражений в SPARQL

Я использую конечную точку Virtuoso SPARQL от Europeana.

Я пытался найти в SPARQL контент о конкретном участнике. Насколько я понимаю, это можно сделать так:

PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?title 
WHERE {
     ?objectInfo dc:title ?title .
     ?objectInfo dc:creator 'Picasso' .

}

Тем не менее, я ничего не получаю взамен.

В качестве альтернативы я использовал FILTER regex для поиска литерала.

PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?title ?creator
WHERE {
     ?objectInfo dc:title ?title .
     ?objectInfo dc:creator ?creator .
     FILTER regex(?creator, 'Picasso')
}

На самом деле это сработало очень хорошо и вернуло правильные результаты.

У меня вопрос: можно ли создать запрос SPARQL без использования FILTER для поиска работы определенного художника?

Большое спасибо.


person Trinker    schedule 18.10.2016    source источник
comment
Можете ли вы сказать нам, к какой конечной точке вы запрашиваете? Мое первое предположение состоит в том, что вам нужно указать тип данных для строкового литерала «Пикассо». Кроме того, не похоже, что существует какая-либо связь между двумя тройными шаблонами в вашем первом запросе.   -  person Mark Miller    schedule 18.10.2016
comment
Кроме того, не похоже, что существует какая-либо связь (общие переменные) между двумя тройными шаблонами в вашем первом запросе.   -  person Mark Miller    schedule 18.10.2016
comment
Спасибо. Я только что обновил информацию: я использую виртуальную конечную точку Europeana: sparql.europeana.eu   -  person Trinker    schedule 18.10.2016


Ответы (2)


Я не думаю, что есть какие-то объекты, творцом которых является «Пикассо». Таким образом, фильтр регулярных выражений - хороший выбор, но медленный.

Вот способ найти строки, которым соответствует ваше регулярное выражение:

PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?creator, (count(?creator) as ?ccount)
WHERE {
     ?objectInfo dc:title ?title .
     ?objectInfo dc:creator ?creator .
     FILTER regex(?creator, 'Picasso')
}
group by ?creator
order by ?ccount

Возможно, вам было бы легче увидеть, что если бы вы отобразили все переменные в операторе select:

PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT *
WHERE {
     ?objectInfo dc:title ?title .
     ?objectInfo dc:creator ?creator .
     FILTER regex(?creator, 'Picasso')
}

Если вы не хотите использовать фильтр регулярных выражений, вы можете перечислить все варианты Пикассо, которые вам нужны:

PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT *
WHERE {
         values ?creator { "Picasso, Pablo" "Pablo Picasso" } .
         ?objectInfo dc:title ?title .
         ?objectInfo dc:creator ?creator
    }

bif: contains работает на этой конечной точке и работает довольно быстро:

PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT *
WHERE {
     ?objectInfo dc:title ?title .
     ?objectInfo dc:creator ?creator .
     ?creator bif:contains 'Picasso'
     #FILTER regex(?creator, 'Picasso')
}
person Mark Miller    schedule 18.10.2016
comment
Я не думаю, что bif:contains здесь нужен; стандарт включает contains. - person Joshua Taylor; 18.10.2016
comment
Спасибо. Это именно то, что я искал. - person Trinker; 19.10.2016
comment
Можно ли сказать, что использование values будет работать быстрее, чем regex? - person Trinker; 19.10.2016
comment
Да, я ожидал, что VALUES {} будет быстрее, чем FILTER regex(). Но не верьте мне на слово ... время для собственных запросов - хорошая привычка. - person Mark Miller; 19.10.2016

1) В вашем первом запросе есть несвязанные тройные шаблоны.

2) Я предполагаю, и согласно словарному описанию dc:creator ожидает ресурс, то есть URI. Использование URI объекта Picasso не работает?

+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| Term Name: creator |                                                                                                                                                |
| URI:               | http://purl.org/dc/elements/1.1/creator                                                                                                        |
| Label:             | Creator                                                                                                                                        |
| Definition:        | An entity primarily responsible for making the resource.                                                                                       |
| Comment:           | Examples of a Creator include a person, an organization, or a service. Typically, the name of a Creator should be used to indicate the entity. |
+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------+

Было бы хорошо увидеть ваши данные, чтобы решить, нужен ли ФИЛЬТР для литералов.

person UninformedUser    schedule 18.10.2016