SPARQL-запрос данных, связанных между двумя отдельными графиками
У меня есть график Person
хранятся в экземпляре StarDog, и график Address
es в экземпляре Fuseki. Один из Person
экземпляры имеет hasAddress
отношения с Address
,
Я хочу сделать запрос SPARQL, который просто возвращает все Person
у которых есть адрес, а также адрес, по которому они живут. Этот запрос будет отправлен в экземпляр StarDog (конечная точка с Person
график). Я использую запрос
prefix testOnt: <http://www.example.org/test-ontology#>
SELECT ?person ?address
WHERE {
?person testOnt:hasAddress ?address
}
Однако это не дает никаких результатов.
Я инициализирую базу данных StarDog, используя этот бит TTL:
:SomeDude rdf:type owl:NamedIndividual , :Person;
:hasAddress :Address1.
куда Address1
определяется в TDB на стороне Fuseki.
Я просто не знаю, как я должен ссылаться на второй график, когда я делаю запрос к другому.
Спасибо за любую помощь, и я могу уточнить любые моменты в комментариях.
1 ответ
Ваш запрос для получения просто ?person testOnt:hasAddress ?address
должен работать против Stardog, но не возвращает адресную информацию, хранящуюся в Fuseki. Если этот запрос не работает, убедитесь, что пространства имен, которые вы используете в данных, и запрос совпадают.
Чтобы получить экземпляры людей из Stardog и их адреса от Fuseki, вам потребуется федеративный запрос SPARQL, который использует SERVICE
ключевое слово. Если предположить, что пространства имен верны, ваш запрос должен выглядеть следующим образом:
prefix testOnt: <http://www.example.org/test-ontology#>
SELECT ?person ?address
WHERE {
?person testOnt:hasAddress ?address
SERVICE <http://fuseki/location> {
?address ?p ?o # use a more specific BGP here if necessary
}
}