4

我编写了一个简单的模块来存储和操作使用 Perl 在平面文件中提供的本体。为此,我使用了非常棒的Graph 模块。

我必须处理的一个问题是如何在本体中存储顶点的文本定义。每个术语都有一个我想要存储和检索的小文本描述。目前,由于 Graph 不直接支持这一点,我使用内部哈希。

我想知道,是否有一种更优雅的方式来使用单一数据结构来存储本体图与节点关联的定义/数据?

4

2 回答 2

8

想到以下几点:

  • 如果这只是一个“简单的本体”,即一个分类,或者更简单,一个嵌套的术语列表,那么一个简单的YAML文件就足够了。一旦反序列化为 Perl 哈希,您就可以将任何嵌套映射到哈希/数组中。

  • 如果您希望您的本体(字典、子术语、超术语)更加标准化,您可能需要查看RDF::SKOSSKOS是简单(非逻辑)本体的 W3C 标准。

  • 如果你胆子大,你可能还想看看TM主题图)。它具有与 SKOS 类似的“功能”,但它是 ISO(不是 W3C)标准。

  • 如果您希望您的本体能够增长/发展并且还包含简单的逻辑语句(请参阅描述逻辑),您可能需要查看其中一个 RDF 包。我使用过RDF::Redland,但RDF::SimpleTobyKjetil所做的也值得一试。最近活动很多。

  • 如果你的本体很大,或者你想在你的本体旁边存储很多实例数据,那么RDF::AllegroGraph是要走的路。但这使用外部服务器。严肃的软件。

临别笔记:并非所有看起来像图表的东西都是一体的。主题图和 RDF 实际上都不是图结构。

于 2010-09-27T17:42:20.263 回答
4

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;
于 2010-09-27T12:45:38.020 回答