SPARQL-запрос данных, связанных между двумя отдельными графиками

У меня есть график Personхранятся в экземпляре StarDog, и график Addresses в экземпляре 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
  }
}
Другие вопросы по тегам