我編程在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商店
我想你問一個概念性的問題在這裏,而這僅僅是有關語法,所以它不是一個真正的答案,但...'addSubConcepts'可以顯著用記錄語法改進: 'addSubConcepts concept subList = concept {subConcepts = subList}'。取決於你如何使用它,它可能不值得寫下這個功能。 –
感謝您的語法改進。 – mrsteve
你爲什麼認爲你的數據結構不好? – jmg