2011-11-07 73 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