2016-05-29 4 views
0

Я пытаюсь получить абстракцию, используя Sqarql с наборами данных dbpedia. Когда я бегаю следующий запрос на Виртуоз,Невозможно получить андижанские города от Sparql

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 
SELECT DISTINCT ?abstract WHERE { 
    [ rdfs:label ?name 
    ; dbpedia-owl:abstract ?abstract 
    ] . 
    FILTER langMatches(lang(?abstract),"en") 
    VALUES ?name { "London"@en } 
} 
LIMIT 10 

Я получаю результат, однако, если я изменить имя, чтобы сказать «Гокарна», который является южными индийскими туристическими местами, я не получаю никаких данных. Однако я вижу страницу ресурсов в Интернете по dbpedia для Gokarna (http://dbpedia.org/page/Gokarna,_India). Что я делаю не так? Мне нужно получить аналогичные данные около 800 индийских мест.

ответ

3

Когда вы используете values, вы получите только те, которые точно соответствуют вашей строке. Для Gokarna это будет работать для @de, @it, @fr, но не для @en, так как там ярлык отличается, как вы можете видеть из предыдущего ответа.

Я хотел бы предложить использовать contains, вместо values:

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 
SELECT DISTINCT ?abstract WHERE { 
    [ rdfs:label ?name 
    ; dbpedia-owl:abstract ?abstract 
    ] . 
    FILTER langMatches(lang(?abstract),"en") 
    FILTER langMatches(lang(?name),"en") 
    FILTER CONTAINS (?name, "Gokarna") 
} 
LIMIT 10 
2

Я не тот опыт работы с Sqarql, но столько, сколько я могу видеть в вашем коде и проверен с помощью библиотеки dbpedia ... это не просто Gokarna. это «Гокарна, Индия».

Это должно работать ..

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 
SELECT DISTINCT ?abstract WHERE { 
    [ rdfs:label ?name 
    ; dbpedia-owl:abstract ?abstract 
    ] . 
    FILTER langMatches(lang(?abstract),"en") 
    VALUES ?name { "Gokarna,_India"@en } 
} 
LIMIT 10 
2

Если просмотреть страницу DBpedia для Гокарни, Индии, что вы связаны, вы заметите, что его rdfs:label является «Gokarna, Индия». Но его foaf:name - это просто «Гокарна». Это означало бы, вы должны изменить свой запрос:

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 
SELECT DISTINCT ?abstract WHERE { 
    [ foaf:name ?name 
    ; dbpedia-owl:abstract ?abstract 
    ] . 
    FILTER langMatches(lang(?abstract),"en") 
    VALUES ?name { "Gokarna"@en } 
} 
LIMIT 10 

Хотя это вернет другой Gokarnas тоже: Gokarna, Непал, Gokarna, Бангладеш и Gokarna (фильм). Если вы хотите удалить их, вам придется выяснить другой фильтр (возможно, dbo:country dbr:India).