ParseOWLAsLibDefn.hs revision 0c3badd7ad83eb89f64ef5ed1122c4fa856fb45d
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederModule : $Header$
f9e0b18852b238ddb649d341194e05d7200d1bbeChristian MaederCopyright : Heng Jiang, Uni Bremen 2004-2007
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederLicense : GPLv2 or higher, see LICENSE.txt
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederMaintainer : Christian.Maeder@dfki.de
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederStability : provisional
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederPortability : non-portable (imports Logic.Logic)
f9e0b18852b238ddb649d341194e05d7200d1bbeChristian Maederanalyse OWL files by calling the external Java parser.
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maedermodule OWL2.ParseOWLAsLibDefn (parseOWL) where
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport Common.AS_Annotation hiding (isAxiom, isDef)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederimport Text.XML.Light (parseXML, onlyElems, filterElementsName)
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
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"
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder else error $ jar ++ " not found"
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
64e1905404e5135e98a26d2ab4150b6764956576Christian Maedercnvimport :: QName -> Annoted SPEC
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maedercnvimport i = emptyAnno $ Spec_inst (cnvtoSimpleId i) [] nullRange
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaedercnvtoSimpleId :: QName -> SPEC_NAME
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaedercnvtoSimpleId = mkSimpleId . filter isAlphaNum . showQN
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 is -> emptyAnno $ Extension
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder [i] -> cnvimport i
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder _ -> emptyAnno $ Union (map cnvimport is) nullRange
0d7d8e3dd817450cf792778d9d4e36420f5e8abfChristian Maeder , bs] nullRange
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 MaederconvertToLibDefN :: FilePath -> [OntologyDocument] -> LIB_DEFN
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian MaederconvertToLibDefN filename l = Lib_defn
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder (emptyLibName $ convertFileToLibStr filename)
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder (map convertone l)