ManchesterParser.hs revision 80875f917d741946a39d0ec0b5721e46ba609823
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian MaederCopyright : (c) Felix Gabriel Mance
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian MaederLicense : GPLv2 or higher, see LICENSE.txt
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederMaintainer : f.mance@jacobs-university.de
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederStability : provisional
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederPortability : portable
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederManchester Syntax parser
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederReferences : <http://www.w3.org/TR/2009/NOTE-owl2-manchester-syntax-20091027/>
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettichimport qualified Common.GlobalAnnotations as GA (PrefixMap)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederimport qualified Data.Map as Map
d67a33b40578beef2e255a274f89bb9c34aaf056Christian MaederoptAnnos :: CharParser st a -> CharParser st (Annotations, a)
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian MaederoptAnnos p = do
e593b89bfd4952698dc37feced21cefe869d87a2Christian Maeder as <- optionalAnnos
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder return (as, a)
760ae19a92dde8249679a674f93f58d26a7c5f6bChristian MaederoptionalAnnos :: CharParser st Annotations
c55a0f77be7e88d3620b419ec8961f4379a586e3Klaus LuettichoptionalAnnos = option [] annotations
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maederannotations :: CharParser st Annotations
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maederannotations = do
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder pkeyword annotationsC
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder fmap (map $ \ (as, (i, v)) -> Annotation as i v)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder . sepByComma . optAnnos $ pair uriP annotationValue
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederdescriptionAnnotatedList :: CharParser st [(Annotations, ClassExpression)]
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederdescriptionAnnotatedList = sepByComma $ optAnnos description
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaedermakeFrame :: Extended -> [FrameBit] -> Frame
b0294d73dcefc502ddaa13e18b46103a5916971fTill MossakowskimakeFrame ext fbl = Frame ext
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $ if null fbl then
77a65251ee036c6aaf09c2775315a4ee24259fbdJorina Freya Gerken [AnnFrameBit [] $ AnnotationFrameBit Declaration]
4d7d7f9a423490731c73403c7806bd66967da946Christian MaederannotationPropertyFrame :: CharParser st Frame
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederannotationPropertyFrame = do
97812b7ce9860bf514a8822a63503451795dbc65Klaus Luettich pkeyword annotationPropertyC
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder x <- many apBit
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder return $ makeFrame (SimpleEntity $ mkEntity AnnotationProperty ap) x
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederapBit :: CharParser st FrameBit
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder pkeyword subPropertyOfC
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder x <- sepByComma $ optAnnos uriP
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers return $ ListFrameBit (Just SubPropertyOf) $ AnnotationBit x
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder dr <- domainOrRange
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder x <- sepByComma $ optAnnos uriP
33d042fe6a9eb27a4c48f840b80838f3e7d98e34Christian Maeder return $ ListFrameBit (Just $ DRRelation dr) $ AnnotationBit x
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder x <- annotations
ce50fe187cdae64e75e510daafb78156280bdb91Christian Maeder return $ AnnFrameBit x $ AnnotationFrameBit Assertion
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix ReckersdatatypeBit :: CharParser st Frame
c55a0f77be7e88d3620b419ec8961f4379a586e3Klaus LuettichdatatypeBit = do
6ae5607d2def114f998fd49bac4eef12a2620fafChristian Maeder pkeyword datatypeC
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder duri <- datatypeUri
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder as1 <- many annotations
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder mp <- optionMaybe $ pkeyword equivalentToC >> pair optionalAnnos dataRange
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder as2 <- many annotations
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder return $ Frame (SimpleEntity $ mkEntity Datatype duri)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $ map (`AnnFrameBit` AnnotationFrameBit Assertion) as1 ++ case mp of
ebe517300051f765f2ed856a789dd5613d681ab0Klaus Luettich Nothing -> [AnnFrameBit [] $ AnnotationFrameBit Declaration]
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers Just (ans, dr) -> [AnnFrameBit ans $ DatatypeBit dr]
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers ++ map (`AnnFrameBit` AnnotationFrameBit Assertion) as2
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian MaederclassFrame :: CharParser st Frame
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian MaederclassFrame = do
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder pkeyword classC
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder i <- description
ce50fe187cdae64e75e510daafb78156280bdb91Christian Maeder plain <- many classFrameBit
4e7050bcbcf0f372a5bad32ecd0282bccabf0983Klaus Luettich -- ignore Individuals: ... !
6ae5607d2def114f998fd49bac4eef12a2620fafChristian Maeder optional $ pkeyword individualsC >> sepByComma individual
e593b89bfd4952698dc37feced21cefe869d87a2Christian Maeder return $ makeFrame (ClassEntity i) plain
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederclassFrameBit :: CharParser st FrameBit
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederclassFrameBit = do
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder pkeyword subClassOfC
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers ds <- descriptionAnnotatedList
5b818f10e11fc79def1fdd5c8a080d64a6438d87Christian Maeder return $ ListFrameBit (Just SubClass) $ ExpressionBit ds
5d4038657f6a63e131f5804af2f7957b69e15a43Klaus Luettich e <- equivOrDisjoint
5d4038657f6a63e131f5804af2f7957b69e15a43Klaus Luettich ds <- descriptionAnnotatedList
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder return $ ListFrameBit (Just $ EDRelation e) $ ExpressionBit ds
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder pkeyword disjointUnionOfC
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder as <- optionalAnnos
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder ds <- sepByComma description
e8d782e6e650b71a2b0ee8461fd8d9fa31525591Christian Maeder return $ AnnFrameBit as $ ClassDisjointUnion ds
c5e10ba19c9854112e5d29f491759e8e89f83652Christian Maeder pkeyword hasKeyC
5b818f10e11fc79def1fdd5c8a080d64a6438d87Christian Maeder as <- optionalAnnos
88c66e48620750c42b94db9feb01b42ae23dba97Till Mossakowski o <- sepByComma objectPropertyExpr
96ef2e46d048c357927f2795a40e9e66f21b85fbSonja Gröning return $ AnnFrameBit as $ ClassHasKey o []
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder as <- annotations
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder return $ AnnFrameBit as $ AnnotationFrameBit Assertion
96ef2e46d048c357927f2795a40e9e66f21b85fbSonja GröningobjPropExprAList :: CharParser st [(Annotations, ObjectPropertyExpression)]
96ef2e46d048c357927f2795a40e9e66f21b85fbSonja GröningobjPropExprAList = sepByComma $ optAnnos objectPropertyExpr
eeb419aa20c97b4af973e97ee6ae77a8eed29e15Till MossakowskiobjectFrameBit :: CharParser st FrameBit
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix ReckersobjectFrameBit = do
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder r <- domainOrRange
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers ds <- descriptionAnnotatedList
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder return $ ListFrameBit (Just $ DRRelation r) $ ExpressionBit ds
7d09621f989f5e6dfbf603b36b2fccbacf639a3cTill Mossakowski ds <- sepByComma $ optAnnos objectPropertyCharacter
88c66e48620750c42b94db9feb01b42ae23dba97Till Mossakowski return $ ListFrameBit Nothing $ ObjectCharacteristics ds
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers subPropertyKey
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder ds <- objPropExprAList
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till Mossakowski return $ ListFrameBit (Just SubPropertyOf) $ ObjectBit ds
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till Mossakowski e <- equivOrDisjoint
327a9b9bf44b6e33f71fee7526dc1c0035251591Christian Maeder ds <- objPropExprAList
b49276c9f50038e0bd499ad49f7bd6444566a834Christian Maeder return $ ListFrameBit (Just $ EDRelation e) $ ObjectBit ds
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder pkeyword inverseOfC
5958fabb264ec3f5b2125ac5602121bd34814a79Klaus Luettich ds <- objPropExprAList
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder return $ ListFrameBit (Just InverseOf) $ ObjectBit ds
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder pkeyword subPropertyChainC
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder as <- optionalAnnos
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder os <- sepBy1 objectPropertyExpr (keyword oS)
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder return $ AnnFrameBit as $ ObjectSubPropertyChain os
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till Mossakowski as <- annotations
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder return $ AnnFrameBit as $ AnnotationFrameBit Assertion
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix ReckersobjectPropertyFrame :: CharParser st Frame
b49276c9f50038e0bd499ad49f7bd6444566a834Christian MaederobjectPropertyFrame = do
88c800932dd7053322501ea2039d9f234be6866cKlaus Luettich pkeyword objectPropertyC
ed9207cf24e96b0d6f59985822054ae28cb69b2eChristian Maeder ouri <- objectPropertyExpr
b49276c9f50038e0bd499ad49f7bd6444566a834Christian Maeder as <- many objectFrameBit
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder return $ makeFrame (ObjectEntity ouri) as
33d042fe6a9eb27a4c48f840b80838f3e7d98e34Christian MaederdataPropExprAList :: CharParser st [(Annotations, DataPropertyExpression)]
b10267ae0a6523b73113fc2dee9ea628266fce60Christian MaederdataPropExprAList = sepByComma $ optAnnos uriP
fa21fba9ceb1ddf7b3efd54731a12ed8750191d8Christian MaederdataFrameBit :: CharParser st FrameBit
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian MaederdataFrameBit = do
05a8b581f98b928baca6dab60cd20277659ac760Christian Maeder pkeyword domainC
ed9207cf24e96b0d6f59985822054ae28cb69b2eChristian Maeder ds <- descriptionAnnotatedList
fa21fba9ceb1ddf7b3efd54731a12ed8750191d8Christian Maeder return $ ListFrameBit (Just (DRRelation ADomain)) $ ExpressionBit ds
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder pkeyword rangeC
b49276c9f50038e0bd499ad49f7bd6444566a834Christian Maeder ds <- sepByComma $ optAnnos dataRange
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder return $ ListFrameBit Nothing $ DataPropRange ds
b905126bab9454b89041f92b3c50bb9efc85e427Klaus Luettich as <- optionalAnnos
05c19431fd580d3426f990cc1d8d54c630e0525aTill Mossakowski keyword functionalS
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder return $ AnnFrameBit as DataFunctional
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder subPropertyKey
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder ds <- dataPropExprAList
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder return $ ListFrameBit (Just SubPropertyOf) $ DataBit ds
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder e <- equivOrDisjoint
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder ds <- dataPropExprAList
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder return $ ListFrameBit (Just (EDRelation e)) $ DataBit ds
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder as <- annotations
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder return $ AnnFrameBit as $ AnnotationFrameBit Assertion
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederdataPropertyFrame :: CharParser st Frame
b905126bab9454b89041f92b3c50bb9efc85e427Klaus LuettichdataPropertyFrame = do
b905126bab9454b89041f92b3c50bb9efc85e427Klaus Luettich pkeyword dataPropertyC
b905126bab9454b89041f92b3c50bb9efc85e427Klaus Luettich as <- many dataFrameBit
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder return $ makeFrame (SimpleEntity $ mkEntity DataProperty duri) as
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederfact :: CharParser st Fact
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder pn <- option Positive $ keyword notS >> return Negative
ef67402074be14deb95e4ff564737d5593144130Klaus Luettich return $ DataPropertyFact pn u c
5958fabb264ec3f5b2125ac5602121bd34814a79Klaus Luettich t <- individual
5958fabb264ec3f5b2125ac5602121bd34814a79Klaus Luettich return $ ObjectPropertyFact pn (ObjectProp u) t
ef67402074be14deb95e4ff564737d5593144130Klaus LuettichiFrameBit :: CharParser st FrameBit
1323eba62fc519b068f5aaec4f9d2be05ffabea9Klaus LuettichiFrameBit = do
1323eba62fc519b068f5aaec4f9d2be05ffabea9Klaus Luettich pkeyword typesC
1323eba62fc519b068f5aaec4f9d2be05ffabea9Klaus Luettich ds <- descriptionAnnotatedList
725a68ec81cba9b8aa8647bebfb5baa449803e7eKlaus Luettich return $ ListFrameBit (Just Types) $ ExpressionBit ds
33d042fe6a9eb27a4c48f840b80838f3e7d98e34Christian Maeder s <- sameOrDifferent
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder is <- sepByComma $ optAnnos individual
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder return $ ListFrameBit (Just $ SDRelation s) $ IndividualSameOrDifferent is
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder pkeyword factsC
2b770da5668af0faade8133dc6377a0fcaf44134Christian Maeder fs <- sepByComma $ optAnnos fact
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder return $ ListFrameBit Nothing $ IndividualFacts fs
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich a <- annotations
4e7050bcbcf0f372a5bad32ecd0282bccabf0983Klaus Luettich return $ AnnFrameBit a $ AnnotationFrameBit Assertion
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus LuettichindividualFrame :: CharParser st Frame
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian MaederindividualFrame = do
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich pkeyword individualC
4e7050bcbcf0f372a5bad32ecd0282bccabf0983Klaus Luettich iuri <- individual
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder as <- many iFrameBit
e593b89bfd4952698dc37feced21cefe869d87a2Christian Maeder return $ makeFrame (SimpleEntity $ mkEntity NamedIndividual iuri) as
e593b89bfd4952698dc37feced21cefe869d87a2Christian Maedermisc :: CharParser st Frame
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till Mossakowski e <- equivOrDisjointKeyword classesC
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder as <- optionalAnnos
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder ds <- sepByComma description
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder return $ Frame (Misc as) [ListFrameBit (Just $ EDRelation e)
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder $ ExpressionBit $ emptyAnnoList ds]
33d042fe6a9eb27a4c48f840b80838f3e7d98e34Christian Maeder e <- equivOrDisjointKeyword propertiesC
94d3aa05411444596b44ede4531f05dd7ac20fdfChristian Maeder as <- optionalAnnos
dc929508a3bd3c666e9b0182d56898fcafb5d66fChristian Maeder es <- sepByComma objectPropertyExpr
dc929508a3bd3c666e9b0182d56898fcafb5d66fChristian Maeder -- indistinguishable from dataProperties
94d3aa05411444596b44ede4531f05dd7ac20fdfChristian Maeder return $ Frame (Misc as) [ListFrameBit (Just $ EDRelation e)
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder $ ObjectBit $ emptyAnnoList es]
ddc9315cc0b1f5dd3d8f99a77f1c75064db33b48Christian Maeder s <- sameOrDifferentIndu
ddc9315cc0b1f5dd3d8f99a77f1c75064db33b48Christian Maeder as <- optionalAnnos
5d522dff4d0fabf57dd476d4c3de15d354a89f62Christian Maeder is <- sepByComma individualUri
5d522dff4d0fabf57dd476d4c3de15d354a89f62Christian Maeder return $ Frame (Misc as) [ListFrameBit (Just $ SDRelation s)
5d522dff4d0fabf57dd476d4c3de15d354a89f62Christian Maeder $ IndividualSameOrDifferent $ emptyAnnoList is]
8410667510a76409aca9bb24ff0eda0420088274Christian Maederframes :: CharParser st [Frame]
8410667510a76409aca9bb24ff0eda0420088274Christian Maederframes = many $ datatypeBit <|> classFrame
ac43fa22d2d3f91a17674ac164cba3cf39a17795Klaus Luettich <|> objectPropertyFrame <|> dataPropertyFrame <|> individualFrame
ac43fa22d2d3f91a17674ac164cba3cf39a17795Klaus Luettich <|> annotationPropertyFrame <|> misc
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian MaederbasicSpec :: GA.PrefixMap -> CharParser st OntologyDocument
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix ReckersbasicSpec pm = do
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder nss <- many nsEntry
ba0ec5e897ef99d420c8c14c2374e0f32b7043dbKlaus Luettich ou <- option nullIRI $ pkeyword ontologyC >> option nullIRI uriP
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers ie <- many importEntry
5b818f10e11fc79def1fdd5c8a080d64a6438d87Christian Maeder ans <- many annotations
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder if null nss && null ie && null ans && null as && ou == nullIRI
5b818f10e11fc79def1fdd5c8a080d64a6438d87Christian Maeder then fail "empty ontology"
88c66e48620750c42b94db9feb01b42ae23dba97Till Mossakowski else return $ OntologyDocument
5b818f10e11fc79def1fdd5c8a080d64a6438d87Christian Maeder (Map.union (Map.fromList $ map (\ (p, q) -> (p, showIRICompact q)) nss)
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder (convertPrefixMap pm))
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder (emptyOntology as)
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers { imports = ie
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers , name = ou }