2011-11-07 77 views
4

介绍Haskell的数据结构SKOS(语义网)

我编程在Haskell语义Web应用程序。

使用hsparql http://hackage.haskell.org/package/hsparql我可以访问我的Tripple商店。目前我使用http://4store.org/(主要是因为安装简单)。我使用snap http://snapframework.com/来做servlet编程(Yesod非常酷!)。

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

链接上SKOS:

基本上,SKOS概念是一个类别。它有一个URL(作为ID的一种) 和一个标签。进一步的Skos概念可以具有用“更宽”和“更窄”定义的子概念。

例如,在我的书签中,SKOS的概念是“所有书签”,子概念 “haskell书签”。这两个概念都有一个URL(例如ID)和一个标签。 此外,“haskell书签”有一个更广泛的概念是“所有书签”的关系。

我的问题

我需要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概念(例如类别),名为“编程书签”和“我的重要书签”。

唯一的解决方案,我可以在那一刻想到的是使用:

  • 有向图的的SKOS概念
  • 的二元关系“更广泛”(但我不是“更广泛”的关系知道是否有良好的哈斯克尔支持)
  • 没有中间数据结构和我的所有功能查询RDF TRIPPLE商店
+1

我想你问一个概念性的问题在这里,而这仅仅是有关语法,所以它不是一个真正的答案,但...'addSubConcepts'可以显著用记录语法改进: 'addSubConcepts concept subList = concept {subConcepts = subList}'。取决于你如何使用它,它可能不值得写下这个功能。 –

+0

感谢您的语法改进。 – mrsteve

+0

你为什么认为你的数据结构不好? – jmg

回答

1

而不是试图直接存储双向结构,为什么不使用标准的Graph方法,并存储一个包含这两个概念集合的元组,并且包含概念之间的关系集合?

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

+0

感谢指向fgl的指针。 – mrsteve