我已經編寫了一個簡單的模塊來存儲和操作使用Perl在平面文件中提供的本體。爲此,我使用了優秀的Graph module。是否有一種優雅的方式來存儲本體圖和與節點相關的定義/數據?
我不得不處理的一個問題是如何在本體中存儲頂點的文本定義。每個術語都有一個我想要存儲和檢索的小文本描述。目前,由於Graph不直接支持這個,我使用內部散列。
我想知道,是否有一個更優雅的方式,有一個單一的數據結構來存儲本體圖和與節點相關的定義/數據?
我已經編寫了一個簡單的模塊來存儲和操作使用Perl在平面文件中提供的本體。爲此,我使用了優秀的Graph module。是否有一種優雅的方式來存儲本體圖和與節點相關的定義/數據?
我不得不處理的一個問題是如何在本體中存儲頂點的文本定義。每個術語都有一個我想要存儲和檢索的小文本描述。目前,由於Graph不直接支持這個,我使用內部散列。
我想知道,是否有一個更優雅的方式,有一個單一的數據結構來存儲本體圖和與節點相關的定義/數據?
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;
以下的事情浮現在腦海中:
如果這僅僅是一個「簡單的本體論」,即一個分類,或者更簡單,一個 嵌套列表的條款,那麼 一個簡單的YAML文件聽起來就足夠了。一旦反序列化爲Perl散列, 您已將任何嵌套映射到散列/數組。
如果你想讓你的本體(字典,子條目,超類)更加標準化,你可以看看RDF::SKOS。對於簡單(非邏輯)的本體,SKOS是W3C標準 。
如果您大膽,您可能還想看看TM(topic maps)。它具有與SKOS類似的「功能」 ,但是是ISO(不是W3C)標準。如果您希望您的本體可以增長/發展,並且也可以容納簡單的邏輯語句 (請參閱Description Logics),您可能需要查看其中一個RDF軟件包。我 已使用RDF::Redland,但也RDF::Simple或什麼Toby和Kjetil做的,是 值得嘗試。最近有很多活動。
如果你的本體很大,或者你想存儲大量的實例數據和 你的本體,那麼RDF::AllegroGraph是要走的路。但是,它使用外部 服務器。嚴重的軟件。
注意:並非所有看起來像圖的東西都是一樣。 Topic圖或RDF實際上都不是 圖結構。
生物信息學或語義Web? – daxim 2010-09-27 12:45:27