使用dotenetrdf库删除节点或三元组

本文关键字:三元组 节点 删除 dotenetrdf 使用 | 更新日期: 2023-09-27 18:09:29

我有一个n3文件格式,我想从它删除一个节点或三重,我怎么能做到呢?我应该使用sparql查询吗?请帮帮我我想要一个n3文件,然后从中删除一个节点。我将父窗体中使用的图形传递给这个删除窗体,并希望使用我从n3文件创建的图形,我的意思是我读取这个n3文件并将其转换为图形并将其发送到这个窗体。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using VDS.RDF;
using VDS.RDF.Parsing;
using VDS.RDF.Query;
using System.IO;
using System.Windows;
using System.Runtime.InteropServices;
using VDS.RDF.Writing;
namespace WindowsFormsApplication2
{
    public partial class delete : Form
    {
        Graph gra = new Graph();
        public delete(Graph initialValue)
        {
            InitializeComponent();
            ValueFromParent = initialValue;
        }
        private void delete_Load(object sender, EventArgs e)
        {
        }
        public Graph ValueFromParent
        {
            set
            {
                this.gra = value;
            }
        }
    }
}

使用dotenetrdf库删除节点或三元组

在使用图形的文档中,请参阅标题为断言和撤回三元组的部分,其中提到了Assert() retrtract ()方法,可以用来做你所要求的。

例如删除一个特定的Triple:

//Assuming you already have the triple to delete in a variable t
g.Retract(t);

或者删除与特定Node匹配的所有Triples更有用:

g.Retract(g.GetTriplesWithSubject(g.CreateUriNode(new Uri("http://example.org"))));

如果您不确定某个特定节点是否存在,您可以执行如下操作:

INode n = g.GetUriNode(new Uri("http://example.org"));
//If n is null then the specified Node does not exist in the Graph
if (n != null)
{
  g.Retract(g.GetTriplesWithSubject(n));
}

注意,你不能直接从图中删除一个节点,除非通过删除所有在主题/对象位置上的Triples。还要注意的是,这不会将它从当前Graph的Nodes属性提供的集合中删除。

是的,你也可以通过SPARQL做到这一点,但如果只是删除几个三元组,那就太过分了,除非你需要根据一些复杂的标准删除三元组,而这些标准不容易直接使用API选择和撤回方法来表达。