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 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
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederOWL2 signature colimits, computed component-wise.
4fb19f237193a3bd6778f8aee3b6dd8da5856665Christian Maederimport qualified Data.Map as Map
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 [ 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 map (\ x -> (x, morFun x)) $ nodes graph
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
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 ) $ labNodes graph
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder in (colimSign, colimMor)
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maederinstance SymbolName QName where
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian Maeder addIntAsSuffix (QN p l b n, i) = QN p (l ++ show i) b n
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaedergetEntityTypeMap :: EntityType -> (Int, OWLMorphism)
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder -> (Int, Map.Map QName QName)
e95bbf384f5cbcb7eb23286d5f15dffbd471db17Christian MaedergetEntityTypeMap e (i, phi) = let
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder (\ (Entity x _) _ -> x == e) $ mmaps phi
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder map (\ (Entity _ x, y) -> (x, y)) $
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian MaedersetEntityTypeMap :: EntityType -> Map.Map QName QName
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder -> Map.Map Entity QName
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian MaedersetEntityTypeMap = Map.mapKeys . Entity