Sparql 插入到有序列表本体中的位置

Sparql 插入到有序列表本体中的位置,sparql,rdf,ontology,Sparql,Rdf,Ontology,我有一个的列表实现,我想编写SPARQL查询来插入列表中的特定位置。我的想法是这是两个步骤的过程。鉴于我的列表以0为基础,我想在位置N中插入: 将索引>=N的项目的索引更改为索引+1 将新插槽插入位置N 我正在努力更新,应该重新索引插槽。我尝试的是: DELETE { <http://listTest> <http://purl.org/ontology/olo/core#slot> ?slot . ?slot a <http://purl.org/

我有一个的列表实现,我想编写SPARQL查询来插入列表中的特定位置。我的想法是这是两个步骤的过程。鉴于我的列表以0为基础,我想在位置N中插入:

  • 将索引>=N的项目的索引更改为索引+1
  • 将新插槽插入位置N
  • 我正在努力更新,应该重新索引插槽。我尝试的是:

    DELETE {
        <http://listTest> <http://purl.org/ontology/olo/core#slot> ?slot .
        ?slot a <http://purl.org/ontology/olo/core#Slot> .
        ?slot <http://purl.org/ontology/olo/core#index> ?index .
        ?slot <http://purl.org/ontology/olo/core#item> ?item
    }
    INSERT {
        <http://listTest> <http://purl.org/ontology/olo/core#slot> ?slot .
        ?slot a <http://purl.org/ontology/olo/core#Slot> .
        ?slot <http://purl.org/ontology/olo/core#index> ?newIndex .
        ?slot <http://purl.org/ontology/olo/core#item> ?item
    }
    WHERE {
        FILTER(?index >= TARGET_INDEX) # Here would be the numeric value of target index 
        BIND((?index + 1) AS ?newIndex)
    }
    
    删除{
    狭槽
    ?插槽a。
    ?槽?索引。
    ?插槽?项目
    }
    插入{
    狭槽
    ?插槽a。
    ?插槽?新索引。
    ?插槽?项目
    }
    在哪里{
    FILTER(?index>=TARGET_index)#这里是目标索引的数值
    绑定((?索引+1)为?新索引)
    }
    
    即使查询运行到插槽的完成索引也不会更新。任何关于我做错了什么的建议都将不胜感激


    注意:插槽是空白节点,不确定这是否重要,只是为了确保您拥有所有详细信息。

    您的WHERE没有三重模式,因此它不会生成任何绑定,因此插入和删除无需执行任何操作。WHERE部分需要为item、index等查找绑定。仅对于index部分,您需要选择所有需要更新索引的插槽及其新索引,然后使用WHERE部分执行此操作。然后删除带有旧索引的单个三元组,然后插入带有新索引的单个三元组。请注意,您甚至不需要选择?item的值,只需要选择插槽和索引。它看起来是这样的:

    删除{
    ?槽?索引。
    }
    插入{
    ?插槽?新索引。
    }
    在哪里{
    狭槽
    ?插槽a。
    ?槽?索引。
    FILTER(?index>=TARGET_index)#这里是目标索引的数值
    绑定((?索引+1)为?新索引)
    }
    
    没错。我得出了完全相同的结论。非常感谢你