преминаване през онтология с помощта на dotnetrdf

Създадох онтология, използвайки protege. Сега искам да напиша код за преминаване през онтология с помощта на dotNetRDF. Чрез траверса се показват всички класове, подкласове и т.н.

Използвам следния код, но той дава изключение **

URI пространството от имена за дадения префикс 'owl' не е известно от NamespaceMapper в обхвата

OntologyGraph g = new OntologyGraph();
        FileLoader.Load(g, "humanontordf.owl");

        OntologyClass classOfClasses = g.CreateOntologyClass(g.CreateUriNode("owl:Class"));

        //This iterates over the things that are a class
        foreach (OntologyResource r in classOfClasses.Instances)
        {
            //Do what you want with the class
            Console.WriteLine(r.ToString());
        }

Този код се основава на даден отговор тук (http://answers.semanticweb.com/questions/19984/dotnetrdf-list-all-ontology-classes)

Може ли някой да ми каже какво пропускам в горния код? някакъв добър URL за урок за dotNetRDF?


person mqpasta    schedule 27.12.2012    source източник


Отговори (1)


Съобщението за грешка се отнася до следната част от вашия код:

g.CreateUriNode("owl:Class")

Това използва име с префикс като пряк път за пълния URI, който изисква префиксът owl да бъде дефиниран във вашата графика.

Ако получавате това, вашият RDF файл не включва това, можете да дефинирате това така:

g.NamespaceMap.AddNamespace("prefix", new Uri("http://some/namespace/"));

Предполагам, че OntologyGraph наистина трябва да дефинира пространството от имена на OWL автоматично, ще добавя това в следващото издание.

person RobV    schedule 27.12.2012
comment
Добавено в комит bitbucket.org/dotnetrdf/dotnetrdf/commits/ - person RobV; 27.12.2012
comment
благодаря за отговора, но не се получи. Генерирах онтология с помощта на Protege с RDF/XML. - person mqpasta; 27.12.2012
comment
между добавих следния ред g.NamespaceMap.AddNamespace(prefix, new Uri(qasimpasta.info/humanonto.owl #)); - person mqpasta; 27.12.2012
comment
Работи, когато се добави g.NamespaceMap.AddNamespace(owl, UriFactory.Create(NamespaceMapper.OWL)); - person mqpasta; 27.12.2012
comment
@mqpasta Даденият отговор беше пример, трябва да дефинирате префикса, който всъщност искате да използвате, prefix беше просто заместител за примера - person RobV; 28.12.2012