удалить узел или тройку, используя dotenetrdf librery? - PullRequest
0 голосов
/ 24 сентября 2011

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

Из документации по Работа с графиками см. Раздел «Утверждение и втягивание троек», в котором упоминаются методы 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.

...