Sparql 删除连接的三元组 @前缀用户:。 @前缀用户:。 @前缀foaf:。 @前缀rdf:。 用户:账户\u 62eb31ea-e665-49ec-9675-4282ced149da 用户:uniqueId; rdf:类型 foaf:OnlineAccount, 用户:实体; foaf:accountName'foo'; foaf:accountServiceHomepage . 用户:用户\u 62eb31ea-e665-49ec-9675-4282ced149da rdf:类型 foaf:个人, 用户:管理员, 用户:用户; foaf:holdsAccount用户:账户62eb31ea-e665-49ec-9675-4282ced149da; foaf:mbox; #一些毫无意义的BNODE示例只是为了演示 #这也应该删除 用户:xxx[用户:a用户:b] .

Sparql 删除连接的三元组 @前缀用户:。 @前缀用户:。 @前缀foaf:。 @前缀rdf:。 用户:账户\u 62eb31ea-e665-49ec-9675-4282ced149da 用户:uniqueId; rdf:类型 foaf:OnlineAccount, 用户:实体; foaf:accountName'foo'; foaf:accountServiceHomepage . 用户:用户\u 62eb31ea-e665-49ec-9675-4282ced149da rdf:类型 foaf:个人, 用户:管理员, 用户:用户; foaf:holdsAccount用户:账户62eb31ea-e665-49ec-9675-4282ced149da; foaf:mbox; #一些毫无意义的BNODE示例只是为了演示 #这也应该删除 用户:xxx[用户:a用户:b] .,sparql,blank-nodes,Sparql,Blank Nodes,我想要完成的事情 通过用户:uniqueId查找帐户 删除所有的三元组 通过foaf:holdsAccount 同时删除所有的三元组 同时删除所有与B节点相关的三元组(如果有) 我想到了什么 前缀用户: 前缀用户: 前缀foaf: 具有 删除{ ?s?p?o。 } 何处{ 绑定(作为?帐户ID) { ?s rdf:类型 foaf:在线账户; 用户:uniqueId?accountId。 ?s?p?o。 } 联合{ ?账户rdf:类型 foaf:仅在线帐户; 用户:uniqueId

我想要完成的事情

  • 通过
    用户:uniqueId查找帐户
    
    • 删除所有的三元组
  • 通过
    foaf:holdsAccount
    • 同时删除所有的三元组
  • 同时删除所有与B节点相关的三元组(如果有)
我想到了什么

前缀用户:
前缀用户:
前缀foaf:
具有
删除{
?s?p?o。
}  
何处{
绑定(作为?帐户ID)
{
?s rdf:类型
foaf:在线账户;
用户:uniqueId?accountId。
?s?p?o。
}
联合{
?账户rdf:类型
foaf:仅在线帐户;
用户:uniqueId?accountId。
?s foaf:holdsAccount?帐户。
?s?p?o。
}
}
有没有更简洁或有效的方法来删除所有创建的三元组

如何删除由B节点链接的三元组?

前缀用户:
PREFIX userS: <http://bewellup.org/2017/6/product/bwu_user_schema#>
PREFIX user: <http://bewellup.org/2017/6/product/bwu_product_user#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

WITH <http://bewellup.org/2017/6/product/bwu_product_user>
DELETE { 
  ?s ?p ?o .
  ?s_del ?p_del ?o_del .
}
WHERE {  
  BIND (<urn:uuid:62eb31ea-e665-49ec-9675-4282ced149da> as ?accountId)
  {
    ?s rdf:type 
        foaf:OnlineAccount ;
        userS:uniqueId ?accountId .
    ?s ?p ?o .
     OPTIONAL{FILTER(isBlank(?o)) ?o (:|!:)* ?s_del . ?s_del ?p_del ?o_del. }
  }
  UNION {
    ?account rdf:type 
        foaf:OnlineAccount ;
        userS:uniqueId ?accountId .
    ?s foaf:holdsAccount ?account .
    ?s ?p ?o .
    OPTIONAL{FILTER(isBlank(?o)) ?o (:|!:)* ?s_del . ?s_del ?p_del ?o_del.}
  }
}
前缀用户: 前缀foaf: 具有 删除{ ?s?p?o。 s_del?p_del?o_del。 } 何处{ 绑定(作为?帐户ID) { ?s rdf:类型 foaf:在线账户; 用户:uniqueId?accountId。 ?s?p?o。 可选的{过滤器(isBlank(?o))?o(:|!:)*?s_del。?s_del?p_del?o_del.} } 联合{ ?账户rdf:类型 foaf:在线账户; 用户:uniqueId?accountId。 ?s foaf:holdsAccount?帐户。 ?s?p?o。 可选的{过滤器(isBlank(?o))?o(:|!:)*?s_del。?s_del?p_del?o_del.} } }
如果这只是直接连接的空白节点,则可以在
删除部分和两个
联合部分中使用类似
?o?p1?o1
的内容:
可选的{FILTER(isBlank(?o))?o?p1?o1}
,但对于嵌套或传递连接的三元组,这两个部分都比较困难。很贵,我这里没什么可测试的,但这个有用吗<代码>可选{FILTER(isBlank(?o))?o(:|!:)* < s> del.psidel.odidel.<代码> <代码>联合/代码>部件和<代码>?Sydel-Pydel.Oydel[< /代码>到<代码>删除< /代码>部分。注意,即使该工作不考虑路径上的传入三元组以理解,您想删除1)关于帐户的三元组,以及2)关于用户的三元组吗?这很完美,因为你必须匹配两个不同的结构。现在我考虑的是一般的数据(事实上我不知道数据),但是对于一个拥有多个帐户的用户呢?我想这是不可能的,对吧?好吧,那么我的方法现在应该可以用了。至少我在本地的三元组存储上测试了它,一个
构造
查询返回所有相关的三元组,以及我为测试目的引入的传递连接。HTH
(:|!:)
是一种通配符,例如,请参见。可能
(a |!a)*
更清楚:-)。如果@AKSW发布他的答案,我将删除此注释。