我编写了一个简单的模块来存储和操作使用Perl在平面文件中提供的本体。为此,我使用优秀的Graph module。
我必须处理的一个问题是如何在本体中存储顶点的文本定义。每个术语都有一个我要存储和检索的小文本描述。目前,由于Graph不直接支持,我使用内部哈希。
我想知道,有一种更优雅的方法是使用单一数据结构来存储本体图和与节点相关的定义/数据吗?
答案 0 :(得分:8)
以下事情浮现在脑海中:
如果这只是一个“简单的本体论”,即分类学,甚至更简单,a 然后是嵌套的术语列表 一个简单的YAML文件听起来就足够了。一旦反序列化为Perl哈希, 您已将任何嵌套映射到哈希/数组。
如果你想要你的本体(字典,子字符,超级字母)更多 标准化你可能想看看RDF::SKOS。 SKOS是W3C标准 简单(非逻辑)本体。
如果您大胆,您可能还想查看TM(topic maps)。它有一个 与SKOS类似的“功能”,但是ISO(不是W3C)标准。
如果您希望您的本体增长/发展,并且还包含简单的逻辑语句 (参见Description Logics),您可能希望查看其中一个RDF包。一世 已使用RDF::Redland,但RDF::Simple或Toby和Kjetil所做的是 值得尝试。最近有很多活动。
如果您的本体是大的,或者您想要存储大量的实例数据 你的本体论,然后RDF::AllegroGraph是要走的路。但那使用外部 服务器。认真的软件。
分手注意:并非所有看起来像图形的东西都是一个。主题地图和RDF都不是 实际上是图形结构。
答案 1 :(得分:4)
Graph
模块允许您将attributes附加到顶点和边缘。当你说你正在使用内部哈希时,这就是你的意思吗?如果没有,也许这会有所帮助:
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;