gpt4 book ai didi

database - SPARQL 中的递归查询以浏览集合的集合

转载 作者:太空狗 更新时间:2023-10-30 01:45:31 24 4
gpt4 key购买 nike

我正在尝试从 Mulgara RDF 存储创建 RDF 图,使用 Sparql 查询返回结果。我刚刚开始适应简单的查询,有效地询问“哪些对象是特定集合的成员?”

我的问题是,我将不胜感激任何建议,我是否可以从这个简单的查询中获取结果并将它们作为查询对象重新路由回去?

例如,我有这个 sparql 查询:

SELECT ?x WHERE {?x  <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey>}

有了这些结果:

"x"
info:fedora/ramsey:ThelifeandadventuresofRobinsonCrusoe
info:fedora/ramsey:Jackanapes
info:fedora/ramsey:SundayJournalvol01no0219951126
info:fedora/ramsey:Ideologyandchange
info:fedora/ramsey:theshepherdofthepyrenees
info:fedora/ramsey:ScenesinAmerica
...

我的目标是获取这些唯一标识符并替换对象 <info:fedora/collection:ramsey> , 来自原始查询并再次运行查询。

我在想象一个场景,我会在初始查询中识别一个根元素,让结果返回所有成员对象,然后返回所有那些对象的成员对象,无穷无尽...

这对 Sparql 查询来说可能吗?具体来说,我相信我正在查询 Mulgara RDF 数据库。任何想法,即使它不可行,也非常感谢。

最佳答案

假设您必须坚持使用 SPARQL 1.0。我相信 mulgara 对 SPARQL 1.1 的支持有限(如果有的话)。

使用 SPARQL 1.0,如果您可能知道要查询多少级别,您可以执行以下操作:

SELECT ?y WHERE {
?x <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey>
?y <fedora-rels-ext:isMemberOfCollection> ?x
}

在这里?y将与您的根目录中的二级元素绑定(bind)。使用 UNIONS,您可以使用一个查询来查询多个级别。一个查询中从根开始的一级和二级示例:

SELECT ?x WHERE {
{
?x <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> .
} UNION {
?zz <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey>
?x <fedora-rels-ext:isMemberOfCollection> ?zz .
}
}

问题是你真的不知道在什么级别 ?x被绑定(bind)。因此,您不能使用此类查询绘制树。在 SPARQL 1.1 中,这通过 BIND AS 得到解决。

SELECT ?x ?level WHERE {
{
?x <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> .
BIND (1 AS ?level)
} UNION {
?zz <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey>
?x <fedora-rels-ext:isMemberOfCollection> ?zz .
BIND (2 AS ?level)
}
}

第二个查询将返回什么级别 ?x被绑定(bind)。您可以想象一些以编程方式生成的查询,其中包含许多试图达到树的最大深度的联合。如果你想完全支持 SPARQL 1.1,你可以尝试使用 Jena/ARQ .在耶拿,您还可以使用 Property paths并使用类似以下内容:

SELECT ?x WHERE {
?x <fedora-rels-ext:isMemberOfCollection>+ <info:fedora/collection:ramsey> .
}

您将在 ?x 中绑定(bind)从 <info:fedora/collection:ramsey> 可达的所有节点通过谓词 <fedora-rels-ext:isMemberOfCollection> .

关于database - SPARQL 中的递归查询以浏览集合的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15079943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com