Удалить узел или тройку, используя dotenetrdf librery?

У меня есть формат файла 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 ответ

Решение

Из документации по работе с графиками см. Раздел "Утверждение и втягивание троек", в котором упоминаются методы Assert() и Retract(), которые можно использовать для выполнения ваших задач.

Например, чтобы удалить конкретную тройку:

//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 для Graph.

Да, вы также можете сделать это с помощью SPARQL, но просто удалите несколько троек, что очень излишне, если только вам не нужно удалять тройки на основе некоторых сложных критериев, которые нелегко выразить напрямую с помощью методов выбора и отвода API.

Другие вопросы по тегам