Объединение семантических конечных точек в запросе SPARQL - PullRequest
5 голосов
/ 30 января 2011

Я пытаюсь сделать запрос, который использует и семантические базы данных bibleontology и dbpedia:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?art ?abstract WHERE { 
bibleontology:Ezra owl:sameAs ?art .
?art dbo:abstract ?abstract .
}

Этот тип запроса не работает ни с конечной точкой SPARQL для библейтологии, ни с конечной точкой SPARQL dbpedia.Отдельные части запросов работают нормально на каждой конечной точке SPARQL.

Возможно ли объединение баз данных таким образом?

Ответы [ 3 ]

10 голосов
/ 21 марта 2011

Я инженер для bibleontology.com

bibleontology.com принят SPARQL1.1

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?art ?abstract
WHERE {
SERVICE <http://bibleontology.com/sparql/> { bibleontology:Ezra owl:sameAs ?art . }
SERVICE <http://dbpedia.org/sparql> { ?art dbo:abstract ?abstract . } }
6 голосов
/ 30 января 2011

Все остальные ответы верны, поскольку вы не можете выполнить запрос как есть, потому что данные не объединены в одной конечной точке SPARQL. Если одна из конечных точек поддерживает федеративные запросы SPARQL 1.1, вы можете использовать ключевое слово SERVICE, например:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT ?art ?abstract
WHERE 
{ 
  bibleontology:Ezra owl:sameAs ?art .
  SERVICE <http://dbpedia.org/sparql?default-graph-uri=http://dbpedia.org> { ?art dbo:abstract ?abstract . }
}

Вы отправили бы вышеуказанный запрос в конечную точку SPARQL для библейтологии и при условии, что он поддерживает ключевое слово SERVICE, которое отправляет часть вашего запроса в конечную точку DBPedia SPARQL.

Даже если ваша конечная точка SPARQL поддерживает ключевое слово SERVICE, вы по-прежнему полагаетесь на соответствующие данные, содержащиеся в двух наборах данных, т. Е. В онтологии Библии должен быть owl:sameAs, указывающий на ресурс DBPedia, чтобы SERVICE предложение на самом деле найти что-нибудь.

С другой стороны

Если ни одна из ваших конечных точек не поддерживает ключевое слово SERVICE, вы можете настроить локальную конечную точку или использовать инструмент командной строки, поддерживающий ключевое слово SERVICE (я найду несколько ссылок, если вам интересно) и затем введите следующее:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT ?art ?abstract
WHERE 
{ 
  SERVICE <http://bibleontology.com/sparql> { bibleontology:Ezra owl:sameAs ?art . }
  SERVICE <http://dbpedia.org/sparql?default-graph-uri=http://dbpedia.org> { ?art dbo:abstract ?abstract . }
}

Если ваш локальный инструмент / конечная точка поддерживает SERVICE, то он сможет отправить соответствующие части запроса на соответствующие конечные точки и выполнить присоединение локально и, как мы надеемся, вернем вам результаты после

6 голосов
/ 30 января 2011

Этот запрос не работает ни с dbpedia, ни с библейтологией, потому что информация хранится в двух разных базах данных, и когда вы запускаете запрос SPARQL, вы в основном нажимаете одну или другую. Это означает, что вам нужно загрузить данные из обеих баз данных, чтобы поместить их в локальное тройное хранилище, чтобы можно было выполнить запрос SPARQL, подобный показанному вами. Другой вариант - использовать библиотеку, которая сделает это за вас.

Клиентская библиотека семантической паутины будет следовать всем URI, имеющимся в вашем запросе SPARQL, и загружать данные RDF из каждого ресурса, чтобы она могла объединить все тройные шаблоны, которые появляются в вашем запросе, и дать ответы.

Вы можете выполнить запрос с некоторыми незначительными изменениями:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dbpedia: <http://dbpedia.org/ontology/> 

SELECT * WHERE { 
bibleontology:Ezra owl:sameAs ?art .
?art dbpedia:abstract ?abstract .
FILTER langMatches( lang(?abstract), "EN" )
} 

Объяснение изменений:

  1. Включено owl и dbpedia пространства имен
  2. ?art dbpedia:abstract ?abstract . вам нужно соответствовать предикату dbpedia:abstract, чтобы получить реферат вместо bibleontology:abstract, чтобы получить реферат от dbpedia
  3. Я также включил filter только для получения тезисов на английском языке, это, конечно, необязательно.

Как только вы загрузите «Библиотеку семантической паутины» и поместите свой запрос в файл (например, query.sparql), вы можете выполнить следующую команду для проверки вашего запроса:

./semwebquery -sparqlfile query.sparql -retrieveduris -maxsteps 5

Все параметры команд описаны в документации по клиентской библиотеке Semantic Web.

Вы получите следующий вывод:

| ?art                               | ?abstract
| <http://dbpedia.org/resource/Ezra> | "Ezra is a major .... "@en |

Successfully dereferenced URIs: 

http://www.w3.org/2002/07/owl
http://bibleontology.com/data/Ezra
http://dbpedia.org/data/Ezra.xml
http://dbpedia.org/data3/abstract.n3

Я упустил длинный реферат из dbpedia для простоты. Список «Успешно разыменованных URI» - это документы, полученные библиотекой для ответа на ваш запрос. В документации библиотеки вы увидите, как программно выполнять запросы на Java.

...