Разбор RDF - dotnetrdf c # - PullRequest
       38

Разбор RDF - dotnetrdf c #

0 голосов
/ 04 октября 2018

Это мой первый раз, когда я смотрю на RDF, и после попытки я не знаю, как его проанализировать.Я смотрю на некоторые RDF (в формате Turtle), используемые в файловой системе AFF4, вот их часть:

<aff4://0295fab8-94b7-4435-bdb3-932cf48e40bd>
    a                          aff4:ImageStream ;
    aff4:chunkSize             "32768"^^xsd:int ;
    aff4:chunksInSegment       "2048"^^xsd:int ;
    aff4:compressionMethod     <http://code.google.com/p/snappy/> ;
    aff4:imageStreamHash       "82798a275176aa141a2993ca8931535b1303545a0954473f5c5e55b4d8d5a8e3ebdb9e9323e5ecfaf65f8d379a8e2b9150750f5cf44851cf4edb6a2e05372f42"^^aff4:SHA512 ;
    aff4:imageStreamIndexHash  "039eb2da046cfb8c8d40e6f9b42aae501fb36f9b09b5f29d660d3637f87c37c98c3ee3b995265adff1d2b971fa795317333bf50200e72fdfe9fa96acdb88b6d0"^^aff4:SHA512 ;
    aff4:size                  "185335808"^^xsd:long ;
    aff4:stored                : ;
    aff4:target                <aff4://92015053-5f7b-4e5a-a1e7-901d8943cf1f> ;
    aff4:version               "1"^^xsd:int .

В этом файле много такого, но я понятия не имеюкак получить доступ к любому из них, до сих пор я собрал вместе:

private static void ParseInformationStream(Stream informationStream)
    {

        Console.WriteLine("Parsing information.turtle file: ");

        informationStream.Position = 0;

        TurtleParser turtleParser = new TurtleParser();
        Graph graph = new Graph();
        turtleParser.Load(graph, new StreamReader(informationStream));

        foreach (var triple in graph.Triples)
        {
           Console.WriteLine(triple.Subject);
        }

    }

Это распечатывает некоторые данные, но если, например, я хотел получить доступ к aff4 :ressionMethod (узел?) конкретнокак бы я поступил так?Я читал о Sparql, но все это кажется немного излишним для того, что мне нужно.

Любой вклад или совет будут оценены.

1 Ответ

0 голосов
/ 04 октября 2018

Вы можете использовать методы интерфейса IGraph для доступа к содержимому анализируемого графа.Например, следующее извлечет все потоки изображений (в Turtle «a» является ярлыком для предиката rdf: type) и распечатает метод сжатия для каждого потока:

// Get the node for rdf:type
var rdfType = graph.CreateUriNode(new Uri(RdfSpecsHelper.RdfType));
// Get the node for the aff4:ImageStream type
var imageStream = graph.GetUriNode("aff4:ImageStream");
// Get the node for the aff4:compressionMethod predicate
var compressionMethod = graph.CreateUriNode("aff4:compressionMethod");
// Get the streams (the subject of x a aff4:ImageStream in the Turtle)
var imageStreams = graph.GetTriplesWithPredicateObject(rdfType, imageStream).Select(t => t.Subject);
foreach (var streamInstance in imageStreams)
{
    // Get the first compressionMethod value for the stream instance
    var compression = graph.GetTriplesWithSubjectPredicate(streamInstance, compressionMethod)
        .Select(t => t.Object).FirstOrDefault();
    Console.WriteLine("Stream " + streamInstance + " uses compression method " + compression);
}

Для получения дополнительной информации о доступе к узламтройки на графике в dotNetRDF, смотрите https://github.com/dotnetrdf/dotnetrdf/wiki/UserGuide-Working-With-Graphs

...