Translate.hs revision 604d90486329a0e710c26e5cb70fbcd4ba6131cd
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder{- |
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederModule : $Header$
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederDescription : translate string to OWL2 valid names
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederCopyright : (c) C. Maeder, DFKI GmbH 2012
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederLicense : GPLv2 or higher, see LICENSE.txt
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederMaintainer : Christian.Maeder@dfki.de
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederStability : provisional
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederPortability : portable
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder-}
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maedermodule OWL2.Translate where
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maederimport Common.Id
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maederimport Common.ProofUtils
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maederimport Data.Char
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maederimport OWL2.AS
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederidToIRI :: Id -> QName
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederidToIRI = idToAnonIRI False
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederidToAnonIRI :: Bool -> Id -> QName
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian MaederidToAnonIRI = idToAnonNumberedIRI (-1)
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian Maeder
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian MaederidToNumberedIRI :: Id -> Int -> QName
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian MaederidToNumberedIRI i n = idToAnonNumberedIRI n False i
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian Maeder
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian MaederidToAnonNumberedIRI :: Int -> Bool -> Id -> QName
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian MaederidToAnonNumberedIRI n b i = nullQName
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian Maeder { localPart = (if b then ('_' :) else id) $ transString (show i)
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian Maeder ++ if n < 0 then "" else '_' : show n
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder , iriPos = rangeOfId i }
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder-- | translate to a valid OWL string
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaedertransString :: String -> String
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaedertransString str = let
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder x = 'X'
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder replaceChar1 d | d == x = [x, x] -- code out existing x!
604d90486329a0e710c26e5cb70fbcd4ba6131cdChristian Maeder | isAlphaNum d || d == '_' = [d]
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder | otherwise = x : replaceChar d
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder in case str of
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder "" -> [x]
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder c : s -> let l = replaceChar1 c in
604d90486329a0e710c26e5cb70fbcd4ba6131cdChristian Maeder (if isDigit c || c == '_' then [x, c]
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder else l) ++ concatMap replaceChar1 s
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder-- | injective replacement of special characters
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederreplaceChar :: Char -> String
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder-- <http://www.htmlhelp.com/reference/charset/>
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaederreplaceChar c = if isAlphaNum c then [c] else lookupCharMap c