0

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

1 回答 1

0

从有关使用图形的文档中,请参阅标题为断言和收回三元组的部分,其中提到了Assert()Retract()方法,它们可用于执行您所要求的操作。

例如删除一个特定的 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));
}

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

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

于 2011-09-24T16:02:27.127 回答