我编程在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