C # — Преобразование файла RDF в определенный XML-файл

#c# #rdf #rdfs

#c# #rdf #rdfs

Вопрос:

У нас есть требование, в соответствии с которым нам нужно преобразовать данный rdf-файл в определенный xml-файл. Итак, у нас есть три входных файла RDFS, RDF-файл и XSD-файл. С их помощью нам нужно создать XML-файл (который должен соответствовать XSD), содержащий данные RDF-файла. Схема RDF содержит простые, сложные, связанные объекты. Отношения, определенные в RDF, отличаются от отношений, определенных в XSD.

Мы видим несколько способов реализации того же:

  1. Создайте XSLT, определяющий логику преобразования RDF-файла в XML-файл.
  2. Создайте пользовательское приложение на C #. для выполнения того же (с использованием библиотек RDF, таких как LinqToRdf и т.д.)

Пожалуйста, укажите, какой вариант был бы лучше, и любые указатели на него.

С уважением,

Ответ №1:

Прежде всего: это не «либо … или «решение. Вы можете легко объединить преобразование XSLT с пользовательским кодом C #. Тем не менее:

По моему опыту, XSLT — отличный выбор, если преобразование не содержит слишком много логики. Легко переименовывать теги, сглаживать или переставлять иерархии, … используя XSLT, но это может быть неприятно, если вам нужна логика «если-то-еще», например «создать тег со значением if из … но только если … иначе создайте тег B «.

Предложение

Отношения, определенные в RDF, отличаются от отношений, определенных в XSD.

звучит как сложное преобразование, которое включает в себя довольно много логики «если-то-еще» и «поиска». В этом случае я бы, вероятно, выбрал более ориентированное на C # решение.

Комментарии:

1. Да, преобразование может потребовать реализации сложной логики, и решение на основе C # было бы лучше. Но я не уверен, как действовать в этом направлении. Я попытался использовать библиотеку LinqToRdf для анализа файла rdf, с ее помощью я могу получить все инструкции, но возможно ли получить информацию RDF в виде классов и объектов (например, как мы десериализуем xml)? Можем ли мы сгенерировать эти классы из файла rdfs (например, с помощью инструмента, подобного xsd.exe)?

2. На самом деле для этого и был разработан LinqToRdf, для генерации которого предусмотрен инструментальный вызов RdfMetal . Сетевые классы из ваших онтологий RDF или OWL. К сожалению, документация о том, как это сделать, довольно скудная, и имейте в виду, что проект был заброшен некоторое время назад его автором и активно не поддерживается

Ответ №2:

XSLT, как правило, является плохой идеей для преобразования RDF / XML в другие форматы, поскольку одни и те же данные RDF могут быть закодированы в RDF / XML разными способами.

Таким образом, если ваш ввод RDF / XML жестко не контролируется, чистое преобразование XSLT обычно довольно сложно и его трудно поддерживать.

Для работы с RDF на C # вы можете попробовать использовать dotNetRDF (отказ от ответственности — я разрабатываю библиотеку), которая предоставляет вам API для работы с RDF на тройном уровне. Если в вашем RDF есть регулярно повторяющиеся структуры, то самым простым способом извлечения этих данных будет использование запросов SPARQL для извлечения из RDF релевантных для вас данных. Как только у вас будут результаты (которые по структуре похожи на DataTable и могут быть преобразованы в DataTable, если вам с этим проще работать), вы сможете сгенерировать свой XML-файл по желанию.

Если вам кажется, что это может быть приемлемым вариантом для вас, не стесняйтесь, напишите мне электронное письмо в списки рассылки проекта, если вам нужна какая-либо помощь / совет.