用于SKOS(语义网)的Haskell数据结构



简介

我正在haskell中编程一个语义web应用程序。

使用hsparqlhttp://hackage.haskell.org/package/hsparql我可以访问我的Tripple商店。当前我使用http://4store.org/(主要是因为它很容易安装(。我使用快照http://snapframework.com/做servlet编程(Yesod也很酷!!(。

目前,我使用SKOS来表示RDF中的书签类别。

SKOS:上的链接

  • http://www.w3.org/TR/skos-reference/
  • http://www.athenaeurope.org/athenawiki/index.php/SKOS

基本上,Skos概念车是一个类别。它有一个URL(作为一种ID(和标签。进一步的Skos概念可以有子概念,定义为"更广泛"one_answers"更窄"。

例如,在我的书签中,有一个SKOS概念"所有书签",带有一个子概念"haskell书签"。这两个概念都有一个URL(例如ID(和一个Label。"haskell bookmarks"还有一个关系,即更广泛的概念是"所有书签"。

我的问题

我需要一个用于SKOS的haskell中的数据结构。

我现在的是:

-- Type Aliases.
type Url = String
type Label = String

-- Date Structure.
data SkosConcept = SkosConcept {
      url :: Url
    , label :: Label
    , subConcepts :: [SkosConcept]
    } deriving (Show)

我认为这不是一个好办法,但我不知道更好的办法。

而且将来数据结构需要扩展到多个标签,以及存储相关概念的方法。。。

此外,一些概念可能没有任何子概念。

有关于如何改进数据结构或"做对"的建议吗?

======编辑:======

问题是,一个skos概念可能有多个更广泛的skos概念。因此,我的"haskell书签"可以有两个更广泛的skos概念(例如类别(,分别命名为"编程书签"one_answers"我的重要书签"。

目前我能想到的唯一解决方案是使用:

  • skos概念广义关系的有向图
  • 二元关系"更广泛"(但我不知道是否有好的haskell支持(
  • 没有中间数据结构,我的所有函数都查询RDF Tripple Store

与其尝试直接存储双向结构,为什么不使用标准的Graph方法,并存储一个包含概念集和概念之间关系集的元组呢?

cf:http://hackage.haskell.org/package/fgl

最新更新