Привет, я пытаюсь понять dotNetRDF
Этот вопрос не будет иметь большого значения, если у вас нет понимания концепций Skos RDF
, если автомобиль - скос : более узкое понятие для транспортного средства и, следовательно, для автомобиля: от более широкого до автомобиля
Как вы находите объект, когда знаете объект?
UserGuide-Working-With-Graphs предлагает использовать "ILiteralNode l = g.GetLiteralNode (" Some Text ");" для выбора литеральных узлов, но как же тогда добраться до субъекта узлов, чтобы вы могли создать более широкий / более узкий тройной узел?
using System;
using System.Collections.Generic;
using VDS.RDF;
using VDS.RDF.Writing;
using VDS.RDF.Parsing;
using VDS.RDF.Query;
namespace DotNetRDFEXEX
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
IGraph g = new Graph { BaseUri = new Uri("http://http://myserver.co.exex/") };
IUriNode skos = g.CreateUriNode(UriFactory.Create("http://www.w3.org/2004/02/skos/core#"));
IUriNode rdf = g.CreateUriNode(UriFactory.Create("http://www.w3.org/1999/02/22-rdf-syntax-ns#"));
IUriNode ns1 = g.CreateUriNode(UriFactory.Create("http://xmlns.com/foaf/0.1/"));
IUriNode owl = g.CreateUriNode(UriFactory.Create("http://www.w3.org/2002/07/owl#"));
IUriNode ns2 = g.CreateUriNode(UriFactory.Create("http://dbpedia.org/property/"));
IUriNode rdfs = g.CreateUriNode(UriFactory.Create("http://www.w3.org/2000/01/rdf-schema#"));
IUriNode ns3 = g.CreateUriNode(UriFactory.Create("http://dbpedia.org/ontology/"));
g.NamespaceMap.AddNamespace("exex", UriFactory.Create("http://myserver.com/skosmos/exex/"));
// Create one time varibles
var EXEX = UriFactory.Create(g.BaseUri + "exex");
IUriNode uriNode = g.CreateUriNode(EXEX);
ILiteralNode Collection = g.CreateLiteralNode("skos:Collection");
IUriNode rdfType = g.CreateUriNode("rdf:type");
g.Assert(new Triple(uriNode, rdfType, Collection));
IUriNode SkosDefinition = g.CreateUriNode(UriFactory.Create("skos:definition"));
ILiteralNode TaxDefinition = g.CreateLiteralNode("This taxonomy definition");
g.Assert(uriNode, SkosDefinition, TaxDefinition);
// Create reusable varibles
ILiteralNode concept = g.CreateLiteralNode("skos:concept");
IUriNode prefLable = g.CreateUriNode(UriFactory.Create("exex:prefLable"));
IUriNode narrower = g.CreateUriNode(UriFactory.Create("skos:narrower"));
IUriNode broader = g.CreateUriNode(UriFactory.Create("skos:broader"));
IUriNode description = g.CreateUriNode(UriFactory.Create("skos:description"));
IUriNode relatedMatch = g.CreateUriNode(UriFactory.Create("skos:narrower"));
// This block will be done in a loop
var uri1 = UriFactory.Create(g.BaseUri + "exex000001");
IUriNode exex1 = g.CreateUriNode(uri1);
ILiteralNode IprefLable = g.CreateLiteralNode("Vechicle");
g.Assert(new Triple(exex1, prefLable, IprefLable));
ILiteralNode iDef = g.CreateLiteralNode("a thing used for transporting people or goods");
g.Assert(new Triple(exex1, description, iDef));
// Create a narrower Concept
ILiteralNode iNarrower = g.CreateLiteralNode("exex000002");
g.Assert(new Triple(exex1, narrower, iNarrower));
var uri2 = UriFactory.Create(g.BaseUri + "exex000002");
IUriNode exex2 = g.CreateUriNode(uri2);
ILiteralNode IprefLable2 = g.CreateLiteralNode("Car");
g.Assert(new Triple(exex2, prefLable, IprefLable2));
ILiteralNode iDef2 = g.CreateLiteralNode("A car is a wheeled motor vehicle used for transportation.");
g.Assert(new Triple(exex2, description, iDef2));
//I know Vechicle a Broader concept Car
ILiteralNode literalNode = g.GetLiteralNode("Car");
if (literalNode != null)
{
Console.WriteLine(literalNode.Graph.Triples.SubjectNodes.ToString());
}
IEnumerable<Triple> ts = g.GetTriplesWithObject(IprefLable);
if (ts != null)
{
foreach (var item in ts)
{
Console.WriteLine(item.Subject.ToString());
}
}
foreach (Triple t in g.Triples)
{
Console.WriteLine(t.ToString());
}
CompressingTurtleWriter ttlwriter = new CompressingTurtleWriter();
ttlwriter.Save(g, @"C:\Temp\DotNetRDFTestG.ttl");
//RdfXmlWriter rdfxmlwriter = new RdfXmlWriter();
//rdfxmlwriter.Save(g, @"C:\Temp\EXEXdotNetRdf.rdf");
Console.ReadLine();
}
}
}