Существует ли элегантный способ хранения графа онтологий и определений / данных, связанных с узлами? - PullRequest
4 голосов
/ 27 сентября 2010

Я написал простой модуль для хранения и управления онтологией, которая предоставляется в виде плоского файла с использованием Perl. Для этого я использую Графический модуль , что отлично.

Одна проблема, с которой мне приходится сталкиваться, это как сохранить текстовые определения для вершин в онтологии. У каждого термина есть небольшое текстовое описание, которое я хочу сохранить и получить. На данный момент, поскольку Graph не поддерживает это напрямую, я использую внутренний хэш.

Мне было интересно, есть ли более элегантный способ иметь единую структуру данных для хранения как графа онтологии , так и определений / данных, связанных с узлами?

Ответы [ 2 ]

8 голосов
/ 27 сентября 2010

На ум приходят следующие вещи:

  • если это просто "простая онтология", то есть таксономия, или даже проще, вложенный список терминов, то достаточно простого YAML файла. Однажды десериализованный в хеш Perl, вы вложили любое вложение в хэши / массивы.

  • если вы хотите, чтобы ваша онтология (словарь, подтермы, супертермы) была больше Вы можете захотеть взглянуть на RDF :: SKOS . SKOS - это стандарт W3C для простых (нелогических) онтологий.

  • если вы дерзаете, вы также можете посмотреть TM ( тематические карты ). Оно имеет «функциональность» аналогична SKOS, но является стандартом ISO (не W3C).

  • если вы ожидаете, что ваша онтология будет расти / развиваться, а также содержать простые логические утверждения (см. Описание логики ), вы можете посмотреть на один из пакетов RDF. я использовали RDF :: Redland , но также RDF :: Simple или что Toby и Kjetil делают, являются стоит попробовать. Много активности в последнее время.

  • , если ваша онтология БОЛЬШАЯ, или вы хотите хранить МНОЖЕСТВО данных экземпляра вместе Ваша онтология, тогда RDF :: AllegroGraph - путь. Но это использует внешний сервер. Серьезное программное обеспечение.

Примечание к отрыву: Не все, что похоже на график, является одним. Ни тематические карты, ни RDF не являются графические структуры на самом деле.

4 голосов
/ 27 сентября 2010

Модуль Graph позволяет присоединять атрибуты к вершинам и ребрам.Это то, что вы имеете в виду, когда говорите, что в настоящее время используете внутренний хэш?Если нет, возможно, это поможет:

use Graph;
my $g = Graph->new;

my ($v1, $v2) = qw(A B);
$g->add_edge($v1, $v2);

$g->set_vertex_attribute($_, 'desc', "Vertex $_") for $v1, $v2;
print $g->get_vertex_attribute($_, 'desc'), "\n"  for $v1, $v2;
...