2015-02-07 44 views
3

我在我的RDF店内以下情况:使用生成图表与子图SPARQL

命名图表:一个

S1 P1 O1 

命名图表:乙

S2 P2 O1 

命名图:C

S3 P3 O1 

我现在要定义一个SPARQL查询,其找到在名为A + B + C

一个新的图形的所有图,其中O1处于tripples,并存储那些3个图表+的tripples新的命名图表:A + B + C

Named Graph: A 
    S1 P1 O1 
Named Graph: B 
    S2 P2 O1 
Named Graph: C 
    S3 P3 O1 

,以构建或插入我只发现了如何建立一个图出来tripples的,BZW不是如何构建包含图形的图形?

这是可能的,如果是的话,怎么样?

坦克你

回答

4

你不能做的正是你想要的,因为子图不能明确地存储内的方式彼此你似乎描述。然而,你可以把所有的三元组到一个图中可以充分证明:

PREFIX : <http://example.org/> 
INSERT 
{ 
    # Output triples in the desired graph 
    GRAPH ?name { ?s ?p ?o } 
} 
WHERE 
{ 
    # Use a sub-query to find all relevant graphs and concatenate their names together 
    { 
    SELECT (GROUP_CONCAT(STR(?g)) AS ?strName) (URI(?strName) AS ?name) 
    WHERE 
    { 
     GRAPH ?g { ?s ?p :o1 } 
    } 
    GROUP BY ?g 
    } 
    # Join the name to all the relevant triples 
    GRAPH ?g 
    { 
    ?s ?p :o1 . 
    ?s ?p ?o . 
    } 
} 

所以这是一个有点哈克但应该做的大概你想要什么。它使用子查询来查找所有具有相关三元组的图并将它们的名称连接在一起并将其转换为URI。请注意,这可能会创建一个非常无效的URI,这可能意味着查询的后面的步骤将不起作用。

然后它将图名连同包含所需主题的三元组的图中的所有三元组一起加入。

最后,它将这些输入到具有新创建的名称的图形中,具体取决于商店,这可能不起作用,因为您可能会创建非法图形名称。

这可能不是你想要的,但希望能指出你正确的方向。

+0

因此,您提供的解决方案将所需的翘曲存储在Graph中,我看到了吗? 但我需要存储子图形新生成的图形。但是你认为这不可能吧? – misterxyz 2015-02-09 08:35:08

+1

这是不可能的,在RDF规范中没有嵌套图的概念。您可以拥有一个子图,意思是图中任何三元组的子集都可以被认为是“子图”,但是没有办法专门命名/引用这些“子图” – RobV 2015-02-09 09:40:22