0

我有一个Person存储在 StarDog 实例中的 s 图和一个 Fuseki 实例中的Addresses 图。其中一个Person实例hasAddressAddress.

我希望做一个 SPARQL 查询,它只返回所有Person有地址的人,以及他们居住的地址。此查询将发送到 StarDog 实例(带有Person图表的端点)。我正在使用的查询是

prefix testOnt: <http://www.example.org/test-ontology#>

SELECT ?person ?address 
WHERE {
  ?person testOnt:hasAddress ?address
}

但是,这不会返回任何结果。

我正在使用以下 TTL 初始化 StarDog 数据库:

:SomeDude rdf:type owl:NamedIndividual , :Person;
    :hasAddress :Address1.

Address1Fuseki 端的 TDB 中定义了 where。

我只是不知道当我向另一张图查询时我是如何引用第二张图的。

感谢您的帮助,我可以澄清评论中的任何观点。

4

1 回答 1

4

您的检索查询?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
  }
}
于 2018-02-01T16:09:40.027 回答