c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder{- |
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens ElknerModule : ./OWL2/Translate.hs
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
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowskiimport Common.IRI
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maederimport Common.Id
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maederimport Common.ProofUtils
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maederimport Data.Char
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
f11a68cd12e8e68fbec624b2ccbb2a17e2e80758Christian Maederimport OWL2.Parse
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowski-- now provided in Common.IRI
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowski--idToIRI :: Id -> IRI
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowski--idToIRI = idToAnonIRI False
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
80875f917d741946a39d0ec0b5721e46ba609823Till MossakowskiidToAnonIRI :: Bool -> Id -> IRI
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian MaederidToAnonIRI = idToAnonNumberedIRI (-1)
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian Maeder
80875f917d741946a39d0ec0b5721e46ba609823Till MossakowskiidToNumberedIRI :: Id -> Int -> IRI
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian MaederidToNumberedIRI i n = idToAnonNumberedIRI n False i
4e14c1bc2b97679b84c6ad996fa11c273b74ea02Christian Maeder
80875f917d741946a39d0ec0b5721e46ba609823Till MossakowskiidToAnonNumberedIRI :: Int -> Bool -> Id -> IRI
80875f917d741946a39d0ec0b5721e46ba609823Till MossakowskiidToAnonNumberedIRI n b i = nullIRI
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowski { iriPath = stringToId ((if b then ('_' :) else id) $ transString (show i)
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowski ++ if n < 0 then "" else '_' : show n)
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowski , iriPos = rangeOfId i
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowski , isAbbrev = True }
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder-- | translate to a valid OWL string
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaedertransString :: String -> String
c505f62dff03727dc14a1f08be48208540d78d4aChristian MaedertransString str = let
f11a68cd12e8e68fbec624b2ccbb2a17e2e80758Christian Maeder x = 'x'
c505f62dff03727dc14a1f08be48208540d78d4aChristian Maeder replaceChar1 d | d == x = [x, x] -- code out existing x!
f11a68cd12e8e68fbec624b2ccbb2a17e2e80758Christian Maeder | iunreserved 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
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowski