1

我有一个简单的本体,它的结构是这样的:

| Cell
    | CellFree
    | CellTree
    | CellPlayer

我的应用程序正在使用 Stardog,我想动态更新开头 aCell并且需要更新为子类之一的个人类型。

我的第一种方法是:

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

不幸的是,这会删除单元格,但不会将其插入回去。我怎样才能做到这一点?每个 Cell 都有属性和数据,因此在此过程中不要丢失它们很重要(我是 SPARQL 的新手)。

4

1 回答 1

1

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

也就是说,这只是一个猜测,我认为这不重要,但是您是否尝试过简单地颠倒DELETEand的顺序INSERT?鉴于您所描述的总体情况,您还可以尝试将它们变成两个不同的 SPARQL 查询,这些查询按顺序执行(在这种情况下,您肯定想要INSERT第一个)。除了这些想法(即使他们做你想做的事),你描述的行为听起来像是 Stardog 中的一个错误,所以我也会寻求他们的直接支持。

于 2018-12-26T19:02:49.090 回答