2013-02-26 72 views
6

我想从Mulgara RDF存储创建一个RDF图形,使用Sparql查询返回结果。我开始习惯于简单的查询,并且有效地询问“哪些对象是特定集合的成员?”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数据库。任何想法,即使它'不可行,非常感谢。

+0

@ghkill我编辑了标题以更好地总结这是什么。 – 2013-02-27 18:22:47

回答

8

假设您必须坚持使用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将与从根第二级元素的约束。使用UNION,您可以使用一个查询查询多个级别。在一个查询从根部一个到两个层面的一个例子:

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。因此,您无法使用此类查询绘制树。在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水平回归。您可以想象一些编程式生成的查询,其中有很多工会试图达到树的最大深度。如果您想尝试使用Jena/ARQ,则需要完全支持SPARQL 1.1。在耶拿你也可以使用Property paths并且用类似如下:

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

你会在?x所有可达来自<info:fedora/collection:ramsey>节点通过谓语<fedora-rels-ext:isMemberOfCollection>绑定。

+1

你先生,是一位学者和绅士,非常感谢你。这正是我希望学习的东西,并且给了我很多前进的信息。 – ghukill 2013-02-26 14:14:31