XMLConversion.hs revision 4c684d7a2343be7350eba088f8be42888f86a495
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder{- |
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederModule : $Header$
e6d40133bc9f858308654afb1262b8b483ec5922Till MossakowskiCopyright : (c) Felix Gabriel Mance
1549f3abf73c1122acff724f718b615c82fa3648Till MossakowskiLicense : GPLv2 or higher, see LICENSE.txt
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederMaintainer : f.mance@jacobs-university.de
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederStability : provisional
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederPortability : portable
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian Maeder
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederConversion from Manchester syntax to XML Syntax
e6d40133bc9f858308654afb1262b8b483ec5922Till Mossakowski-}
1549f3abf73c1122acff724f718b615c82fa3648Till Mossakowski
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maedermodule OWL2.XMLConversion where
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maederimport OWL2.AS
f8b715ab2993083761c0aedb78f1819bcf67b6ccChristian Maederimport OWL2.MS
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maederimport OWL2.XML
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maederimport OWL2.Sign
ad270004874ce1d0697fb30d7309f180553bb315Christian Maederimport OWL2.XMLKeywords
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder
5e46b572ed576c0494768998b043d9d340594122Till Mossakowskiimport Text.XML.Light
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wangimport Data.Maybe
23a00c966f2aa8da525d7a7c51933c99964426c0Christian Maederimport Common.AS_Annotation (Named, sentence)
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maederimport qualified Data.Set as Set
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wangimport qualified Data.Map as Map
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian MaedershowIRI :: OWL2.AS.QName -> String
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian MaedershowIRI (QN pre local ty _ _) = case ty of
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder NodeID -> local
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder _ -> pre ++ ":" ++ local
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
aea143fff7a50aceb809845fbc42698b0b3f545aChristian MaedernullQN :: Text.XML.Light.QName
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian MaedernullQN = QName "" Nothing Nothing
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
90c174bac60a72ffd81bc3bf5ae2dd9a61943b8bChristian MaedermakeQN :: String -> Text.XML.Light.QName
2561b4bfc45d280ee2be8a7870314670e4e682e4Christian MaedermakeQN s = nullQN {qName = s}
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus Luettich
aea143fff7a50aceb809845fbc42698b0b3f545aChristian MaedersetQNPrefix :: String -> Text.XML.Light.QName -> Text.XML.Light.QName
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus LuettichsetQNPrefix s qn = qn {qPrefix = Just s}
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedernullElem :: Element
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskinullElem = Element nullQN [] [] Nothing
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder
c7e03d0708369f944b6f235057b39142a21599f2Mihai CodescusetIRI :: IRI -> Element -> Element
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaedersetIRI iri e =
986d3f255182539098a97ac86da9eeee5b7a72e3Christian Maeder let fan = iriType iri
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder ty
8e80792f474d154ff11762fac081a422e34f1accChristian Maeder | fan == NodeID = "nodeID"
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder | fan == Full = "IRI"
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder | otherwise = "abbreviatedIRI"
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder in e {elAttribs = [Attr {attrKey = makeQN ty, attrVal = showIRI iri}]}
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian MaedersetName :: String -> Element -> Element
03136b84a0c70d877e227444f0875e209506b9e4Christian MaedersetName s e = e {elName = nullQN {qName = s,
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder qURI = Just "http://www.w3.org/2002/07/owl#"} }
4c7f058cdd19ce67b2b5d4b7f69703d0f8a21e38Christian Maeder
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian MaedersetContent :: [Element] -> Element -> Element
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian MaedersetContent cl e = e {elContent = map Elem cl}
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian Maeder
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian MaedersetText :: String -> Element -> Element
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian MaedersetText s e = e {elContent = [Text CData {cdVerbatim = CDataText,
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian Maeder cdData = s, cdLine = Nothing}]}
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian Maeder
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian MaedersetInt :: Int -> Element -> Element
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian MaedersetInt i e = e {elAttribs = [Attr {attrKey = makeQN "cardinality",
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian Maeder attrVal = show i}]}
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian Maeder
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaedersetDt :: Bool -> IRI -> Element -> Element
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaedersetDt b dt e = e {elAttribs = elAttribs e ++ [Attr {attrKey
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian Maeder = makeQN (if b then "datatypeIRI" else "facet"), attrVal = showQU dt}]}
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian Maeder
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian MaedersetLangTag :: Maybe LanguageTag -> Element -> Element
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaedersetLangTag ml e = case ml of
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian Maeder Nothing -> e
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian Maeder Just lt -> e {elAttribs = elAttribs e ++ [Attr {attrKey
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian Maeder = setQNPrefix "xml" (makeQN "lang"), attrVal = lt}]}
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian Maeder
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian MaedermwString :: String -> Element
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaedermwString s = setName s nullElem
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian Maeder
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaedermwIRI :: IRI -> Element
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaedermwIRI iri = setIRI iri nullElem
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian Maeder
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian MaedermwNameIRI :: String -> IRI -> Element
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian MaedermwNameIRI s iri = setName s $ mwIRI iri
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaedermwText :: String -> Element
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaedermwText s = setText s nullElem
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian MaedermwSimpleIRI :: IRI -> Element
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian MaedermwSimpleIRI s = setName (if iriType s /= Abbreviated then iriK
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder else "AbbreviatedIRI")
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder $ mwText $ showIRI s
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian MaedermakeElement :: String -> [Element] -> Element
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian MaedermakeElement s el = setContent el $ mwString s
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaedermakeElementWith1 :: String -> Element -> Element
5e46b572ed576c0494768998b043d9d340594122Till MossakowskimakeElementWith1 s e = setContent [e] $ mwString s
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian Maedermake1 :: Bool -> String -> String -> (String -> IRI -> Element) -> IRI ->
fa167e362877db231378e17ba49c66fbb84862fcChristian Maeder [([Element], Element)] -> [Element]
03136b84a0c70d877e227444f0875e209506b9e4Christian Maedermake1 rl hdr shdr f iri = map (\ (a, b) -> makeElement hdr
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder $ a ++ (if rl then [f shdr iri, b] else [b, f shdr iri]))
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maedermake2 :: Bool -> String -> (a -> Element) -> a ->
6a22b2854c3bc9cb4877cb7d29049d6559238639Christian Maeder [([Element], Element)] -> [Element]
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maedermake2 rl hdr f expr = map (\ (x, y) -> makeElement hdr
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder $ x ++ (if rl then [f expr, y] else [y, f expr]))
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaederxmlEntity :: Entity -> Element
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskixmlEntity (Entity ty ent) = mwNameIRI (case ty of
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski Class -> classK
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski Datatype -> datatypeK
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder ObjectProperty -> objectPropertyK
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder DataProperty -> dataPropertyK
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder AnnotationProperty -> annotationPropertyK
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder NamedIndividual -> namedIndividualK) ent
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaederxmlLiteral :: Literal -> Element
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaederxmlLiteral (Literal lf tu) =
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder let part = setName literalK $ mwText lf
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder in case tu of
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder Typed dt -> setDt True dt part
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder Untyped lang -> setLangTag lang $ setDt True (mkQName
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder "http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral")
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder part
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian MaederxmlIndividual :: IRI -> Element
03136b84a0c70d877e227444f0875e209506b9e4Christian MaederxmlIndividual iri =
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder mwNameIRI (if isAnonymous iri then anonymousIndividualK
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder else namedIndividualK) iri
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
aea143fff7a50aceb809845fbc42698b0b3f545aChristian MaederxmlFVPair :: (ConstrainingFacet, RestrictionValue) -> Element
aea143fff7a50aceb809845fbc42698b0b3f545aChristian MaederxmlFVPair (cf, rv) = setDt False cf $ makeElement facetRestrictionK
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder [xmlLiteral rv]
6a22b2854c3bc9cb4877cb7d29049d6559238639Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederxmlObjProp :: ObjectPropertyExpression -> Element
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederxmlObjProp ope = case ope of
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder ObjectProp op -> mwNameIRI objectPropertyK op
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder ObjectInverseOf i -> makeElement objectInverseOfK [xmlObjProp i]
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederxmlDataRange :: DataRange -> Element
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederxmlDataRange dr = case dr of
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder DataType dt cfl ->
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder let dtelem = mwNameIRI datatypeK dt
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder in if null cfl then dtelem
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder else makeElement datatypeRestrictionK
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski $ dtelem : map xmlFVPair cfl
74d9a385499bf903b24848dff450a153f525bda7Christian Maeder DataJunction jt drl -> makeElement (
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder case jt of
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder IntersectionOf -> dataIntersectionOfK
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder UnionOf -> dataUnionOfK)
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder $ map xmlDataRange drl
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder DataComplementOf drn -> makeElement dataComplementOfK
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder [xmlDataRange drn]
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder DataOneOf ll -> makeElement dataOneOfK
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder $ map xmlLiteral ll
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederxmlClassExpression :: ClassExpression -> Element
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederxmlClassExpression ce = case ce of
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder Expression c -> mwNameIRI classK c
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder ObjectJunction jt cel -> makeElement (
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder case jt of
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder IntersectionOf -> objectIntersectionOfK
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder UnionOf -> objectUnionOfK)
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder $ map xmlClassExpression cel
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder ObjectComplementOf cex -> makeElement objectComplementOfK
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski [xmlClassExpression cex]
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski ObjectOneOf il -> makeElement objectOneOfK
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder $ map xmlIndividual il
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder ObjectValuesFrom qt ope cex -> makeElement (
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder case qt of
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder AllValuesFrom -> objectAllValuesFromK
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder SomeValuesFrom -> objectSomeValuesFromK)
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder [xmlObjProp ope, xmlClassExpression cex]
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder ObjectHasValue ope i -> makeElement objectHasValueK
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder [xmlObjProp ope, xmlIndividual i]
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder ObjectHasSelf ope -> makeElement objectHasSelfK [xmlObjProp ope]
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder ObjectCardinality (Cardinality ct i op mce) -> setInt i $ makeElement (
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder case ct of
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder MinCardinality -> objectMinCardinalityK
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder MaxCardinality -> objectMaxCardinalityK
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder ExactCardinality -> objectExactCardinalityK)
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder $ xmlObjProp op :
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder case mce of
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder Nothing -> []
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder Just cexp -> [xmlClassExpression cexp]
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maeder DataValuesFrom qt dp dr -> makeElement (
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder case qt of
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maeder AllValuesFrom -> dataAllValuesFromK
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maeder SomeValuesFrom -> dataSomeValuesFromK)
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski [mwNameIRI dataPropertyK dp, xmlDataRange dr]
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder DataHasValue dp l -> makeElement dataHasValueK
ab642ff136ce716af9e609b667e3f06d766c4ad7Christian Maeder [mwNameIRI dataPropertyK dp, xmlLiteral l]
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder DataCardinality (Cardinality ct i dp mdr) -> setInt i $ makeElement (
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder case ct of
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder MinCardinality -> dataMinCardinalityK
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder MaxCardinality -> dataMaxCardinalityK
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder ExactCardinality -> dataExactCardinalityK)
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder $ mwNameIRI dataPropertyK dp :
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder case mdr of
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder Nothing -> []
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder Just dr -> [xmlDataRange dr]
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian MaederxmlAnnotation :: Annotation -> Element
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederxmlAnnotation (Annotation al ap av) = makeElement annotationK
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder $ map xmlAnnotation al ++ [mwNameIRI annotationPropertyK ap,
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian Maeder case av of
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian Maeder AnnValue iri -> xmlSubject iri
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder AnnValLit l -> xmlLiteral l]
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederxmlSubject :: IRI -> Element
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederxmlSubject iri = if isAnonymous iri then xmlIndividual iri
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder else mwSimpleIRI iri
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian MaederxmlAnnotations :: Annotations -> [Element]
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederxmlAnnotations = map xmlAnnotation
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian Maeder
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian MaederxmlAL :: (a -> Element) -> AnnotatedList a -> [([Element], Element)]
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian MaederxmlAL f al = let annos = map (xmlAnnotations . fst) al
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian Maeder other = map (\ (_, b) -> f b) al
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder in zip annos other
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederxmlLFB :: Extended -> Maybe Relation -> ListFrameBit -> [Element]
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederxmlLFB ext mr lfb = case lfb of
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder AnnotationBit al ->
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder let list = xmlAL mwSimpleIRI al
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder SimpleEntity (Entity _ ap) = ext
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder in case fromMaybe (error "expected domain, range, subproperty") mr of
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maeder SubPropertyOf ->
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maeder let list2 = xmlAL (mwNameIRI annotationPropertyK) al
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder in make1 True subAnnotationPropertyOfK annotationPropertyK
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski mwNameIRI ap list2
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder DRRelation ADomain -> make1 True annotationPropertyDomainK
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder annotationPropertyK mwNameIRI ap list
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder DRRelation ARange -> make1 True annotationPropertyRangeK
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder annotationPropertyK mwNameIRI ap list
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder _ -> error "bad annotation bit"
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski ExpressionBit al ->
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski let list = xmlAL xmlClassExpression al in case ext of
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder Misc anno -> [makeElement (case fromMaybe
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder (error "expected equiv--, disjoint--, class") mr of
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder EDRelation Equivalent -> equivalentClassesK
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder EDRelation Disjoint -> disjointClassesK
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder _ -> error "bad equiv or disjoint classes bit"
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder ) $ xmlAnnotations anno ++ map snd list]
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder ClassEntity c -> make2 True (case fromMaybe
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder (error "expected equiv--, disjoint--, sub-- class") mr of
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder SubClass -> subClassOfK
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder EDRelation Equivalent -> equivalentClassesK
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder EDRelation Disjoint -> disjointClassesK
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder _ -> error "bad equiv, disjoint, subClass bit")
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder xmlClassExpression c list
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder ObjectEntity op -> make2 True (case fromMaybe
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder (error "expected domain, range") mr of
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder DRRelation ADomain -> objectPropertyDomainK
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder DRRelation ARange -> objectPropertyRangeK
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder _ -> "bad object domain or range bit") xmlObjProp op list
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder SimpleEntity (Entity ty ent) -> case ty of
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder DataProperty -> make1 True dataPropertyDomainK dataPropertyK
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder mwNameIRI ent list
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder NamedIndividual -> make2 False classAssertionK
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder xmlIndividual ent list
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder _ -> error "bad expression bit"
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder ObjectBit al ->
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder let list = xmlAL xmlObjProp al in case ext of
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder Misc anno -> [makeElement (case fromMaybe
6a22b2854c3bc9cb4877cb7d29049d6559238639Christian Maeder (error "expected equiv--, disjoint-- obj prop") mr of
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski EDRelation Equivalent -> equivalentObjectPropertiesK
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder EDRelation Disjoint -> disjointObjectPropertiesK
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder _ -> error "bad object bit (equiv, disjoint)"
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder ) $ xmlAnnotations anno ++ map snd list]
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder ObjectEntity o -> make2 True (case fromMaybe
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder (error "expected sub, Inverse, equiv, disjoint op") mr of
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder SubPropertyOf -> subObjectPropertyOfK
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder InverseOf -> inverseObjectPropertiesK
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder EDRelation Equivalent -> equivalentObjectPropertiesK
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder EDRelation Disjoint -> disjointObjectPropertiesK
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder _ -> error "bad object bit (subpropertyof, inverseof)"
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder ) xmlObjProp o list
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder _ -> error "bad object bit"
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder DataBit al ->
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder let list = xmlAL (mwNameIRI dataPropertyK) al in case ext of
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder Misc anno -> [makeElement (case fromMaybe
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder (error "expected equiv--, disjoint-- data prop") mr of
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder EDRelation Equivalent -> equivalentDataPropertiesK
6a22b2854c3bc9cb4877cb7d29049d6559238639Christian Maeder EDRelation Disjoint -> disjointDataPropertiesK
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder _ -> error "bad data bit"
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder ) $ xmlAnnotations anno ++ map snd list]
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder SimpleEntity (Entity _ ent) -> make1 True (case fromMaybe
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder (error "expected sub, equiv or disjoint data") mr of
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder SubPropertyOf -> subDataPropertyOfK
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder EDRelation Equivalent -> equivalentDataPropertiesK
0b6f6d3eeb7b3b36292e60f1b3da5a5ce42eef1aChristian Maeder EDRelation Disjoint -> disjointDataPropertiesK
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder _ -> error "bad data bit"
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder ) dataPropertyK mwNameIRI ent list
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder _ -> error "bad data bit"
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder IndividualSameOrDifferent al ->
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder let list = xmlAL xmlIndividual al in case ext of
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder Misc anno -> [makeElement (case fromMaybe
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder (error "expected same--, different-- individuals") mr of
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder SDRelation Same -> sameIndividualK
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder SDRelation Different -> differentIndividualsK
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder _ -> error "bad individual bit (s or d)"
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder ) $ xmlAnnotations anno ++ map snd list]
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder SimpleEntity (Entity _ i) -> make2 True (case fromMaybe
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder (error "expected same--, different-- individuals") mr of
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder SDRelation Same -> sameIndividualK
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder SDRelation Different -> differentIndividualsK
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder _ -> error "bad individual bit (s or d)"
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder ) xmlIndividual i list
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder _ -> error "bad individual same or different"
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder ObjectCharacteristics al ->
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder let ObjectEntity op = ext
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder annos = map (xmlAnnotations . fst) al
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder list = zip annos (map snd al)
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder in map (\ (x, y) -> makeElement (case y of
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder Functional -> functionalObjectPropertyK
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder InverseFunctional -> inverseFunctionalObjectPropertyK
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder Reflexive -> reflexiveObjectPropertyK
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder Irreflexive -> irreflexiveObjectPropertyK
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder Symmetric -> symmetricObjectPropertyK
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder Asymmetric -> asymmetricObjectPropertyK
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder Transitive -> transitiveObjectPropertyK
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder Antisymmetric -> antisymmetricObjectPropertyK
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder ) $ x ++ [xmlObjProp op]) list
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder DataPropRange al ->
2561b4bfc45d280ee2be8a7870314670e4e682e4Christian Maeder let SimpleEntity (Entity DataProperty dp) = ext
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder list = xmlAL xmlDataRange al
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder in make1 True dataPropertyRangeK dataPropertyK mwNameIRI dp list
fa167e362877db231378e17ba49c66fbb84862fcChristian Maeder IndividualFacts al ->
fa167e362877db231378e17ba49c66fbb84862fcChristian Maeder let SimpleEntity (Entity NamedIndividual i) = ext
fa167e362877db231378e17ba49c66fbb84862fcChristian Maeder annos = map (xmlAnnotations . fst) al
fa167e362877db231378e17ba49c66fbb84862fcChristian Maeder list = zip annos (map snd al)
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder in map (\ (x, f) -> case f of
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder ObjectPropertyFact pn op ind ->
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder makeElement (case pn of
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder Positive -> objectPropertyAssertionK
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder Negative -> negativeObjectPropertyAssertionK
caf021dd48c90ff6b26117f13e1d8c0ef1ca618aChristian Maeder ) $ x ++ [xmlObjProp op]
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder ++ map xmlIndividual [i, ind]
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski DataPropertyFact pn dp lit ->
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder makeElement (case pn of
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder Positive -> dataPropertyAssertionK
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder Negative -> negativeDataPropertyAssertionK
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder ) $ x ++ [mwNameIRI dataPropertyK dp] ++
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder [xmlIndividual i] ++ [xmlLiteral lit]
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder ) list
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian MaederxmlAFB :: Extended -> Annotations -> AnnFrameBit -> [Element]
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaederxmlAFB ext anno afb = case afb of
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder AnnotationFrameBit -> case ext of
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder SimpleEntity ent ->
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder let Entity ty iri = ent in case ty of
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder AnnotationProperty -> map (\ (Annotation as s v) ->
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder makeElement annotationAssertionK $
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder xmlAnnotations as
44d2a211a352759ee988ed8353026f5fa9511209Christian Maeder ++ [mwNameIRI annotationPropertyK iri]
44d2a211a352759ee988ed8353026f5fa9511209Christian Maeder ++ [xmlSubject s, case v of
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder AnnValue avalue -> xmlSubject avalue
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder AnnValLit l -> xmlLiteral l]) anno
4fc727afa544a757d1959ce77c02208f8bf330dcChristian Maeder _ -> [makeElement declarationK
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder $ xmlAnnotations anno ++ [xmlEntity ent]]
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder Misc as ->
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder let [Annotation _ ap _] = anno
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder in [makeElement declarationK
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder $ xmlAnnotations as ++ [mwNameIRI annotationPropertyK ap]]
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder ClassEntity ent -> case ent of
6a22b2854c3bc9cb4877cb7d29049d6559238639Christian Maeder Expression c -> [makeElement declarationK
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder $ xmlAnnotations anno ++ [xmlEntity $ Entity Class c]]
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder _ -> error "XML conversion: incompatible manchester and XML syntax"
4fc727afa544a757d1959ce77c02208f8bf330dcChristian Maeder ObjectEntity ent -> case ent of
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder ObjectProp o -> [makeElement declarationK
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder $ xmlAnnotations anno ++
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder [xmlEntity $ Entity ObjectProperty o]]
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder _ -> error "XML conversion: incompatible manchester and XML syntax"
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder DataFunctional ->
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder let SimpleEntity (Entity _ dp) = ext
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder in [makeElement functionalDataPropertyK
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder $ xmlAnnotations anno ++ [mwNameIRI dataPropertyK dp]]
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder DatatypeBit dr ->
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder let SimpleEntity (Entity _ dt) = ext
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder in [makeElement datatypeDefinitionK
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder $ xmlAnnotations anno ++ [mwNameIRI datatypeK dt,
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder xmlDataRange dr]]
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski ClassDisjointUnion cel ->
74d9a385499bf903b24848dff450a153f525bda7Christian Maeder let ClassEntity c = ext
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski in [makeElement disjointUnionK
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder $ xmlAnnotations anno ++ map xmlClassExpression (c : cel)]
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder ClassHasKey op dp ->
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski let ClassEntity c = ext
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder in [makeElement hasKeyK
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski $ xmlAnnotations anno ++ [xmlClassExpression c]
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder ++ map xmlObjProp op ++ map (mwNameIRI dataPropertyK) dp]
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski ObjectSubPropertyChain opl ->
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski let ObjectEntity op = ext
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski xmlop = map xmlObjProp opl
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder in [makeElement subObjectPropertyOfK
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder $ xmlAnnotations anno ++
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder [makeElement objectPropertyChainK xmlop, xmlObjProp op]]
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederxmlFrameBit :: Extended -> FrameBit -> [Element]
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederxmlFrameBit ext fb = case fb of
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder ListFrameBit mr lfb -> xmlLFB ext mr lfb
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder AnnFrameBit anno afb -> xmlAFB ext anno afb
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederxmlAxioms :: Axiom -> [Element]
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederxmlAxioms (PlainAxiom ext fb) = xmlFrameBit ext fb
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederxmlFrames :: Frame -> [Element]
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederxmlFrames (Frame ext fbl) = concatMap (xmlFrameBit ext) fbl
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederxmlImport :: ImportIRI -> Element
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederxmlImport i = setName importK $ mwText $ showIRI i
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaedersetPref :: String -> Element -> Element
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaedersetPref s e = e {elAttribs = Attr {attrKey = makeQN "name"
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder , attrVal = s} : elAttribs e}
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
d058429727dd696a0327cdc28cadd268c34c36baChristian Maederset1Map :: (String, String) -> Element
d058429727dd696a0327cdc28cadd268c34c36baChristian Maederset1Map (s, iri) = setPref s $ mwIRI $ setFull $ appendBase "" $ mkQName iri
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
d058429727dd696a0327cdc28cadd268c34c36baChristian MaederxmlPrefixes :: PrefixMap -> [Element]
d058429727dd696a0327cdc28cadd268c34c36baChristian MaederxmlPrefixes pm = map (setName prefixK . set1Map) $ Map.toList pm
d058429727dd696a0327cdc28cadd268c34c36baChristian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaedersetXMLNS :: Element -> Element
d058429727dd696a0327cdc28cadd268c34c36baChristian MaedersetXMLNS e = e {elAttribs = Attr {attrKey = makeQN "xmlns", attrVal =
d058429727dd696a0327cdc28cadd268c34c36baChristian Maeder "http://www.w3.org/2002/07/owl#"} : elAttribs e}
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
d058429727dd696a0327cdc28cadd268c34c36baChristian MaedersetOntIRI :: OntologyIRI -> Element -> Element
329d1810c6d5a5a0827e1d07503d94431578d176Christian MaedersetOntIRI iri e =
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski if elem iri [nullQName, dummyQName] then e
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder else e {elAttribs = Attr {attrKey = makeQN "ontologyIRI",
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder attrVal = showQU iri} : elAttribs e}
d058429727dd696a0327cdc28cadd268c34c36baChristian Maeder
d058429727dd696a0327cdc28cadd268c34c36baChristian MaedersetBase :: String -> Element -> Element
03136b84a0c70d877e227444f0875e209506b9e4Christian MaedersetBase s e = e {elAttribs = Attr {attrKey = nullQN {qName = "base",
5a9a06d23910b9521e1d1cd39865ac7912ccee4bChristian Maeder qPrefix = Just "xml"}, attrVal = s} : elAttribs e}
5a9a06d23910b9521e1d1cd39865ac7912ccee4bChristian Maeder
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaederxmlOntologyDoc :: Sign -> OntologyDocument -> Element
d058429727dd696a0327cdc28cadd268c34c36baChristian MaederxmlOntologyDoc s od =
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder let ont = ontology od
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski pd = prefixDeclaration od
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder emptyPref = fromMaybe (showIRI dummyQName) $ Map.lookup "" pd
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder in setBase emptyPref $ setXMLNS $ setOntIRI (name ont)
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder $ makeElement "Ontology" $ xmlPrefixes pd
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder ++ map xmlImport (imports ont)
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder ++ concatMap xmlFrames (ontFrames ont)
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder ++ concatMap xmlAnnotations (ann ont)
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder ++ signToDec s
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian MaedersignToDec :: Sign -> [Element]
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaedersignToDec s =
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder let c = Set.toList $ concepts s
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder op = Set.toList $ objectProperties s
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder dp = Set.toList $ dataProperties s
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder ap = Set.toList $ annotationRoles s
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder dt = Set.toList $ datatypes s
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder i = Set.toList $ individuals s
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder in map (makeElementWith1 declarationK . mwNameIRI classK) c
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder ++ map (makeElementWith1 declarationK . mwNameIRI objectPropertyK) op
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder ++ map (makeElementWith1 declarationK . mwNameIRI dataPropertyK) dp
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder ++ map (makeElementWith1 declarationK . mwNameIRI annotationPropertyK) ap
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder ++ map (makeElementWith1 declarationK . mwNameIRI datatypeK) dt
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder ++ map (makeElementWith1 declarationK . mwNameIRI namedIndividualK) i
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian MaedermkODoc :: Sign -> [Named Axiom] -> String
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskimkODoc s na = ppTopElement $ xmlOntologyDoc s $ emptyOntologyDoc
32562a567baac248a00782d2727716c13117dc4aChristian Maeder {
32562a567baac248a00782d2727716c13117dc4aChristian Maeder ontology = emptyOntologyD
32562a567baac248a00782d2727716c13117dc4aChristian Maeder {
32562a567baac248a00782d2727716c13117dc4aChristian Maeder ontFrames = map (axToFrame . sentence) na
32562a567baac248a00782d2727716c13117dc4aChristian Maeder },
32562a567baac248a00782d2727716c13117dc4aChristian Maeder prefixDeclaration = prefixMap s
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder }
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder