2014-12-23 1 views
2

Я пытаюсь написать запрос SPARQL для извлечения всех страниц, связанных с окрестностями в Википедии. Пример: http://live.dbpedia.org/page/Carter_Crest,_Edmonton. Тип недвижимости http://dbpedia.org/property/settlementType где settlementType должен быть "соседством", другой вариант шаблона: infobox_settlement. До сих пор, я попытался следующие:Как запросить dbpedia по значению типа свойства,

SELECT ?property ?hasValue ?isValueOf 
WHERE { 
    { <http://dbpedia.org/ontology/Settlement> ?property ?hasValue } 
    UNION 
    { ?isValueOf ?property <http://dbpedia.org/ontology/Settlement> } 
} 

SELECT ?class ?label 
WHERE { 
    ?class rdf:type owl:Place. 
    ?class rdfs:label ?label. 
    FILTER(lang(?label) = "Neighbourhood") 
} 
+1

'FILTER (lang (? Label) =" Neighborhood "« Neighborhood »не является языковым тегом. Функция ** lang ** возвращает язык литерала. Например,' lang («Joshua Taylor» @ ru) 'возвращает' 'en" '. –

+0

вы можете использовать' FILTER contains (str (? label), 'Neighborhood') ' –

ответ

1

<http://dbpedia.org/ontology/Settlement> является IRI из типаSettlement. Любое конкретное поселение, такое как Картер Крест, Эдмонтон, является экземпляром этого типа.

Написав

<http://dbpedia.org/ontology/Settlement> ?property ?hasValue 

вы посмотрите на свойства, которые связаны с типаSettlement, а не каких-либо экземпляров этого. То, что вы ищете какое-то свойство, что связано с произвольным объектом типа Settlement:

?someObject ?property ?hasValue. 
?someObject a <http://dbpedia.org/ontology/Settlement>. 

В вашем втором запросе, что вы в настоящее время извлечения это экземпляр типа owl:Place, чье текстовое описание равняется Neighbourhood (который снова напоминает тип, а не конкретную вещь).

Однако вы, вероятно, захотите получить экземпляр, чья метка типа равна Neighbourhood. (И на самом деле, вы, вероятно, на самом деле не хотите, чтобы это было, что было бы диким предположением, что тип, обозначенный как Neighbourhood, - это то, что вы ищете. Если вы знаете конкретный тип IRI, найдите его, как указано выше.)

+0

Спасибо - так как я ищу все окрестности в Википедии, я могу запустить следующее ... и взять отличные записи из этого правильного? dbpedia live, похоже, имеет предел 2000 результатов, вы случайно знаете способ решить это? SELECT? someObject? property? hasValue? isValueOf WHERE { ? SomeObject? Свойство? HasValue. ? SomeObject a . } – user3068287

+0

@ user3068287: Да, без точки с запятой, это должно дать вам результаты для свойств в одном из направлений. Вы можете использовать 'SELECT DISTINCT' для получения отдельных записей. Кроме того, вы можете разбивать на страницы с помощью «LIMIT» и «OFFSET», чтобы обойти любые ограничения на строки результатов, полученные одним запросом. –

+0

Извините, что беспокоиться снова - но что, если вы ищете использование собственности? Как найти вещи определенного шаблона? SELECT? Name? Member_Of? Country? Lat? Lng? Link WHERE { ? X dbpprop: wikiPageUsesTemplate "dbpedia: Template: Infobox_settlement". ? X a . ? X foaf: имя? Имя. ? X dbpedia-owl: isPartOf? Member_Of. ? X dbpedia-owl: страна? Страна. ? X geo: lat? Lat. ? X geo: long? Lng. ? X foaf: isPrimaryTopicOf? Link. } LIMIT 2500 OFFSET 0 – user3068287