#c# #rdf #rdfs
#c# #rdf #rdfs
Вопрос:
У нас есть требование, в соответствии с которым нам нужно преобразовать данный rdf-файл в определенный xml-файл. Итак, у нас есть три входных файла RDFS, RDF-файл и XSD-файл. С их помощью нам нужно создать XML-файл (который должен соответствовать XSD), содержащий данные RDF-файла. Схема RDF содержит простые, сложные, связанные объекты. Отношения, определенные в RDF, отличаются от отношений, определенных в XSD.
Мы видим несколько способов реализации того же:
- Создайте XSLT, определяющий логику преобразования RDF-файла в XML-файл.
- Создайте пользовательское приложение на 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-файл по желанию.
Если вам кажется, что это может быть приемлемым вариантом для вас, не стесняйтесь, напишите мне электронное письмо в списки рассылки проекта, если вам нужна какая-либо помощь / совет.