Загрузка Notation3 в базу данных

Как вы анализируете и загружаете тройки, представленные файлом Notation3, в базу данных? Я немного знаком с Дженой и Сезамом, но, похоже, они предназначены для обработки RDF или Turtle, а не для полной нотации 3.

Я нашел относительно немного надежных инструментов для работы с N3. Те немногие, что я нашел, перечислены здесь и состоят только из грубых скриптов Python, которые могут выполнять только базовые действия командной строки и, похоже, не имеют стандартной упаковки, распространения или обслуживания. По умолчанию библиотека Python выглядит так: notation3.py но я не смог найти для него ни одной домашней страницы и нашел десятки разных версий, разбросанных по всему интернету.

Например, скажем, у меня есть следующий N3, представляющий ботаническую классификацию:

{
   []
       :genus "Abies" ;
       :species "alba" ;
       :name [:value "Silver Fir" ; :usage "common" ; :language "English" ] ;
       :name [:value "European Silver Fir" ; :usage "common" ; :language "English" ] ;
       :name [:value "abeto blanco" ; :usage "common" ; :language "Spanish" ] ;
       :name [:value "abeto plateado" ; :usage "common" ; :language "Spanish" ] ;
       :name [:value "Edeltanne" ; :usage "common" ; :language "German" ] ;
       :name [:value "Silbertanne" ; :usage "common" ; :language "German" ] ;
       :name [:value "Weißtanne" ; :usage "common" ; :language "German" ] ;
       :stem!:type :erect ;
       :stem!:height [ :value!:start 30.0 ; :value!:end 50.0 ; :value!:units "m" ] ;
       :bark!:color :grey ;
       :bark!:ridges :irregular ;
       :foliage!:seasonality :evergreen ;
       :foliage!:type :needle ;
       :foliage!:arrangement :alternate ;
       :foliage!:length [ :value!:start 1.0 ; :value!:end 3.0 ; :value!:units "cm" ] ;
       :foliage!:width [ :value!:start 0.2 ; :value!:end 0.3 ; :value!:units "cm" ] ;
       :foliage!:color :green ;
       :foliage!:spiney :FALSE ;
       :flower [ :gender :male ; :inflorescence :catkin ; :sense :straight ; :color :brown ] ;
       :flower [ :gender :male ; :inflorescence :catkin ; :sense :straight ; :color :yellow ] ;
       :flower [ :gender :female ; :inflorescence :catkin ; :sense :straight ; :color :pink ] ;
       :fruit [ :kind :cone ; :color :brown ; ] ;
}
:is-a :botanical-classification ;
:source [
   :uri <http://originating/site> ;
   :name "John Doe" ;
   :data-collection-date "2005-01-01" ;
] ;
:transcribed-by "Al Nonymous" ;
:transcription-date "2010-09-01" .

Я хочу иметь возможность загрузить это (и, возможно, тысячи подобных записей) в базу данных, чтобы я мог выполнять произвольные запросы, например: "Кто расшифровал записи, содержащие общие испанские имена в 2010 году?" или "Какой средний цвет цветка ассоциируется с родом X?"

Это практично в настоящее время делать с текущими инструментами семантической сети и N3?

1 ответ

Решение

Основная проблема в том, что N3 всегда был чем-то вроде экспериментальной нотации - полный язык никогда не был широко реализован. Диаграмма в этом документе довольно информативна: ваш пример использует графические литералы, и они лежат вне любого из широко реализованных подмножеств N3. Теперь, когда именованные графы используются более широко, было бы возможно выразить ту же информацию в большинстве систем RDF, включая Jena, но не путем непосредственного анализа вашего входного файла.

Если бы это был я, я бы хотел написать этап преобразования внешнего интерфейса, возможно, с использованием языка, который хорошо разбирается в строках и шаблонах, например, Ruby. Затем вы можете перевести свои входные файлы в форму, которую могут обрабатывать стандартные процессоры RDF. Например, графический литерал, который обозначает операторы, сделанные "Al Nonymous", может быть преобразован в bNode, обозначающий действие Al, утверждающего эту классификацию. В качестве альтернативы, вы можете извлечь каждый граф из его литерала и сохранить его в файл с именем синтезированного графа, тем самым сохранив структуру вложенных графов, которая у вас есть в настоящее время. Точно так же property!path нотация может быть легко переписана в стандартную RDF за счет того, что она немного более многословна.

В качестве альтернативы, попросите вашего поставщика данных предоставить вам вывод в более удобной для обработки форме!

Другие вопросы по тегам