Morphism.hs revision fc05327b875b5723b6c17849b83477f29ec12c90
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian Maeder{- |
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian MaederModule : $Header$
09249711700a6acbc40a2e337688b434d7aafa28Christian MaederDescription : OWL Morphisms
76647324ed70f33b95a881b536d883daccf9568dChristian MaederCopyright : (c) Dominik Luecke, 2008
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederMaintainer : luecke@informatik.uni-bremen.de
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian MaederStability : provisional
76647324ed70f33b95a881b536d883daccf9568dChristian MaederPortability : portable
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederMorphisms for OWL
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder-}
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maedermodule OWL2.Morphism
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maeder ( OWLMorphism (..)
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder , isOWLInclusion
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maeder , inclOWLMorphism
950e053ba55ac9c7d9c26a1ab48bd00202b29511Christian Maeder , legalMor
0a39036fa485579a7b7c81cdd44a412392571927Christian Maeder , composeMor
10b02b2343246df6773585636fe3ddbefa3b6a1bChristian Maeder , cogeneratedSign
10b02b2343246df6773585636fe3ddbefa3b6a1bChristian Maeder , generatedSign
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maeder , matchesSym
d48085f765fca838c1d972d2123601997174583dChristian Maeder , statSymbItems
10b02b2343246df6773585636fe3ddbefa3b6a1bChristian Maeder , statSymbMapItems
10b02b2343246df6773585636fe3ddbefa3b6a1bChristian Maeder , inducedFromMor
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder , symMapOf
0a39036fa485579a7b7c81cdd44a412392571927Christian Maeder , mapSen
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian Maeder ) where
d48085f765fca838c1d972d2123601997174583dChristian Maeder
76647324ed70f33b95a881b536d883daccf9568dChristian Maederimport OWL2.AS
d48085f765fca838c1d972d2123601997174583dChristian Maederimport OWL2.MS
d48085f765fca838c1d972d2123601997174583dChristian Maederimport OWL2.Sign
76647324ed70f33b95a881b536d883daccf9568dChristian Maederimport OWL2.ManchesterPrint ()
d48085f765fca838c1d972d2123601997174583dChristian Maederimport OWL2.StaticAnalysis
05ae87b9efa19655024b0b6ac344d250b96567cdChristian Maederimport OWL2.Symbols
d48085f765fca838c1d972d2123601997174583dChristian Maederimport OWL2.Function
d48085f765fca838c1d972d2123601997174583dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian Maederimport Common.DocUtils
d48085f765fca838c1d972d2123601997174583dChristian Maederimport Common.Doc
d48085f765fca838c1d972d2123601997174583dChristian Maederimport Common.Result
a39a820684c1974350f46593025e0bb279f41bc6Christian Maederimport Common.Utils (composeMap)
a39a820684c1974350f46593025e0bb279f41bc6Christian Maederimport Common.Lib.State (execState)
72b9099aeec0762bae4546db3bc4b48721027bf4Christian Maederimport Common.Lib.MapSet (setToMap)
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder
76647324ed70f33b95a881b536d883daccf9568dChristian Maederimport Control.Monad
d48085f765fca838c1d972d2123601997174583dChristian Maederimport Data.Maybe
d48085f765fca838c1d972d2123601997174583dChristian Maederimport qualified Data.Map as Map
d48085f765fca838c1d972d2123601997174583dChristian Maederimport qualified Data.Set as Set
d48085f765fca838c1d972d2123601997174583dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian Maederdata OWLMorphism = OWLMorphism
05ae87b9efa19655024b0b6ac344d250b96567cdChristian Maeder { osource :: Sign
d48085f765fca838c1d972d2123601997174583dChristian Maeder , otarget :: Sign
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder , mmaps :: Map.Map Entity IRI
a716971174535184da7713ed308423e355a4aa66Christian Maeder , pmap :: AMap
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder } deriving (Show, Eq, Ord)
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder
5e5c3fbbf8c22b883d551d83429b9f8d8041f1e0Christian MaederinclOWLMorphism :: Sign -> Sign -> OWLMorphism
feab655b0275874012c3cf9859064c177860cc70Christian MaederinclOWLMorphism s t = OWLMorphism
f2c2b420e386a90d940c758c631d16f12952d2b7Christian Maeder { osource = s
f2c2b420e386a90d940c758c631d16f12952d2b7Christian Maeder , otarget = t
f2c2b420e386a90d940c758c631d16f12952d2b7Christian Maeder , pmap = Map.empty
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder , mmaps = Map.empty }
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder
a716971174535184da7713ed308423e355a4aa66Christian MaederisOWLInclusion :: OWLMorphism -> Bool
a716971174535184da7713ed308423e355a4aa66Christian MaederisOWLInclusion m = Map.null (pmap m)
5e5c3fbbf8c22b883d551d83429b9f8d8041f1e0Christian Maeder && Map.null (mmaps m) && isSubSign (osource m) (otarget m)
a716971174535184da7713ed308423e355a4aa66Christian Maeder
a716971174535184da7713ed308423e355a4aa66Christian MaedersymMap :: Map.Map Entity IRI -> Map.Map Entity Entity
a716971174535184da7713ed308423e355a4aa66Christian MaedersymMap = Map.mapWithKey (\ (Entity ty _) -> Entity ty)
a716971174535184da7713ed308423e355a4aa66Christian Maeder
5e5c3fbbf8c22b883d551d83429b9f8d8041f1e0Christian MaederinducedElems :: Map.Map Entity IRI -> [Entity]
793945d4ac7c0f22760589c87af8e71427c76118Christian MaederinducedElems = Map.elems . symMap
ee6c748be810b24e3c70ffd74f291c7394e389f5Christian Maeder
ee6c748be810b24e3c70ffd74f291c7394e389f5Christian MaederinducedSign :: Map.Map Entity IRI -> AMap -> Sign -> Sign
9884c7cef7e5a2c8595d5ef8c7d32b9b44a3fad8Christian MaederinducedSign m t s =
9884c7cef7e5a2c8595d5ef8c7d32b9b44a3fad8Christian Maeder let new = execState (do
fd2dcd5c071e938c07338fd3a32296819b8a2333Christian Maeder mapM_ (modEntity Set.delete) $ Map.keys m
fd2dcd5c071e938c07338fd3a32296819b8a2333Christian Maeder mapM_ (modEntity Set.insert) $ inducedElems m) s
fd2dcd5c071e938c07338fd3a32296819b8a2333Christian Maeder in function Rename t new
fd2dcd5c071e938c07338fd3a32296819b8a2333Christian Maeder
9884c7cef7e5a2c8595d5ef8c7d32b9b44a3fad8Christian MaederinducedPref :: String -> String -> Sign -> (Map.Map Entity IRI, AMap)
ee6c748be810b24e3c70ffd74f291c7394e389f5Christian Maeder -> (Map.Map Entity IRI, AMap)
ee6c748be810b24e3c70ffd74f291c7394e389f5Christian MaederinducedPref v u sig (m, t) =
ee6c748be810b24e3c70ffd74f291c7394e389f5Christian Maeder let pm = prefixMap sig
ee6c748be810b24e3c70ffd74f291c7394e389f5Christian Maeder in if Set.member v $ Map.keysSet pm
ee6c748be810b24e3c70ffd74f291c7394e389f5Christian Maeder then if u == v then (m, t) else (m, Map.insert v u t)
ee6c748be810b24e3c70ffd74f291c7394e389f5Christian Maeder else error $ "unknown symbol: " ++ showDoc v "\n" ++ shows sig ""
ee6c748be810b24e3c70ffd74f291c7394e389f5Christian Maeder
793945d4ac7c0f22760589c87af8e71427c76118Christian MaederinducedFromMor :: Map.Map RawSymb RawSymb -> Sign -> Result OWLMorphism
d48085f765fca838c1d972d2123601997174583dChristian MaederinducedFromMor rm sig = do
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder let syms = symOf sig
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder (mm, tm) <- foldM (\ (m, t) p -> case p of
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder (ASymbol s@(Entity _ v), ASymbol (Entity _ u)) ->
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder if Set.member s syms
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder then return $ if u == v then (m, t) else (Map.insert s u m, t)
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder else fail $ "unknown symbol: " ++ showDoc s "\n" ++ shows sig ""
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder (AnUri v, AnUri u) -> case filter (`Set.member` syms)
a716971174535184da7713ed308423e355a4aa66Christian Maeder $ map (`Entity` v) entityTypes of
a716971174535184da7713ed308423e355a4aa66Christian Maeder [] -> let v2 = showQU v
a716971174535184da7713ed308423e355a4aa66Christian Maeder u2 = showQU u
67a14e04c885a87e4273a300eef60e680531088cChristian Maeder in return $ inducedPref v2 u2 sig (m, t)
67a14e04c885a87e4273a300eef60e680531088cChristian Maeder l -> return $ if u == v then (m, t) else
67a14e04c885a87e4273a300eef60e680531088cChristian Maeder (foldr (`Map.insert` u) m l, t)
d48085f765fca838c1d972d2123601997174583dChristian Maeder (APrefix v, APrefix u) -> return $ inducedPref v u sig (m, t)
d48085f765fca838c1d972d2123601997174583dChristian Maeder _ -> error "OWL2.Morphism.inducedFromMor") (Map.empty, Map.empty)
d48085f765fca838c1d972d2123601997174583dChristian Maeder $ Map.toList rm
d48085f765fca838c1d972d2123601997174583dChristian Maeder return OWLMorphism
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder { osource = sig
d48085f765fca838c1d972d2123601997174583dChristian Maeder , otarget = inducedSign mm tm sig
d48085f765fca838c1d972d2123601997174583dChristian Maeder , pmap = tm
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder , mmaps = mm }
d48085f765fca838c1d972d2123601997174583dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian MaedersymMapOf :: OWLMorphism -> Map.Map Entity Entity
d48085f765fca838c1d972d2123601997174583dChristian MaedersymMapOf mor = Map.union (symMap $ mmaps mor) $ setToMap $ symOf $ osource mor
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian Maederinstance Pretty OWLMorphism where
d48085f765fca838c1d972d2123601997174583dChristian Maeder pretty m = let
d48085f765fca838c1d972d2123601997174583dChristian Maeder s = osource m
d48085f765fca838c1d972d2123601997174583dChristian Maeder srcD = specBraces $ space <> pretty s
d48085f765fca838c1d972d2123601997174583dChristian Maeder t = otarget m
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder in if isOWLInclusion m then
d48085f765fca838c1d972d2123601997174583dChristian Maeder if isSubSign t s then
d48085f765fca838c1d972d2123601997174583dChristian Maeder fsep [text "identity morphism over", srcD]
d48085f765fca838c1d972d2123601997174583dChristian Maeder else fsep
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder [ text "inclusion morphism of"
d48085f765fca838c1d972d2123601997174583dChristian Maeder , srcD
d48085f765fca838c1d972d2123601997174583dChristian Maeder , text "extended with"
d48085f765fca838c1d972d2123601997174583dChristian Maeder , pretty $ Set.difference (symOf t) $ symOf s ]
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder else fsep
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder [ pretty $ mmaps m
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder , pretty $ pmap m
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder , colon <+> srcD, mapsto <+> specBraces (space <> pretty t) ]
d48085f765fca838c1d972d2123601997174583dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian MaederlegalMor :: OWLMorphism -> Result ()
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian MaederlegalMor m = let mm = mmaps m in if
d48085f765fca838c1d972d2123601997174583dChristian Maeder Set.isSubsetOf (Map.keysSet mm) (symOf $ osource m)
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder && Set.isSubsetOf (Set.fromList $ inducedElems mm) (symOf $ otarget m)
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder then return () else fail "illegal OWL2 morphism"
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian MaedergetIri :: EntityType -> IRI -> Map.Map Entity IRI -> IRI
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian MaedergetIri ty u = fromMaybe u . Map.lookup (Entity ty u)
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder
76647324ed70f33b95a881b536d883daccf9568dChristian MaedercomposeMor :: OWLMorphism -> OWLMorphism -> Result OWLMorphism
d48085f765fca838c1d972d2123601997174583dChristian MaedercomposeMor m1 m2 =
d48085f765fca838c1d972d2123601997174583dChristian Maeder let nm = Set.fold (\ s@(Entity ty u) -> let
d48085f765fca838c1d972d2123601997174583dChristian Maeder t = getIri ty u $ mmaps m1
d48085f765fca838c1d972d2123601997174583dChristian Maeder r = getIri ty t $ mmaps m2
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder in if r == u then id else Map.insert s r) Map.empty
d48085f765fca838c1d972d2123601997174583dChristian Maeder . symOf $ osource m1
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian Maeder in return m1
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian Maeder { otarget = otarget m2
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian Maeder , pmap = composeMap (prefixMap $ osource m1) (pmap m1) $ pmap m2
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder , mmaps = nm }
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaedercogeneratedSign :: Set.Set Entity -> Sign -> Result OWLMorphism
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaedercogeneratedSign s sign =
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian Maeder let sig2 = execState (mapM_ (modEntity Set.delete) $ Set.toList s) sign
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian Maeder in if isSubSign sig2 sign then return $ inclOWLMorphism sig2 sign else
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder fail "non OWL2 subsignatures for (co)generatedSign"
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder
6b1153c560b677f9f5da2a60ee8a10de75ff90c5Christian MaedergeneratedSign :: Set.Set Entity -> Sign -> Result OWLMorphism
6b1153c560b677f9f5da2a60ee8a10de75ff90c5Christian MaedergeneratedSign s sign = cogeneratedSign (Set.difference (symOf sign) s) sign
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder
81946e2b3f6dde6167f48769bd02c7a634736856Christian MaedermatchesSym :: Entity -> RawSymb -> Bool
76647324ed70f33b95a881b536d883daccf9568dChristian MaedermatchesSym e@(Entity _ u) r = case r of
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ASymbol s -> s == e
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder AnUri s -> s == u || namePrefix u == localPart s && null (namePrefix s)
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder APrefix p -> p == namePrefix u
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder
9a44a07ffc79da9852b6319bd6d9df81efe99809Christian MaederstatSymbItems :: [SymbItems] -> [RawSymb]
81946e2b3f6dde6167f48769bd02c7a634736856Christian MaederstatSymbItems = concatMap
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder $ \ (SymbItems m us) -> case m of
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder AnyEntity -> map AnUri us
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder EntityType ty -> map (ASymbol . Entity ty) us
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder Prefix -> map (APrefix . showQN) us
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder
a39a820684c1974350f46593025e0bb279f41bc6Christian MaederstatSymbMapItems :: [SymbMapItems] -> Result (Map.Map RawSymb RawSymb)
72b9099aeec0762bae4546db3bc4b48721027bf4Christian MaederstatSymbMapItems =
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder foldM (\ m (s, t) -> case Map.lookup s m of
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder Nothing -> return $ Map.insert s t m
d48085f765fca838c1d972d2123601997174583dChristian Maeder Just u -> case (u, t) of
d48085f765fca838c1d972d2123601997174583dChristian Maeder (AnUri su, ASymbol (Entity _ tu)) | su == tu ->
d48085f765fca838c1d972d2123601997174583dChristian Maeder return $ Map.insert s t m
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder (ASymbol (Entity _ su), AnUri tu) | su == tu -> return m
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder (AnUri su, APrefix tu) | showQU su == tu ->
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder return $ Map.insert s t m
d48085f765fca838c1d972d2123601997174583dChristian Maeder (APrefix su, AnUri tu) | su == showQU tu -> return m
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder _ -> if u == t then return m else
d48085f765fca838c1d972d2123601997174583dChristian Maeder fail $ "differently mapped symbol: " ++ showDoc s "\nmapped to "
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder ++ showDoc u " and " ++ showDoc t "")
d48085f765fca838c1d972d2123601997174583dChristian Maeder Map.empty
d48085f765fca838c1d972d2123601997174583dChristian Maeder . concatMap (\ (SymbMapItems m us) ->
d48085f765fca838c1d972d2123601997174583dChristian Maeder let ps = map (\ (u, v) -> (u, fromMaybe u v)) us in
72b9099aeec0762bae4546db3bc4b48721027bf4Christian Maeder case m of
d48085f765fca838c1d972d2123601997174583dChristian Maeder AnyEntity -> map (\ (s, t) -> (AnUri s, AnUri t)) ps
d48085f765fca838c1d972d2123601997174583dChristian Maeder EntityType ty ->
d48085f765fca838c1d972d2123601997174583dChristian Maeder let mS = ASymbol . Entity ty
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder in map (\ (s, t) -> (mS s, mS t)) ps
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder Prefix ->
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder map (\ (s, t) -> (APrefix (showQU s), APrefix $ showQU t)) ps)
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder
a39a820684c1974350f46593025e0bb279f41bc6Christian MaedermapAnno :: Map.Map Entity IRI -> Annotation -> Annotation
a39a820684c1974350f46593025e0bb279f41bc6Christian MaedermapAnno m annt = case annt of
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder Annotation l a e -> Annotation l (getIri AnnotationProperty a m) e
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder
d48085f765fca838c1d972d2123601997174583dChristian MaedermapAnnoList :: Map.Map Entity IRI -> Annotations -> Annotations
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian MaedermapAnnoList m = map (mapAnno m)
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian MaedermapSen :: OWLMorphism -> Axiom -> Result Axiom
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian MaedermapSen m a = do
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder let new = mapAxiom (mmaps m) a
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder return $ function Rename (pmap m) new
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder
76647324ed70f33b95a881b536d883daccf9568dChristian MaedermapObjExpr :: Map.Map Entity IRI -> ObjectPropertyExpression
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder -> ObjectPropertyExpression
81946e2b3f6dde6167f48769bd02c7a634736856Christian MaedermapObjExpr m ope = case ope of
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ObjectProp u -> ObjectProp $ getIri ObjectProperty u m
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ObjectInverseOf o -> ObjectInverseOf $ mapObjExpr m o
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder
81946e2b3f6dde6167f48769bd02c7a634736856Christian MaedermapDRange :: Map.Map Entity IRI -> DataRange -> DataRange
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian MaedermapDRange m dr = case dr of
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder DataType u l -> DataType (getIri Datatype u m) l
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder DataJunction j l -> DataJunction j (map (mapDRange m) l)
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder DataComplementOf d -> DataComplementOf $ mapDRange m d
c9fd6322389afc35c1803a0614f094298bc7cba3Christian Maeder DataOneOf _ -> dr
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaedermapDataExpr :: Map.Map Entity IRI -> DataPropertyExpression
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder -> DataPropertyExpression
a39a820684c1974350f46593025e0bb279f41bc6Christian MaedermapDataExpr m dpe = getIri DataProperty dpe m
72b9099aeec0762bae4546db3bc4b48721027bf4Christian Maeder
81946e2b3f6dde6167f48769bd02c7a634736856Christian MaedergetClassIri :: IRI -> Map.Map Entity IRI -> IRI
76647324ed70f33b95a881b536d883daccf9568dChristian MaedergetClassIri = getIri Class
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaedergetIndIri :: IRI -> Map.Map Entity IRI -> IRI
c9fd6322389afc35c1803a0614f094298bc7cba3Christian MaedergetIndIri = getIri NamedIndividual
c9fd6322389afc35c1803a0614f094298bc7cba3Christian Maeder
c9fd6322389afc35c1803a0614f094298bc7cba3Christian MaedermapCard :: (a -> b) -> (c -> d) -> Cardinality a c -> Cardinality b d
c9fd6322389afc35c1803a0614f094298bc7cba3Christian MaedermapCard f g (Cardinality ty i a mb) =
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian Maeder Cardinality ty i (f a) $ fmap g mb
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaedermapDescr :: Map.Map Entity IRI -> ClassExpression -> ClassExpression
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaedermapDescr m desc = case desc of
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder Expression u -> Expression $ getClassIri u m
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder ObjectJunction ty ds -> ObjectJunction ty $ map (mapDescr m) ds
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder ObjectComplementOf d -> ObjectComplementOf $ mapDescr m d
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder ObjectOneOf is -> ObjectOneOf $ map (`getIndIri` m) is
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder ObjectValuesFrom ty o d -> ObjectValuesFrom ty (mapObjExpr m o)
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder $ mapDescr m d
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder ObjectHasSelf o -> ObjectHasSelf $ mapObjExpr m o
17889a13fbcd155040fa0323ffe82393d53051fcChristian Maeder ObjectHasValue o i -> ObjectHasValue (mapObjExpr m o) $ getIndIri i m
17889a13fbcd155040fa0323ffe82393d53051fcChristian Maeder ObjectCardinality c -> ObjectCardinality
17889a13fbcd155040fa0323ffe82393d53051fcChristian Maeder $ mapCard (mapObjExpr m) (mapDescr m) c
17889a13fbcd155040fa0323ffe82393d53051fcChristian Maeder DataValuesFrom ty d dr -> DataValuesFrom ty (mapDataExpr m d)
17889a13fbcd155040fa0323ffe82393d53051fcChristian Maeder $ mapDRange m dr
17889a13fbcd155040fa0323ffe82393d53051fcChristian Maeder DataHasValue d c -> DataHasValue (mapDataExpr m d) c
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder DataCardinality c -> DataCardinality
17889a13fbcd155040fa0323ffe82393d53051fcChristian Maeder $ mapCard (mapDataExpr m) (mapDRange m) c
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian MaedermapFact :: Map.Map Entity IRI -> Fact -> Fact
81946e2b3f6dde6167f48769bd02c7a634736856Christian MaedermapFact m f = case f of
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder ObjectPropertyFact pn op i -> ObjectPropertyFact
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder pn (mapObjExpr m op) (i `getIndIri` m)
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder DataPropertyFact pn dp l -> DataPropertyFact
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder pn (mapDataExpr m dp) l
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder
81946e2b3f6dde6167f48769bd02c7a634736856Christian MaedermapAnnList :: Map.Map Entity IRI -> (a -> a) ->
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder AnnotatedList a -> AnnotatedList a
17889a13fbcd155040fa0323ffe82393d53051fcChristian MaedermapAnnList m f anl =
17889a13fbcd155040fa0323ffe82393d53051fcChristian Maeder let ans = map fst anl
17889a13fbcd155040fa0323ffe82393d53051fcChristian Maeder l = map snd anl
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder in zip (map (mapAnnoList m) ans) (map f l)
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder
17889a13fbcd155040fa0323ffe82393d53051fcChristian MaedermapLFB :: Map.Map Entity IRI -> ListFrameBit -> ListFrameBit
17889a13fbcd155040fa0323ffe82393d53051fcChristian MaedermapLFB m lfb = case lfb of
17889a13fbcd155040fa0323ffe82393d53051fcChristian Maeder AnnotationBit a -> AnnotationBit
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder $ mapAnnList m (flip (getIri AnnotationProperty) m) a
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ObjectBit a -> ObjectBit $ mapAnnList m (mapObjExpr m) a
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder DataBit a -> DataBit $ mapAnnList m (mapDataExpr m) a
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder IndividualSameOrDifferent a ->
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder IndividualSameOrDifferent $ mapAnnList m (`getIndIri` m) a
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder DataPropRange a -> DataPropRange $ mapAnnList m (mapDRange m) a
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder IndividualFacts a -> IndividualFacts $ mapAnnList m (mapFact m) a
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder ExpressionBit a -> ExpressionBit $ mapAnnList m (mapDescr m) a
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder ObjectCharacteristics _ -> lfb
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian MaedermapAFB :: Map.Map Entity IRI -> AnnFrameBit -> AnnFrameBit
e47d29b522739fbf08aac80c6faa447dde113fbcChristian MaedermapAFB m afb = case afb of
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder DatatypeBit dr -> DatatypeBit $ mapDRange m dr
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ClassDisjointUnion ce -> ClassDisjointUnion $ map (mapDescr m) ce
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder ClassHasKey op dp -> ClassHasKey (map (mapObjExpr m) op)
10b02b2343246df6773585636fe3ddbefa3b6a1bChristian Maeder (map (mapDataExpr m) dp)
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ObjectSubPropertyChain op -> ObjectSubPropertyChain
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder (map (mapObjExpr m) op)
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder _ -> afb
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder
81946e2b3f6dde6167f48769bd02c7a634736856Christian MaedermapFB :: Map.Map Entity IRI -> FrameBit -> FrameBit
19f104861f1832b452c9f98e59880d05e865d9bdChristian MaedermapFB m fb = case fb of
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder ListFrameBit mr lfb -> ListFrameBit mr $ mapLFB m lfb
19f104861f1832b452c9f98e59880d05e865d9bdChristian Maeder AnnFrameBit ans afb -> AnnFrameBit (mapAnnoList m ans)
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder $ mapAFB m afb
19f104861f1832b452c9f98e59880d05e865d9bdChristian Maeder
19f104861f1832b452c9f98e59880d05e865d9bdChristian MaedermapAxiom :: Map.Map Entity IRI -> Axiom -> Axiom
19f104861f1832b452c9f98e59880d05e865d9bdChristian MaedermapAxiom m (PlainAxiom eith fb) = case eith of
19f104861f1832b452c9f98e59880d05e865d9bdChristian Maeder SimpleEntity (Entity ty ent) -> PlainAxiom
19f104861f1832b452c9f98e59880d05e865d9bdChristian Maeder (SimpleEntity $ Entity ty $ getIri ty ent m) $ mapFB m fb
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder Misc ans -> PlainAxiom (Misc $ mapAnnoList m ans) $ mapFB m fb
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder ObjectEntity ope -> PlainAxiom (ObjectEntity $ mapObjExpr m ope)
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder $ mapFB m fb
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder ClassEntity ce -> PlainAxiom (ClassEntity $ mapDescr m ce) $ mapFB m fb
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder