Morphism.hs revision 2a5b885d9350ec6dd8bc4992ee91d2f68aa592f4
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu{- |
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuModule : $Header$
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuDescription : OWL Morphisms
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuCopyright : (c) Dominik Luecke, 2008
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuLicense : GPLv2 or higher, see LICENSE.txt
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuMaintainer : luecke@informatik.uni-bremen.de
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuStability : provisional
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuPortability : portable
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuMorphisms for OWL
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu-}
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiumodule OWL2.Morphism
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ( OWLMorphism (..)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , isOWLInclusion
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , inclOWLMorphism
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , legalMor
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , composeMor
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , cogeneratedSign
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , generatedSign
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , matchesSym
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , statSymbItems
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , statSymbMapItems
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , inducedFromMor
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , symMapOf
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , mapSen
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ) where
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport OWL2.AS
a604cbad8e2202147b5c6bb9f2e06ae61162d654Felix Gabriel Manceimport OWL2.MS
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport OWL2.Sign
928291e1beb4df5ec1f595188b64eab7c2adbb80Felix Gabriel Manceimport OWL2.ManchesterPrint()
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport OWL2.StaticAnalysis
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport OWL2.Symbols
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport Common.DocUtils
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport Common.Doc
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport Common.Result
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport Common.Lib.State (execState)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport Common.Lib.Rel (setToMap)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport Control.Monad
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport Data.Maybe
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport qualified Data.Map as Map
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuimport qualified Data.Set as Set
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiudata OWLMorphism = OWLMorphism
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu { osource :: Sign
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , otarget :: Sign
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , mmaps :: Map.Map Entity IRI
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu } deriving (Show, Eq, Ord)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuinclOWLMorphism :: Sign -> Sign -> OWLMorphism
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuinclOWLMorphism s t = OWLMorphism
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu { osource = s
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , otarget = t
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , mmaps = Map.empty }
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuisOWLInclusion :: OWLMorphism -> Bool
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuisOWLInclusion m = Map.null (mmaps m) && isSubSign (osource m) (otarget m)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiusymMap :: Map.Map Entity IRI -> Map.Map Entity Entity
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiusymMap = Map.mapWithKey (\ (Entity ty _) -> Entity ty)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuinducedElems :: Map.Map Entity IRI -> [Entity]
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuinducedElems = Map.elems . symMap
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuinducedSign :: Map.Map Entity IRI -> Sign -> Sign
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuinducedSign m = execState $ do
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu mapM_ (modEntity Set.delete) $ Map.keys m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu mapM_ (modEntity Set.insert) $ inducedElems m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuinducedFromMor :: Map.Map RawSymb RawSymb -> Sign -> Result OWLMorphism
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiuinducedFromMor rm sig = do
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu let syms = symOf sig
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu mm <- foldM (\ m p -> case p of
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu (ASymbol s@(Entity _ v), ASymbol (Entity _ u)) ->
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu if Set.member s syms
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu then return $ if u == v then m else Map.insert s u m
9475501a6acf48434052d9e6f4a05ed6681eaaabFrancisc Nicolae Bungiu else fail $ "unknown symbol: " ++ showDoc s "\n" ++ shows sig ""
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu (AnUri v, AnUri u) -> case filter (`Set.member` syms)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu $ map (`Entity` v) entityTypes of
9475501a6acf48434052d9e6f4a05ed6681eaaabFrancisc Nicolae Bungiu [] -> fail $ "unknown symbol: " ++ showDoc v "\n" ++ shows sig ""
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu l -> return $ if u == v then m else foldr (`Map.insert` u) m l
9475501a6acf48434052d9e6f4a05ed6681eaaabFrancisc Nicolae Bungiu _ -> error "OWL2.Morphism.inducedFromMor") Map.empty $ Map.toList rm
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu return OWLMorphism
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu { osource = sig
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , otarget = inducedSign mm sig
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , mmaps = mm }
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiusymMapOf :: OWLMorphism -> Map.Map Entity Entity
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiusymMapOf mor = Map.union (symMap $ mmaps mor) $ setToMap $ symOf $ osource mor
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiuinstance Pretty OWLMorphism where
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu pretty m = let
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu s = osource m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu srcD = specBraces $ space <> pretty s
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu t = otarget m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu in if isOWLInclusion m then
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu if isSubSign t s then
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu fsep [text "identity morphism over", srcD]
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu else fsep
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu [ text "inclusion morphism of"
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , srcD
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , text "extended with"
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , pretty $ Set.difference (symOf t) $ symOf s ]
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu else fsep
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu [ pretty $ mmaps m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , colon <+> srcD, mapsto <+> specBraces (space <> pretty t) ]
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiulegalMor :: OWLMorphism -> Bool
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiulegalMor m = let mm = mmaps m in
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu Set.isSubsetOf (Map.keysSet mm) (symOf $ osource m)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu && Set.isSubsetOf (Set.fromList $ inducedElems mm) (symOf $ otarget m)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiugetIri :: EntityType -> IRI -> Map.Map Entity IRI -> IRI
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiugetIri ty u = fromMaybe u . Map.lookup (Entity ty u)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiucomposeMor :: OWLMorphism -> OWLMorphism -> Result OWLMorphism
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiucomposeMor m1 m2 =
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu let nm = Set.fold (\ s@(Entity ty u) -> let
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu t = getIri ty u $ mmaps m1
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu r = getIri ty t $ mmaps m2
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu in if r == u then id else Map.insert s r) Map.empty
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu . symOf $ osource m1
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu in return m1
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu { otarget = otarget m2
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu , mmaps = nm }
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiucogeneratedSign :: Set.Set Entity -> Sign -> Result OWLMorphism
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiucogeneratedSign s sign =
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu let sig2 = execState (mapM_ (modEntity Set.delete) $ Set.toList s) sign
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu in if isSubSign sig2 sign then return $ inclOWLMorphism sig2 sign else
06acd8a23b2f06e7b2373d53f738cf56c7f03223Francisc Nicolae Bungiu fail "non OWL2 subsignatures for (co)generatedSign"
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiugeneratedSign :: Set.Set Entity -> Sign -> Result OWLMorphism
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiugeneratedSign s sign = cogeneratedSign (Set.difference (symOf sign) s) sign
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumatchesSym :: Entity -> RawSymb -> Bool
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumatchesSym e@(Entity _ u) r = case r of
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ASymbol s -> s == e
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu AnUri s -> s == u
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiustatSymbItems :: [SymbItems] -> [RawSymb]
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiustatSymbItems = concatMap
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu $ \ (SymbItems m us) -> case m of
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu Nothing -> map AnUri us
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu Just ty -> map (ASymbol . Entity ty) us
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiustatSymbMapItems :: [SymbMapItems] -> Result (Map.Map RawSymb RawSymb)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiustatSymbMapItems =
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu foldM (\ m (s, t) -> case Map.lookup s m of
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu Nothing -> return $ Map.insert s t m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu Just u -> case (u, t) of
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu (AnUri su, ASymbol (Entity _ tu)) | su == tu ->
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu return $ Map.insert s t m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu (ASymbol (Entity _ su), AnUri tu) | su == tu ->
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu return m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu _ -> if u == t then return m else
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu fail $ "differently mapped symbol: " ++ showDoc s "\nmapped to "
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ++ showDoc u " and " ++ showDoc t "")
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu Map.empty
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu . concatMap (\ (SymbMapItems m us) ->
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu let ps = map (\ (u, v) -> (u, fromMaybe u v)) us in
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu case m of
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu Nothing -> map (\ (s, t) -> (AnUri s, AnUri t)) ps
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu Just ty -> let mS = ASymbol . Entity ty in
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu map (\ (s, t) -> (mS s, mS t)) ps)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapAnno :: Map.Map Entity IRI -> Annotation -> Annotation
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapAnno m annt = case annt of
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu Annotation l a e -> Annotation l (getIri AnnotationProperty a m) e
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapAnnoList :: Map.Map Entity IRI -> Annotations -> Annotations
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapAnnoList m ans = map (mapAnno m) ans
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapSen :: OWLMorphism -> Axiom -> Result Axiom
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapSen m = return . mapAxiom (mmaps m)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapObjExpr :: Map.Map Entity IRI -> ObjectPropertyExpression
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu -> ObjectPropertyExpression
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapObjExpr m ope = case ope of
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ObjectProp u -> ObjectProp $ getIri ObjectProperty u m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ObjectInverseOf o -> ObjectInverseOf $ mapObjExpr m o
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapDRange :: Map.Map Entity IRI -> DataRange -> DataRange
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapDRange m dr = case dr of
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu DataType u l -> DataType (getIri Datatype u m) l
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu DataJunction j l -> DataJunction j (map (mapDRange m) l)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu DataComplementOf d -> DataComplementOf $ mapDRange m d
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu DataOneOf _ -> dr
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapDataExpr :: Map.Map Entity IRI -> DataPropertyExpression
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu -> DataPropertyExpression
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapDataExpr m dpe = getIri DataProperty dpe m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiugetClassIri :: IRI -> Map.Map Entity IRI -> IRI
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiugetClassIri = getIri Class
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiugetIndIri :: IRI -> Map.Map Entity IRI -> IRI
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiugetIndIri = getIri NamedIndividual
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapCard :: (a -> b) -> (c -> d) -> Cardinality a c -> Cardinality b d
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapCard f g (Cardinality ty i a mb) =
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu Cardinality ty i (f a) $ fmap g mb
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapDescr :: Map.Map Entity IRI -> ClassExpression -> ClassExpression
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae BungiumapDescr m desc = case desc of
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu Expression u -> Expression $ getClassIri u m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ObjectJunction ty ds -> ObjectJunction ty $ map (mapDescr m) ds
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ObjectComplementOf d -> ObjectComplementOf $ mapDescr m d
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ObjectOneOf is -> ObjectOneOf $ map (`getIndIri` m) is
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ObjectValuesFrom ty o d -> ObjectValuesFrom ty (mapObjExpr m o)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu $ mapDescr m d
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ObjectHasSelf o -> ObjectHasSelf $ mapObjExpr m o
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ObjectHasValue o i -> ObjectHasValue (mapObjExpr m o) $ getIndIri i m
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu ObjectCardinality c -> ObjectCardinality
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu $ mapCard (mapObjExpr m) (mapDescr m) c
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu DataValuesFrom ty d ds dr -> DataValuesFrom ty (mapDataExpr m d)
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu (map (mapDataExpr m) ds) $ mapDRange m dr
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu DataHasValue d c -> DataHasValue (mapDataExpr m d) c
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu DataCardinality c -> DataCardinality
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu $ mapCard (mapDataExpr m) (mapDRange m) c
ee93ea764a2b8189253e912c8447f9419033f6d4Francisc Nicolae Bungiu
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapFact :: Map.Map Entity IRI -> Fact -> Fact
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapFact m f = case f of
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian Maeder ObjectPropertyFact pn op i -> ObjectPropertyFact
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance pn (mapObjExpr m op) (i `getIndIri` m)
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian Maeder DataPropertyFact pn dp l -> DataPropertyFact
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance pn (mapDataExpr m dp) l
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian MaedermapAnnList :: Map.Map Entity IRI -> (a -> a) ->
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance AnnotatedList a -> AnnotatedList a
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian MaedermapAnnList m f (AnnotatedList anl) =
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance let ans = map fst anl
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance l = map snd anl
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance in AnnotatedList $ zip (map (mapAnnoList m) ans) (map f l)
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapLFB :: Map.Map Entity IRI -> ListFrameBit -> ListFrameBit
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapLFB m lfb = case lfb of
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian Maeder AnnotationBit a -> AnnotationBit
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian Maeder $ mapAnnList m (flip (getIri AnnotationProperty) m) a
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance ObjectBit a -> ObjectBit $ mapAnnList m (mapObjExpr m) a
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance DataBit a -> DataBit $ mapAnnList m (mapDataExpr m) a
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian Maeder IndividualSameOrDifferent a ->
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance IndividualSameOrDifferent $ mapAnnList m (`getIndIri` m) a
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance DataPropRange a -> DataPropRange $ mapAnnList m (mapDRange m) a
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance IndividualFacts a -> IndividualFacts $ mapAnnList m (mapFact m) a
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian Maeder ExpressionBit a -> ExpressionBit $ mapAnnList m (mapDescr m) a
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian Maeder ObjectCharacteristics _ -> lfb
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapAFB :: Map.Map Entity IRI -> AnnFrameBit -> AnnFrameBit
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapAFB m afb = case afb of
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance DatatypeBit dr -> DatatypeBit $ mapDRange m dr
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance ClassDisjointUnion ce -> ClassDisjointUnion $ map (mapDescr m) ce
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian Maeder ClassHasKey op dp -> ClassHasKey (map (mapObjExpr m) op)
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance (map (mapDataExpr m) dp)
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian Maeder ObjectSubPropertyChain op -> ObjectSubPropertyChain
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance (map (mapObjExpr m) op)
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance _ -> afb
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapFB :: Map.Map Entity IRI -> FrameBit -> FrameBit
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapFB m fb = case fb of
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance ListFrameBit mr lfb -> ListFrameBit mr $ mapLFB m lfb
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian Maeder AnnFrameBit ans afb -> AnnFrameBit (mapAnnoList m ans)
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance $ mapAFB m afb
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapAxiom :: Map.Map Entity IRI -> Axiom -> Axiom
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel MancemapAxiom m (PlainAxiom eith fb) = case eith of
2713ec15465bd1e643f6310d7048b5a30ad55c83Christian Maeder Right (Entity ty ent) -> PlainAxiom
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance (Right $ Entity ty $ getIri ty ent m) $ mapFB m fb
86f318f607745d1f40cbf87048a13ac1c65100e6Felix Gabriel Mance Left ans -> PlainAxiom (Left $ mapAnnoList m ans) $ mapFB m fb