null
ColimSign.hs revision f501e448d92c4d819b6bfc1d6487da76cf22528c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder{- |
32607d06fe7826eb0711c19d348ee4e395f2577aChristian MaederModule : $Header$
32607d06fe7826eb0711c19d348ee4e395f2577aChristian MaederDescription : OWL signatures colimits
32607d06fe7826eb0711c19d348ee4e395f2577aChristian MaederCopyright : (c) Mihai Codescu, and Uni Bremen 2009
32607d06fe7826eb0711c19d348ee4e395f2577aChristian MaederLicense : GPLv2 or higher, see LICENSE.txt
32607d06fe7826eb0711c19d348ee4e395f2577aChristian MaederMaintainer : mcodescu@informatik.uni-bremen.de
32607d06fe7826eb0711c19d348ee4e395f2577aChristian MaederStability : provisional
32607d06fe7826eb0711c19d348ee4e395f2577aChristian MaederPortability : non-portable
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder
32607d06fe7826eb0711c19d348ee4e395f2577aChristian MaederOWL signature colimits, computed component-wise.
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder-}
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maedermodule OWL2.ColimSign where
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maederimport OWL2.Sign
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maederimport OWL2.Morphism
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maederimport OWL2.AS
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maederimport Common.SetColimit
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maederimport Common.Lib.Graph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maederimport Data.Graph.Inductive.Graph as Graph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maederimport qualified Data.Map as Map
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder
32607d06fe7826eb0711c19d348ee4e395f2577aChristian MaedersignColimit :: Gr Sign (Int, OWLMorphism) ->
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder (Sign, Map.Map Int OWLMorphism)
32607d06fe7826eb0711c19d348ee4e395f2577aChristian MaedersignColimit graph = let
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder conGraph = emap (getEntityTypeMap Class) $ nmap concepts graph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder dataGraph = emap (getEntityTypeMap Datatype) $ nmap datatypes graph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder indGraph = emap (getEntityTypeMap NamedIndividual) $ nmap individuals graph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder objGraph = emap (getEntityTypeMap ObjectProperty) $
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder nmap objectProperties graph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder dataPropGraph = emap (getEntityTypeMap DataProperty) $
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder nmap dataProperties graph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder (con, funC) = addIntToSymbols $ computeColimitSet conGraph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder (dat, funD) = addIntToSymbols $ computeColimitSet dataGraph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder (ind, funI) = addIntToSymbols $ computeColimitSet indGraph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder (obj, funO) = addIntToSymbols $ computeColimitSet objGraph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder (dp, funDP) = addIntToSymbols $ computeColimitSet dataPropGraph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder morFun i = foldl Map.union Map.empty
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder [ setEntityTypeMap Class $
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder Map.findWithDefault (error "maps") i funC,
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder setEntityTypeMap Datatype $
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder Map.findWithDefault (error "maps") i funD,
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder setEntityTypeMap NamedIndividual $
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder Map.findWithDefault (error "maps") i funI,
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder setEntityTypeMap ObjectProperty $
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder Map.findWithDefault (error "maps") i funO,
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder setEntityTypeMap DataProperty $
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder Map.findWithDefault (error "maps") i funDP
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder ]
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder morMaps = Map.fromAscList $
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder map (\ x -> (x, morFun x)) $ nodes graph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder nameMap = foldl Map.union Map.empty $
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder map (\ (_, l) -> prefixMap l) $ labNodes graph
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder colimSign = emptySign {
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder concepts = con,
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder datatypes = dat,
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder objectProperties = obj,
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder dataProperties = dp,
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder individuals = ind,
32607d06fe7826eb0711c19d348ee4e395f2577aChristian Maeder prefixMap = nameMap
}
colimMor = Map.fromAscList $
map (\ (i, ssig) -> let
mm = Map.findWithDefault (error "mor") i morMaps
om = OWLMorphism {
osource = ssig,
otarget = colimSign,
mmaps = mm
}
in (i, om)
) $ labNodes graph
in (colimSign, colimMor)
instance SymbolName QName where
addIntAsSuffix (QN p l b n, i) = QN p (l ++ show i) b n
getEntityTypeMap :: EntityType -> (Int, OWLMorphism)
-> (Int, Map.Map QName QName)
getEntityTypeMap e (i, phi) = let
f = Map.filterWithKey
(\ (Entity x _) _ -> x == e) $ mmaps phi
in (i, Map.fromList $
map (\ (Entity _ x, y) -> (x, y)) $
Map.toAscList f)
setEntityTypeMap :: EntityType -> Map.Map QName QName
-> Map.Map Entity QName
setEntityTypeMap = Map.mapKeys . Entity