Rdf sparql未知关系中的查询

Rdf sparql未知关系中的查询,rdf,sparql,Rdf,Sparql,我是学Sparql的新手。我想知道有没有一种方法可以查询节点之间没有直接关系的节点 假设我在RDF中有以下三元组 书-由作者创建 作家工作公司 公司-地点-地点 我可以在Sparql中编写查询来查找给定论文作者的位置吗 我们只有纸质资料 我们希望用户能够检索到这个位置 不知道他们之间的关系 作家工作公司 公司-地点-地点 更新: 我想知道sparql在xquery和xpath中是否有类似于//的特性 //从当前节点中选择与所选内容匹配的文档中的节点,无论它们位于何处假设您有这样的数据(三本书、三

我是学Sparql的新手。我想知道有没有一种方法可以查询节点之间没有直接关系的节点 假设我在RDF中有以下三元组

书-由作者创建

作家工作公司

公司-地点-地点

我可以在Sparql中编写查询来查找给定论文作者的位置吗 我们只有纸质资料 我们希望用户能够检索到这个位置

不知道他们之间的关系 作家工作公司

公司-地点-地点

更新:
我想知道sparql在xquery和xpath中是否有类似于//的特性
//从当前节点中选择与所选内容匹配的文档中的节点,无论它们位于何处

假设您有这样的数据(三本书、三位作者、两个公司(其中两位作者在同一家公司工作)和两个位置(每个公司一个)):

这里的技巧在于使用相当于通配符的属性路径。每个IRI要么是
,要么不是,因此路径
:|!:匹配每个属性。这意味着路径
(:|!:)*
是通配符路径。通过要求
?book
?location
分别具有类型
:book
:location
,我们找到了从书籍到位置的路径。有关使用通配符的属性路径的详细信息,请参见和


当然,这里可能有个问题。RDF图是有向图,任何东西都可以与其他任何东西相关。这意味着,如果您有一个类似于
:location2:northOf:location1
的关系,那么现在就有一个从
:book3
:location1
的路径。这可能不是您所期望的。

您需要进一步澄清您要做的事情。您能提供一些示例输入数据吗(这实际上是我们可以编写SPARQL查询的合法数据)?通过一个未知的属性链(尽管可能无法找到这些属性是什么),很容易找到哪些作者连接到了哪些位置。不过,我们还需要一些输入。我想知道sparql是否具有类似于xquery中//的功能,xpath//从当前节点中选择与选择匹配的节点,无论这些节点位于何处,这只是一个通配符属性路径。然而,您可能会遇到的困难是,RDF图是有向图,而不是(必要的)树,这意味着通配符路径可能比您预期的更远。这意味着,例如,你可以从一篇论文开始,从中找到可以到达的位置,但你不能保证,例如,可以到达的位置表明是雇佣作者的公司的位置。完美。这就是我要找的
@prefix : <https://stackoverflow.com/q/23066695/1281433/>.

:book1 a :Book; :createdBy :author1 .
:book2 a :Book; :createdBy :author2 .
:book3 a :Book; :createdBy :author3 .

:author1 a :Author; :worksFor :company1. 
:author2 a :Author; :worksFor :company2. 
:author3 a :Author; :worksFor :company2. 

:company1 a :Company; :locatedIn :location1.
:company2 a :Company; :locatedIn :location2.

:location1 a :Location.
:location2 a :Location.
prefix : <https://stackoverflow.com/q/23066695/1281433/>

select ?book ?location where {
  ?book a :Book; (:|!:)* ?location .
  ?location a :Location .
}
-----------------------
| book   | location   |
=======================
| :book1 | :location1 |
| :book2 | :location2 |
| :book3 | :location2 |
-----------------------