SPARQL更新个人的类型

时间:2018-12-26 16:11:15

标签: sparql stardog

我有一个简单的本体,就是这样构造的:

| Cell
    | CellFree
    | CellTree
    | CellPlayer

我的应用程序使用的是Stardog,我想动态更新个体的类型,该个体的类型以Cell开头,并且需要更新为子类之一。

我的第一种方法是:

DELETE {?c rdf:type :Cell}
INSERT {?c rdf:type :CellFree}
WHERE {?c a :Cell . ?c :x 6 . ?c :y 3}

不幸的是,这会删除单元格,但不会将其重新插入。我该如何实现?每个单元都有属性和数据,因此在此过程中不要丢失它们是很重要的(我是SPARQL的新手)。

1 个答案:

答案 0 :(得分:1)

成为子类的成员通常并不意味着它不是超类的成员(因此您可能会完全忽略DELETE)。我了解这是您当前选择的解决方法。

也就是说,这只是一个猜测,我认为这无关紧要,但是您是否尝试过简单地颠倒DELETEINSERT的顺序?给出了总体描述之后,您还可以尝试将它们分为两个不同的SPARQL查询,这些查询按顺序执行(在这种情况下,您肯定要先执行INSERT)。除了这些想法(即使他们按照自己的意愿去做),您描述的行为听起来像是Stardog中的错误,因此我也将寻求他们的直接支持。