使用dotnetrdf库删除节点或三元组?

时间:2011-09-24 15:39:59

标签: c# sparql n3

我有一个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;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

Working with Graphs上的文档中,请参阅标题为断言和撤回三元组的部分,其中提到了断言()撤回()方法习惯做你所问的事。

例如删除特定的Triple:

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

或者更有用的是删除与特定节点匹配的所有三元组:

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));
}

请注意,您不能直接从图表中删除节点,除非删除在主题/对象位置中具有它的所有三元组。另请注意,这不会将其从当前图表的Nodes属性提供的集合中删除。

是的,您也可以通过SPARQL执行此操作,但只需删除一些非常过度的三元组,除非您需要根据一些复杂的标准删除三元组,这些标准不容易使用API​​选择和撤销方法直接表达。