dontNetRDF: Концепции Skos Как найти объект, когда вы знаете объект? - PullRequest
0 голосов
/ 03 марта 2020

Привет, я пытаюсь понять 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();
            }
        }
    }
...