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