我有一个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;
}
}
}
}
答案 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选择和撤销方法直接表达。