Как анализировать фид JSON-LD с помощью dotNetRDF в C#

Я пытаюсь использовать конечную точку в формате json-ld в приложении dotnet.

Я раньше не сталкивался с этим форматом, но большинство примеров для JavaScript.

Я попробовал пару библиотек и просто потерпел неудачу, потому что ссылок так мало.

Я загрузил содержимое эндпоинта в память, теперь хочу посмотреть, как лучше проходить узлы, но не могу взять содержимое и что-то с ним сделать.

Самый простой пример ДОЛЖЕН выглядеть примерно так:

JsonLdParser parser = new JsonLdParser();
parser.Load(contentsfromuri)

Однако вышеизложенное требует, чтобы у вас был объявлен IRdfReader, который не может быть создан как абстрактный класс.


person Journeyman1234    schedule 06.06.2020    source источник


Ответы (1)


Вы найдете всю документацию dotNetRDF по адресу https://github.com/dotnetrdf/dotnetrdf/wiki. Несколько примеров анализа RDF-данных из различных источников можно найти по адресу https://github.com/dotnetrdf/dotnetrdf/wiki/UserGuide-Reading-RDF. В RDF есть синтаксис, который сериализует только один граф, и синтаксис, который может сериализовать несколько графов — JSON-LD является одним из последних, поэтому вам также необходимо прочитать раздел о программах для чтения в магазине.

Во всех следующих примерах показана загрузка данных в хранилище в памяти.

Если ваш источник контента «хорошо себя ведет» (отправляет обратно правильные заголовки Content-Type или имеет ожидаемый суффикс имени файла, если это локальный файл), то загрузка данных может быть такой же простой, как создание нового в -memory graph и вызывая его метод Load:

var store = new TripleStore();

# This is a convenience wrapper that simply invokes UriLoader.Load()
store.LoadFromUri(contentSourceUri)

ПРИМЕЧАНИЕ. Здесь используется метод расширения (как описано на странице https://github.com/dotnetrdf/dotnetrdf/wiki/UserGuide-Extension-Methods), который является просто удобной оболочкой:

# Create the store
var store  = new TripleStore();

# UriLoader will make an HTTP request and parse the response, 
# selecting the parser to be used based on the Content-Type header returned.
UriLoader.Load(store, contentSourceUri);

Если вы выполняете синтаксический анализ строки, которую вы уже получили, или если вам нужно явно указать экземпляр анализатора для использования (это может быть в том случае, если вы хотите передать некоторые параметры синтаксическому анализатору, например, при его создании), тогда вам нужен немного более подробный подход:

var store = new TripleStore();

# Create the parser (we can pass in options here if needed)
var parser = new JsonLdParser();

# Wrap the string content in a StringReader and pass the target graph and the reader
parser.Load(store, new StringReader(contentsFromUri));

И последнее, на что следует обратить внимание, поскольку вы конкретно ссылаетесь на JSON-LD. Синтаксический анализатор соответствует JSON-LD 1.0, но его поддержка JSON-LD 1.1 основана на более ранней версии спецификации. В настоящее время я работаю над обновлением реализации и надеюсь, что через несколько недель появится новый выпуск, поддерживающий предлагаемую рекомендацию JSON-LD 1.1.

person Kal    schedule 06.06.2020
comment
Я уже нашел эту документацию, и буквально последним, что я пробовал, был последний пример, который вы привели, он завершается с этой ошибкой: Ошибка загрузки документа из schema.org — полученный тип контента (System.String[]) не был application/json, application/ld+json или */*+json. - person Journeyman1234; 07.06.2020
comment
обратите внимание, как я сказал, что использовал самый последний пример, в котором, поскольку конечная точка имеет аутентификацию, я сначала извлекаю файл json-ld в память - person Journeyman1234; 07.06.2020
comment
Было бы полезно, если бы вы включили эту информацию в вопрос, который вы задали! Заданный вами вопрос указывает на то, что вы не можете найти документацию о том, как загрузить JSON-LD в граф для локальной обработки. Если вы на самом деле спрашиваете, как получить данные из конечной точки с аутентификацией, вам следует посмотреть ответ на этот вопрос - person Kal; 08.06.2020