Cross Reference: /hets/OWL2/ColimSign.hs
ColimSign.hs revision 51be3b318544e318688bc3f8ee41e21b765dba61
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance{- |
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel ManceModule : $Header$
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel ManceDescription : OWL signatures colimits
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel ManceCopyright : (c) Mihai Codescu, and Uni Bremen 2009
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel ManceLicense : GPLv2 or higher, see LICENSE.txt
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel ManceMaintainer : mcodescu@informatik.uni-bremen.de
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel ManceStability : provisional
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel MancePortability : non-portable
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel ManceOWL2 signature colimits, computed component-wise.
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance-}
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mancemodule OWL2.ColimSign where
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Manceimport OWL2.Sign
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Manceimport OWL2.Morphism
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Manceimport OWL2.AS
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Manceimport Common.SetColimit
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Manceimport Common.Lib.Graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Manceimport Data.Graph.Inductive.Graph as Graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Manceimport qualified Data.Map as Map
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel MancesignColimit :: Gr Sign (Int, OWLMorphism) ->
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance (Sign, Map.Map Int OWLMorphism)
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel MancesignColimit graph = let
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance conGraph = emap (getEntityTypeMap Class) $ nmap concepts graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance dataGraph = emap (getEntityTypeMap Datatype) $ nmap datatypes graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance indGraph = emap (getEntityTypeMap NamedIndividual) $ nmap individuals graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance objGraph = emap (getEntityTypeMap ObjectProperty) $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance nmap objectProperties graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance dataPropGraph = emap (getEntityTypeMap DataProperty) $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance nmap dataProperties graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance annPropGraph = emap (getEntityTypeMap AnnotationProperty) $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance nmap annotationRoles graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance _prefixGraph = emap getPrefixMap
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance $ nmap (Map.keysSet . toQName . prefixMap) graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance (con, funC) = addIntToSymbols $ computeColimitSet conGraph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance (dat, funD) = addIntToSymbols $ computeColimitSet dataGraph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance (ind, funI) = addIntToSymbols $ computeColimitSet indGraph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance (obj, funO) = addIntToSymbols $ computeColimitSet objGraph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance (dp, funDP) = addIntToSymbols $ computeColimitSet dataPropGraph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance (ap, funAP) = addIntToSymbols $ computeColimitSet annPropGraph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance -- (pf, funP) = addIntToSymbols $ computeColimitSet prefixGraph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance morFun i = foldl Map.union Map.empty
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance [ setEntityTypeMap Class $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance Map.findWithDefault (error "maps") i funC,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance setEntityTypeMap Datatype $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance Map.findWithDefault (error "maps") i funD,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance setEntityTypeMap NamedIndividual $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance Map.findWithDefault (error "maps") i funI,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance setEntityTypeMap ObjectProperty $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance Map.findWithDefault (error "maps") i funO,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance setEntityTypeMap DataProperty $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance Map.findWithDefault (error "maps") i funDP,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance setEntityTypeMap AnnotationProperty $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance Map.findWithDefault (error "maps") i funAP
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance ]
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance morMaps = Map.fromAscList $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance map (\ x -> (x, morFun x)) $ nodes graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance nameMap = foldl Map.union Map.empty $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance map (\ (_, l) -> prefixMap l) $ labNodes graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance colimSign = emptySign {
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance concepts = con,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance datatypes = dat,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance objectProperties = obj,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance dataProperties = dp,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance individuals = ind,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance annotationRoles = ap,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance prefixMap = nameMap
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance }
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance colimMor = Map.fromAscList $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance map (\ (i, ssig) -> let
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance mm = Map.findWithDefault (error "mor") i morMaps
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance om = OWLMorphism {
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance osource = ssig,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance otarget = colimSign,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance mmaps = mm,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance pmap = Map.empty
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance }
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance in (i, om)
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance ) $ labNodes graph
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance in (colimSign, colimMor)
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Manceinstance SymbolName QName where
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance addIntAsSuffix (q, i) = q { namePrefix = show i,
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance expandedIRI = expandedIRI q ++ show i
}
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
getPrefixMap :: (Int, OWLMorphism) -> (Int, Map.Map QName QName)
getPrefixMap (i, phi) = let
f = pmap phi
in (i, Map.fromList $
map (\ (x, y) -> (mkQName x, mkQName y)) $
Map.toAscList f)
toQName :: PrefixMap -> Map.Map QName String
toQName pm = Map.fromList $ map (\ (p, s) -> (mkQName p, s)) $ Map.toList pm