Cross Reference: /hets/OWL2/ColimSign.hs
ColimSign.hs revision 68ace74bf7cd65cb7eb7e19ffe373520fc520e0c
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
c797f343be2f3619bb1f5569753166ec49d27bdbChristian Maeder{- |
c797f343be2f3619bb1f5569753166ec49d27bdbChristian MaederModule : $Header$
81d182b21020b815887e9057959228546cf61b6bChristian MaederDescription : OWL signatures colimits
10397bcc134edbcfbe3ae2c7ea4c6080036aae22Christian MaederCopyright : (c) Mihai Codescu, and Uni Bremen 2009
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
c797f343be2f3619bb1f5569753166ec49d27bdbChristian MaederMaintainer : mcodescu@informatik.uni-bremen.de
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederStability : provisional
c797f343be2f3619bb1f5569753166ec49d27bdbChristian MaederPortability : non-portable
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederOWL2 signature colimits, computed component-wise.
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder-}
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maedermodule OWL2.ColimSign where
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maederimport OWL2.Sign
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maederimport OWL2.Morphism
59c301c268f79cfde0a4c30a2c572a368db98da5Christian Maederimport OWL2.AS
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maederimport Common.SetColimit
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maederimport Common.Lib.Graph
23a00c966f2aa8da525d7a7c51933c99964426c0Christian Maeder
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maederimport Data.Graph.Inductive.Graph as Graph
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maederimport qualified Data.Map as Map
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian MaedersignColimit :: Gr Sign (Int, OWLMorphism) ->
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder (Sign, Map.Map Int OWLMorphism)
f42bcc750a9a02cb4f753b70679f9aacf1b338d7Christian MaedersignColimit graph = let
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder conGraph = emap (getEntityTypeMap Class) $ nmap concepts graph
10397bcc134edbcfbe3ae2c7ea4c6080036aae22Christian Maeder dataGraph = emap (getEntityTypeMap Datatype) $ nmap datatypes graph
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian Maeder indGraph = emap (getEntityTypeMap NamedIndividual) $ nmap individuals graph
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder objGraph = emap (getEntityTypeMap ObjectProperty) $
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder nmap objectProperties graph
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder dataPropGraph = emap (getEntityTypeMap DataProperty) $
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder nmap dataProperties graph
89054b2b95a3f92e78324dc852f3d34704e2ca49Christian Maeder (con, funC) = addIntToSymbols $ computeColimitSet conGraph
b984ff0ba75221f64451c1e69b3977967d4e99a1Christian Maeder (dat, funD) = addIntToSymbols $ computeColimitSet dataGraph
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder (ind, funI) = addIntToSymbols $ computeColimitSet indGraph
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder (obj, funO) = addIntToSymbols $ computeColimitSet objGraph
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder (dp, funDP) = addIntToSymbols $ computeColimitSet dataPropGraph
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder morFun i = foldl Map.union Map.empty
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder [ setEntityTypeMap Class $
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder Map.findWithDefault (error "maps") i funC,
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder setEntityTypeMap Datatype $
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder Map.findWithDefault (error "maps") i funD,
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder setEntityTypeMap NamedIndividual $
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder Map.findWithDefault (error "maps") i funI,
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder setEntityTypeMap ObjectProperty $
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder Map.findWithDefault (error "maps") i funO,
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder setEntityTypeMap DataProperty $
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder Map.findWithDefault (error "maps") i funDP
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder ]
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder morMaps = Map.fromAscList $
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder map (\ x -> (x, morFun x)) $ nodes graph
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder nameMap = foldl Map.union Map.empty $
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder map (\ (_, l) -> prefixMap l) $ labNodes graph
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder colimSign = emptySign {
462ec4b2fa3e0e788eb60dcb4aebc518298f342cChristian Maeder concepts = con,
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maeder datatypes = dat,
ee6c748be810b24e3c70ffd74f291c7394e389f5Christian Maeder objectProperties = obj,
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder dataProperties = dp,
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maeder individuals = ind,
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder prefixMap = nameMap
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder }
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder colimMor = Map.fromAscList $
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder map (\ (i, ssig) -> let
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder mm = Map.findWithDefault (error "mor") i morMaps
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder om = OWLMorphism {
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder osource = ssig,
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder otarget = colimSign,
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder mmaps = mm
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder }
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder in (i, om)
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder ) $ labNodes graph
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder in (colimSign, colimMor)
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maederinstance SymbolName QName where
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder addIntAsSuffix (QN p l b n, i) = QN p (l ++ show i) b n
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaedergetEntityTypeMap :: EntityType -> (Int, OWLMorphism)
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder -> (Int, Map.Map QName QName)
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaedergetEntityTypeMap e (i, phi) = let
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder f = Map.filterWithKey
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder (\ (Entity x _) _ -> x == e) $ mmaps phi
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder in (i, Map.fromList $
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder map (\ (Entity _ x, y) -> (x, y)) $
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder Map.toAscList f)
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian MaedersetEntityTypeMap :: EntityType -> Map.Map QName QName
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder -> Map.Map Entity QName
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian MaedersetEntityTypeMap = Map.mapKeys . Entity
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder