Morphism.hs revision fc05327b875b5723b6c17849b83477f29ec12c90
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian MaederModule : $Header$
09249711700a6acbc40a2e337688b434d7aafa28Christian MaederDescription : OWL Morphisms
76647324ed70f33b95a881b536d883daccf9568dChristian MaederCopyright : (c) Dominik Luecke, 2008
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederMaintainer : luecke@informatik.uni-bremen.de
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian MaederStability : provisional
76647324ed70f33b95a881b536d883daccf9568dChristian MaederPortability : portable
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederMorphisms for OWL
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maeder ( OWLMorphism (..)
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder , isOWLInclusion
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maeder , inclOWLMorphism
10b02b2343246df6773585636fe3ddbefa3b6a1bChristian Maeder , cogeneratedSign
10b02b2343246df6773585636fe3ddbefa3b6a1bChristian Maeder , generatedSign
d48085f765fca838c1d972d2123601997174583dChristian Maeder , statSymbItems
10b02b2343246df6773585636fe3ddbefa3b6a1bChristian Maeder , statSymbMapItems
10b02b2343246df6773585636fe3ddbefa3b6a1bChristian Maeder , inducedFromMor
a39a820684c1974350f46593025e0bb279f41bc6Christian Maederimport Common.Utils (composeMap)
a39a820684c1974350f46593025e0bb279f41bc6Christian Maederimport Common.Lib.State (execState)
d48085f765fca838c1d972d2123601997174583dChristian Maederimport qualified Data.Map as Map
d48085f765fca838c1d972d2123601997174583dChristian Maederimport qualified Data.Set as Set
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)
5e5c3fbbf8c22b883d551d83429b9f8d8041f1e0Christian MaederinclOWLMorphism :: Sign -> Sign -> OWLMorphism
feab655b0275874012c3cf9859064c177860cc70Christian MaederinclOWLMorphism s t = OWLMorphism
f2c2b420e386a90d940c758c631d16f12952d2b7Christian Maeder { osource = s
f2c2b420e386a90d940c758c631d16f12952d2b7Christian Maeder , otarget = t
a716971174535184da7713ed308423e355a4aa66Christian MaederisOWLInclusion :: OWLMorphism -> Bool
a716971174535184da7713ed308423e355a4aa66Christian MaederisOWLInclusion m = Map.null (pmap m)
5e5c3fbbf8c22b883d551d83429b9f8d8041f1e0Christian Maeder && Map.null (mmaps m) && isSubSign (osource m) (otarget m)
a716971174535184da7713ed308423e355a4aa66Christian MaedersymMap :: Map.Map Entity IRI -> Map.Map Entity Entity
a716971174535184da7713ed308423e355a4aa66Christian MaedersymMap = Map.mapWithKey (\ (Entity ty _) -> Entity ty)
5e5c3fbbf8c22b883d551d83429b9f8d8041f1e0Christian MaederinducedElems :: Map.Map Entity IRI -> [Entity]
793945d4ac7c0f22760589c87af8e71427c76118Christian MaederinducedElems = Map.elems . symMap
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.insert) $ inducedElems m) s
fd2dcd5c071e938c07338fd3a32296819b8a2333Christian Maeder in function Rename t new
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 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 ""
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)) ->
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 return OWLMorphism
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder { osource = sig
d48085f765fca838c1d972d2123601997174583dChristian Maeder , otarget = inducedSign mm tm sig
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder , mmaps = mm }
d48085f765fca838c1d972d2123601997174583dChristian MaedersymMapOf :: OWLMorphism -> Map.Map Entity Entity
d48085f765fca838c1d972d2123601997174583dChristian MaedersymMapOf mor = Map.union (symMap $ mmaps mor) $ setToMap $ symOf $ osource mor
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]
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder [ text "inclusion morphism of"
d48085f765fca838c1d972d2123601997174583dChristian Maeder , text "extended with"
d48085f765fca838c1d972d2123601997174583dChristian Maeder , pretty $ Set.difference (symOf t) $ symOf s ]
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder [ pretty $ mmaps m
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder , pretty $ pmap m
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder , colon <+> srcD, mapsto <+> specBraces (space <> pretty t) ]
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 MaedergetIri :: EntityType -> IRI -> Map.Map Entity IRI -> IRI
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian MaedergetIri ty u = fromMaybe u . Map.lookup (Entity ty u)
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 { otarget = otarget m2
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian Maeder , pmap = composeMap (prefixMap $ osource m1) (pmap m1) $ pmap m2
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder , mmaps = nm }
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"
6b1153c560b677f9f5da2a60ee8a10de75ff90c5Christian MaedergeneratedSign :: Set.Set Entity -> Sign -> Result OWLMorphism
6b1153c560b677f9f5da2a60ee8a10de75ff90c5Christian MaedergeneratedSign s sign = cogeneratedSign (Set.difference (symOf sign) s) sign
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
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 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 ->
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder (ASymbol (Entity _ su), AnUri tu) | su == tu -> return m
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder (AnUri su, APrefix tu) | showQU su == tu ->
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 . concatMap (\ (SymbMapItems m us) ->
d48085f765fca838c1d972d2123601997174583dChristian Maeder let ps = map (\ (u, v) -> (u, fromMaybe u v)) us in
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
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder map (\ (s, t) -> (APrefix (showQU s), APrefix $ showQU t)) ps)
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
d48085f765fca838c1d972d2123601997174583dChristian MaedermapAnnoList :: Map.Map Entity IRI -> Annotations -> Annotations
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian MaedermapAnnoList m = map (mapAnno m)
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
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 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
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaedermapDataExpr :: Map.Map Entity IRI -> DataPropertyExpression
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder -> DataPropertyExpression
a39a820684c1974350f46593025e0bb279f41bc6Christian MaedermapDataExpr m dpe = getIri DataProperty dpe m
81946e2b3f6dde6167f48769bd02c7a634736856Christian MaedergetClassIri :: IRI -> Map.Map Entity IRI -> IRI
76647324ed70f33b95a881b536d883daccf9568dChristian MaedergetClassIri = getIri Class
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaedergetIndIri :: IRI -> Map.Map Entity IRI -> IRI
c9fd6322389afc35c1803a0614f094298bc7cba3Christian MaedergetIndIri = getIri NamedIndividual
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 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
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
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)
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 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 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 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)
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder ClassEntity ce -> PlainAxiom (ClassEntity $ mapDescr m ce) $ mapFB m fb