DBpedia SPARQL Запросы для конкретного rdfs: метка - PullRequest
9 голосов
/ 21 января 2012

В основном у меня есть запрос (показанный ниже), который работает эффективно. Тем не менее, я хочу, чтобы мой поиск был более точным, если метка представляет собой строку «yago», а не содержит строку «yago». Я хочу попробовать сделать это без фильтров, если это возможно, так как я думаю, что использование FILTER делает запрос DBpedia более длительным.

SELECT ?uri ?label 
WHERE {
?uri rdfs:label ?label.
?label bif:contains "'yago'" .
}

Ответы [ 2 ]

15 голосов
/ 21 января 2012

Вы можете попробовать сделать следующее, если вы хотите сделать это без фильтров:

SELECT ?uri ?label
WHERE {
?uri rdfs:label "Yago"@en .
?uri rdfs:label ?label
}

Хотя я не уверен, что это намного быстрее, чем соответствующий запрос с фильтрами:

SELECT ?uri ?label
WHERE {
?uri rdfs:label ?label .
filter(?label="Yago"@en)
}
5 голосов
/ 24 марта 2016

Корректировка ключа к исходному ответу. Если у вас есть точное совпадение с языковой меткой, то будет работать следующее:

SELECT ?uit ?label
WHERE {
   ?uri rdfs:label "Yago"@en .
}

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

SELECT ?uit ?label
WHERE {
   ?uri rdfs:label ?label .
   FILTER regex(str(?label), "yago", "i")
}

... которая будет соответствовать строке независимо от регистра символов, и вы можете играть в обычные игры регулярных выражений, чтобы получить требуемое соответствие строки. (Конечно, другие строковые функции, такие как STRSTARTS и STRENDS, будут более эффективными, если они удовлетворяют желаемым критериям соответствия.)

...