SPARQL插入查询

时间:2014-04-12 09:24:12

标签: xml sparql rdf fuseki turtle-rdf

在龟中,我有类似的东西:

@prefix b: <http://www.fake.org/vl/> .

b:ID_13 b:OwnBy b:Katrin ;
    b:Rank   "5" .

b:FID_13 b:OwnBy b:emily ;
    b:Rank "9" ;
    b:Comment "comment \"George goes to school!" ;
    b:Time_Comment "at 10:18 21/01/2015" .

当我使用

SELECT * WHERE{

    ?ID  b:OwnBy  ?Name;
         b:Rank     ?Rank;
}

我得到了结果

ID       Name     Rank
ID_13   Katrin    "5"
ID_13   emily     "9"

如何为ID_13 Katrin插入另一个等级(仅适用于katrin)????

我试过这个

INSERT {b:ID_13 b:Rank  "pppppppppppppp"}

WHERE{b:ID_13 b:OwnBy b:Cathy}

但是当我使用select查看我插入的内容时,此查询会将新的等级插入到Katring和emily中,然后我会得到以下结果:

ID       Name     Rank
ID_13   Katrin    "5"
ID_13   Katrin    "pppppppp"
ID_13   emily     "9"
ID_13   emily     "pppppppp"

1 个答案:

答案 0 :(得分:2)

您的示例数据包含两个三元组,其属性为b:OwnBy

  b:ID_13 b:OwnBy b:Katrin .
  b:ID_13 b:OwnBy b:emily .

(我假设您问题中的b:FID_13是拼写错误)

请注意,两个三元组共享相同的主题。因此,b:ID_13表示的资源由Katrin和emily共同拥有。

您的INSERT操作会尝试添加三重b:ID_13 b:Rank "pppppppppppppp"WHERE子句没有任何意义,因为没有变量可以填充这个模式 - 这不是完全错误的,但它并没有真正做任何有用的事情。除此之外,你想要做的只是一个逻辑上的不可能性。由于b:ID_13是所有者Katrinemily的共享主题,因此您无法插入b:ID_13的排名,该排名不会自动应用于Katrinemily

错误不是您的INSERT操作,而是您的输入数据。您需要确保Katrinemily拥有的资源不共享相同的主题标识符。