ParseOWLAsLibDefn.hs revision 0c3badd7ad83eb89f64ef5ed1122c4fa856fb45d
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder{- |
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederModule : $Header$
f9e0b18852b238ddb649d341194e05d7200d1bbeChristian MaederCopyright : Heng Jiang, Uni Bremen 2004-2007
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederLicense : GPLv2 or higher, see LICENSE.txt
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescu
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederMaintainer : Christian.Maeder@dfki.de
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederStability : provisional
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederPortability : non-portable (imports Logic.Logic)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder
f9e0b18852b238ddb649d341194e05d7200d1bbeChristian Maederanalyse OWL files by calling the external Java parser.
f9e0b18852b238ddb649d341194e05d7200d1bbeChristian Maeder-}
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maedermodule OWL2.ParseOWLAsLibDefn (parseOWL) where
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport OWL2.AS
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport OWL2.MS
64e1905404e5135e98a26d2ab4150b6764956576Christian Maederimport OWL2.Rename
ecf557c0b4f953106755a239da2c0b168064d3f4Christian Maeder
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport Data.Char
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder
f9e0b18852b238ddb649d341194e05d7200d1bbeChristian Maederimport Common.Id
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport Common.LibName
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport Common.ProverTools
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport Common.AS_Annotation hiding (isAxiom, isDef)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport Logic.Grothendieck
67869d63d1725c79e4c07b51acd466a31932b275Christian Maederimport OWL2.Logic_OWL2
bdf2e01977470bedcb4425e2dadabc9e9f6ba149Ewaryst Schulzimport OWL2.XML
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder
64e1905404e5135e98a26d2ab4150b6764956576Christian Maederimport Driver.Options
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder
64e1905404e5135e98a26d2ab4150b6764956576Christian Maederimport Syntax.AS_Library
64e1905404e5135e98a26d2ab4150b6764956576Christian Maederimport Syntax.AS_Structured
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder
bdf2e01977470bedcb4425e2dadabc9e9f6ba149Ewaryst Schulzimport System.Directory
64e1905404e5135e98a26d2ab4150b6764956576Christian Maederimport System.Exit
4c7f058cdd19ce67b2b5d4b7f69703d0f8a21e38Christian Maederimport System.FilePath
4c7f058cdd19ce67b2b5d4b7f69703d0f8a21e38Christian Maederimport System.Process
4c7f058cdd19ce67b2b5d4b7f69703d0f8a21e38Christian Maeder
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport Text.XML.Light (parseXML, onlyElems, filterElementsName)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder-- | call for owl parser (env. variable $HETS_OWL_TOOLS muss be defined)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederparseOWL :: FilePath -- ^ local filepath or uri
67869d63d1725c79e4c07b51acd466a31932b275Christian Maeder -> IO LIB_DEFN -- ^ map: uri -> OntologyFile
083a5256468076d5a9bfeb22a6e97076c224252eChristian MaederparseOWL filename = do
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder let jar = "OWL2Parser.jar"
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder absfile <- if checkUri filename then return filename else
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder fmap ("file://" ++) $ canonicalizePath filename
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder (hasJar, toolPath) <- check4HetsOWLjar jar
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder if hasJar then do
bdf2e01977470bedcb4425e2dadabc9e9f6ba149Ewaryst Schulz (exitCode, result, errStr) <- readProcessWithExitCode "java"
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder ["-jar", toolPath </> jar, absfile, "xml"] ""
65dce48b81f69e11a36bf1051314a845299446e1Christian Maeder case exitCode of
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder ExitSuccess -> return $ parseProc filename result
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder _ -> error $ "process stop! " ++ shows exitCode "\n"
64e1905404e5135e98a26d2ab4150b6764956576Christian Maeder ++ errStr
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder else error $ jar ++ " not found"
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder
67869d63d1725c79e4c07b51acd466a31932b275Christian MaederparseProc :: FilePath -> String -> LIB_DEFN
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederparseProc filename str = convertToLibDefN filename
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder $ unifyDocs $ map xmlBasicSpec
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder $ concatMap (filterElementsName $ isSmth "Ontology")
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder $ onlyElems $ parseXML str
62eaa2fb831613d8a6e59687f83a45be1041ab17Christian Maeder
64e1905404e5135e98a26d2ab4150b6764956576Christian Maedercnvimport :: QName -> Annoted SPEC
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maedercnvimport i = emptyAnno $ Spec_inst (cnvtoSimpleId i) [] nullRange
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaedercnvtoSimpleId :: QName -> SPEC_NAME
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaedercnvtoSimpleId = mkSimpleId . filter isAlphaNum . showQN
67869d63d1725c79e4c07b51acd466a31932b275Christian Maeder
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaedercreateSpec :: OntologyDocument -> Annoted SPEC
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaedercreateSpec o = let
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder bs = emptyAnno $ Basic_spec (G_basic_spec OWL2 o) nullRange
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder in case imports $ ontology o of
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder [] -> bs
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder is -> emptyAnno $ Extension
67869d63d1725c79e4c07b51acd466a31932b275Christian Maeder [case is of
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder [i] -> cnvimport i
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder _ -> emptyAnno $ Union (map cnvimport is) nullRange
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder , bs] nullRange
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder
62eaa2fb831613d8a6e59687f83a45be1041ab17Christian Maederconvertone :: OntologyDocument -> Annoted LIB_ITEM
64e1905404e5135e98a26d2ab4150b6764956576Christian Maederconvertone o = emptyAnno $ Spec_defn
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder (cnvtoSimpleId $ name $ ontology o)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder emptyGenericity
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder (createSpec o)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder nullRange
67869d63d1725c79e4c07b51acd466a31932b275Christian Maeder
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederconvertToLibDefN :: FilePath -> [OntologyDocument] -> LIB_DEFN
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederconvertToLibDefN filename l = Lib_defn
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder (emptyLibName $ convertFileToLibStr filename)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder (map convertone l)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder nullRange
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder []
67869d63d1725c79e4c07b51acd466a31932b275Christian Maeder