2015-03-16 1 views
3

Я пытаюсь извлечь сущность словаря, содержит имя человека и т. Д. Из dbpedia, используя sparql.dbpedia fetch entitites на языке, отличном от английского

PREFIX owl: <http://dbpedia.org/ontology/> 
PREFIX dbpprop: <http://dbpedia.org/property/> 
SELECT ?name 
WHERE { 
    ?person a owl:Person . 

    ?person dbpprop:name ?name . FILTER(lang(?name) = "en") 
} 

Запрос выше сделал успешно, но когда я изменить название языка для fr, нет ничего, чтобы принести.

Как я могу получить имена на других языках?

Кроме того, почему я не могу фильтровать язык, используя запрос ниже?

SELECT ?name 
WHERE { 
    ?person a owl:Person . 
    ?person dbpprop:language "English" 
    ?person dbpprop:name ?name . 
} 
// this query returns nothing 

Я попытался извлечь все языки, используя

SELECT DISTINCT ?lanName 
WHERE { 
    ?person a owl:Person . 
    ?person dbpprop:language ?lanName . 
} 

и результирующий набор содержит English.

ответ

3

Вам нужно фильтровать основанный на языке стоимости имущества. Не каждый свойство будет иметь значения на разных языках, но некоторые свойства будут. Кажется, из вашего примера, что dbpprop: имя не имеет значений на каждом языке. Вы можете найти больше значений на других языках, если вы посмотрите на DBpediae другого языка.

Однако, для чего-то вроде имени, вы, вероятно, получите многоязычные результаты, если используете свойство rdfs: label. Например, чтобы получить имена Барака Обамы, Дэниел Уэбстер и Джонни Кэша в России, вы можете сделать:

select ?label { 
    values ?person { dbpedia:Johnny_Cash dbpedia:Barack_Obama dbpedia:Daniel_Webster } 
    ?person rdfs:label ?label . 
    filter langMatches(lang(?label),"ru") 
} 

SPARQL results

Как и в сторону, обратите внимание на использование langMatches, а не равенства для согласования языковые метки. Это, как правило, лучший подход, потому что он будет правильно обрабатывать различные тэги языка в языке Для примера (из спецификации SPARQL), вы можете найти оба французских литералы:

"Cette Série des Années Soixante-dix"@fr . 
"Cette Série des Années Septante"@fr-BE . 

с langMatches (языки («title»), «fr»), но только первый с lang (? title) = "fr".

0

Вы ищете rdfs:label за имя, конечно, все имена являются английскими, вы смотрите на английский dbpedia.

PREFIX owl: <http://dbpedia.org/ontology/> 
PREFIX dbpprop: <http://dbpedia.org/property/> 
SELECT distinct * 
WHERE { 
    ?person a owl:Person . 
    ?person rdfs:label ?name . 
    FILTER(lang(?name) = "fr") 
} 

Опять же, для второго, если вы замените имя с rdfs: label вы можете иметь:

PREFIX owl: <http://dbpedia.org/ontology/> 
    PREFIX dbpprop: <http://dbpedia.org/property/> 
    SELECT distinct * 
     WHERE { 
    ?person a owl:Person . 
    ?person rdfs:label ?name . 
    ?person dbpprop:language <http://dbpedia.org/resource/English_language>. 
} 
+1

Выполнение 'select? Label {dbpedia: England rdfs: label? Label}' на http://dbpedia.org/sparql/ возвращает [двенадцать различных результатов] (http://goo.gl/ZGVXrB) и только один находится на английском языке. Не совсем ясно, что «** Вы ищете rdfs: ярлык для имени, конечно, все имена - английский **». –

+1

И лучше использовать 'langMatches (lang (? Name)," fr ")' than 'lang (? Name) =" fr "'. –

+0

Спасибо, есть ли какие-либо подробные документы по этим свойствам? Официальная онтологическая иерархия (например, http://mappings.dbpedia.org/server/ontology/classes/Person) содержит только простые комментарии. – Tilney

 Смежные вопросы

  • Нет связанных вопросов^_^