Cross Reference: /hets/OWL2/ColimSign.hs
ColimSign.hs revision 852bd6145634dc2832b61c44678fe539bc1682d5
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
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 ManceMaintainer : mcodescu@informatik.uni-bremen.de
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel ManceStability : provisional
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel MancePortability : non-portable
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
68ace74bf7cd65cb7eb7e19ffe373520fc520e0cFelix 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 (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 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 ]
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance morMaps = Map.fromAscList $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance map (\ x -> (x, morFun x)) $ nodes graph
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 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 }
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
852bd6145634dc2832b61c44678fe539bc1682d5Christian Maeder addIntAsSuffix (q, i) = q { localPart = localPart q ++ show i }
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel MancegetEntityTypeMap :: EntityType -> (Int, OWLMorphism)
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance -> (Int, Map.Map QName QName)
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel MancegetEntityTypeMap e (i, phi) = let
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance f = Map.filterWithKey
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance (\ (Entity x _) _ -> x == e) $ mmaps phi
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance in (i, Map.fromList $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance map (\ (Entity _ x, y) -> (x, y)) $
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance Map.toAscList f)
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel MancesetEntityTypeMap :: EntityType -> Map.Map QName QName
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel Mance -> Map.Map Entity QName
f501e448d92c4d819b6bfc1d6487da76cf22528cFelix Gabriel MancesetEntityTypeMap = Map.mapKeys . Entity