XMLConversion.hs revision 668c9c725a11c0f77057152148570af853a1bc0d
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian Maeder{- |
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian MaederModule : $Header$
09249711700a6acbc40a2e337688b434d7aafa28Christian MaederCopyright : (c) Felix Gabriel Mance
76647324ed70f33b95a881b536d883daccf9568dChristian MaederLicense : GPLv2 or higher, see LICENSE.txt
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian Maeder
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian MaederMaintainer : f.mance@jacobs-university.de
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederStability : provisionalM
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian MaederPortability : portable
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederConversion from Manchester syntax to XML Syntax
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder-}
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maedermodule OWL2.XMLConversion where
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maederimport OWL2.AS
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maederimport OWL2.MS
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maederimport OWL2.XML
950e053ba55ac9c7d9c26a1ab48bd00202b29511Christian Maederimport OWL2.Sign
0a39036fa485579a7b7c81cdd44a412392571927Christian Maederimport OWL2.XMLKeywords
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maeder
0a39036fa485579a7b7c81cdd44a412392571927Christian Maederimport Text.XML.Light
d48085f765fca838c1d972d2123601997174583dChristian Maederimport Data.Maybe
5d7e4bf173534e7eb3fc84dce7bb0151079d3f8aChristian Maederimport Common.AS_Annotation (Named, sentence)
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder
0a39036fa485579a7b7c81cdd44a412392571927Christian Maederimport qualified Data.Set as Set
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian Maederimport qualified Data.Map as Map
d48085f765fca838c1d972d2123601997174583dChristian Maeder
76647324ed70f33b95a881b536d883daccf9568dChristian MaedershowIRI :: OWL2.AS.QName -> String
d48085f765fca838c1d972d2123601997174583dChristian MaedershowIRI (QN pre local _ _ _) = pre ++ ":" ++ local
d48085f765fca838c1d972d2123601997174583dChristian Maeder
76647324ed70f33b95a881b536d883daccf9568dChristian MaedernullQN :: Text.XML.Light.QName
d48085f765fca838c1d972d2123601997174583dChristian MaedernullQN = QName "" Nothing Nothing
d48085f765fca838c1d972d2123601997174583dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian MaedermakeQN :: String -> Text.XML.Light.QName
d48085f765fca838c1d972d2123601997174583dChristian MaedermakeQN s = nullQN {qName = s}
d48085f765fca838c1d972d2123601997174583dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian MaedersetQNPrefix :: String -> Text.XML.Light.QName -> Text.XML.Light.QName
d48085f765fca838c1d972d2123601997174583dChristian MaedersetQNPrefix s qn = qn {qPrefix = Just s}
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder
a39a820684c1974350f46593025e0bb279f41bc6Christian MaedernullElem :: Element
a39a820684c1974350f46593025e0bb279f41bc6Christian MaedernullElem = Element nullQN [] [] Nothing
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder
76647324ed70f33b95a881b536d883daccf9568dChristian MaedersetIRI :: IRI -> Element -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaedersetIRI iri e =
d48085f765fca838c1d972d2123601997174583dChristian Maeder let fan = iriType iri
d48085f765fca838c1d972d2123601997174583dChristian Maeder ty
d48085f765fca838c1d972d2123601997174583dChristian Maeder | fan == NodeID = "nodeID"
d48085f765fca838c1d972d2123601997174583dChristian Maeder | fan == Full = "IRI"
d48085f765fca838c1d972d2123601997174583dChristian Maeder | otherwise = "abbreviatedIRI"
d48085f765fca838c1d972d2123601997174583dChristian Maeder in e {elAttribs = [Attr {attrKey = makeQN ty, attrVal = showIRI iri}]}
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder
a716971174535184da7713ed308423e355a4aa66Christian MaedersetName :: String -> Element -> Element
793945d4ac7c0f22760589c87af8e71427c76118Christian MaedersetName s e = e {elName = nullQN {qName = s,
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder qURI = Just "http://www.w3.org/2002/07/owl#"} }
5e5c3fbbf8c22b883d551d83429b9f8d8041f1e0Christian Maeder
feab655b0275874012c3cf9859064c177860cc70Christian MaedersetContent :: [Element] -> Element -> Element
f2c2b420e386a90d940c758c631d16f12952d2b7Christian MaedersetContent cl e = e {elContent = map Elem cl}
f2c2b420e386a90d940c758c631d16f12952d2b7Christian Maeder
f2c2b420e386a90d940c758c631d16f12952d2b7Christian MaedersetText :: String -> Element -> Element
793945d4ac7c0f22760589c87af8e71427c76118Christian MaedersetText s e = e {elContent = [Text CData {cdVerbatim = CDataText,
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder cdData = s, cdLine = Nothing}]}
a716971174535184da7713ed308423e355a4aa66Christian Maeder
a716971174535184da7713ed308423e355a4aa66Christian MaedersetInt :: Int -> Element -> Element
5e5c3fbbf8c22b883d551d83429b9f8d8041f1e0Christian MaedersetInt i e = e {elAttribs = [Attr {attrKey = makeQN "cardinality",
a716971174535184da7713ed308423e355a4aa66Christian Maeder attrVal = show i}]}
a716971174535184da7713ed308423e355a4aa66Christian Maeder
a716971174535184da7713ed308423e355a4aa66Christian MaedersetDt :: Bool -> IRI -> Element -> Element
a716971174535184da7713ed308423e355a4aa66Christian MaedersetDt b dt e = e {elAttribs = elAttribs e ++ [Attr {attrKey
5e5c3fbbf8c22b883d551d83429b9f8d8041f1e0Christian Maeder = makeQN (if b then "datatypeIRI" else "facet"), attrVal = showQU dt}]}
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder
793945d4ac7c0f22760589c87af8e71427c76118Christian MaedersetLangTag :: Maybe LanguageTag -> Element -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaedersetLangTag ml e = case ml of
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder Nothing -> e
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder Just lt -> e {elAttribs = elAttribs e ++ [Attr {attrKey
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder = setQNPrefix "xml" (makeQN "lang"), attrVal = lt}]}
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian MaedermwString :: String -> Element
793945d4ac7c0f22760589c87af8e71427c76118Christian MaedermwString s = setName s nullElem
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder
a716971174535184da7713ed308423e355a4aa66Christian MaedermwIRI :: IRI -> Element
a716971174535184da7713ed308423e355a4aa66Christian MaedermwIRI iri = setIRI iri nullElem
a716971174535184da7713ed308423e355a4aa66Christian Maeder
67a14e04c885a87e4273a300eef60e680531088cChristian MaedermwNameIRI :: String -> IRI -> Element
67a14e04c885a87e4273a300eef60e680531088cChristian MaedermwNameIRI s iri = setName s $ mwIRI iri
67a14e04c885a87e4273a300eef60e680531088cChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian MaedermwText :: String -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaedermwText s = setText s nullElem
d48085f765fca838c1d972d2123601997174583dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian MaedermwSimpleIRI :: IRI -> Element
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian MaedermwSimpleIRI s = setName (if iriType s /= Abbreviated then iriK
d48085f765fca838c1d972d2123601997174583dChristian Maeder else "AbbreviatedIRI")
d48085f765fca838c1d972d2123601997174583dChristian Maeder $ mwText $ showIRI s
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian MaedermakeElement :: String -> [Element] -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaedermakeElement s el = setContent el $ mwString s
d48085f765fca838c1d972d2123601997174583dChristian Maeder
76647324ed70f33b95a881b536d883daccf9568dChristian MaedermakeElementWith1 :: String -> Element -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaedermakeElementWith1 s e = setContent [e] $ mwString s
d48085f765fca838c1d972d2123601997174583dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian Maedermake1 :: Bool -> String -> String -> (String -> IRI -> Element) -> IRI ->
d48085f765fca838c1d972d2123601997174583dChristian Maeder [([Element], Element)] -> [Element]
d48085f765fca838c1d972d2123601997174583dChristian Maedermake1 rl hdr shdr f iri = map (\ (a, b) -> makeElement hdr
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder $ a ++ (if rl then [f shdr iri, b] else [b, f shdr iri]))
d48085f765fca838c1d972d2123601997174583dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian Maedermake2 :: Bool -> String -> (a -> Element) -> a ->
d48085f765fca838c1d972d2123601997174583dChristian Maeder [([Element], Element)] -> [Element]
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maedermake2 rl hdr f expr = map (\ (x, y) -> makeElement hdr
d48085f765fca838c1d972d2123601997174583dChristian Maeder $ x ++ (if rl then [f expr, y] else [y, f expr]))
d48085f765fca838c1d972d2123601997174583dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian MaederxmlEntity :: Entity -> Element
76647324ed70f33b95a881b536d883daccf9568dChristian MaederxmlEntity (Entity ty ent) = mwNameIRI (case ty of
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder Class -> classK
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder Datatype -> datatypeK
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder ObjectProperty -> objectPropertyK
d48085f765fca838c1d972d2123601997174583dChristian Maeder DataProperty -> dataPropertyK
d48085f765fca838c1d972d2123601997174583dChristian Maeder AnnotationProperty -> annotationPropertyK
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder NamedIndividual -> namedIndividualK) ent
d48085f765fca838c1d972d2123601997174583dChristian Maeder
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian MaederxmlLiteral :: Literal -> Element
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian MaederxmlLiteral (Literal lf tu) =
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder let part = setName literalK $ mwText lf
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder in case tu of
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder Typed dt -> setDt True dt part
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder Untyped lang -> setLangTag lang $ setDt True (mkQName
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder "http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral")
d48085f765fca838c1d972d2123601997174583dChristian Maeder part
d48085f765fca838c1d972d2123601997174583dChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian MaederxmlIndividual :: IRI -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaederxmlIndividual iri =
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder mwNameIRI (if isAnonymous iri then anonymousIndividualK
d48085f765fca838c1d972d2123601997174583dChristian Maeder else namedIndividualK) iri
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian Maeder
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaederxmlFVPair :: (ConstrainingFacet, RestrictionValue) -> Element
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaederxmlFVPair (cf, rv) = setDt False cf $ makeElement facetRestrictionK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder [xmlLiteral rv]
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian Maeder
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaederxmlObjProp :: ObjectPropertyExpression -> Element
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaederxmlObjProp ope = case ope of
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian Maeder ObjectProp op -> mwNameIRI objectPropertyK op
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian Maeder ObjectInverseOf i -> makeElement objectInverseOfK [xmlObjProp i]
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder
81946e2b3f6dde6167f48769bd02c7a634736856Christian MaederxmlDataRange :: DataRange -> Element
76647324ed70f33b95a881b536d883daccf9568dChristian MaederxmlDataRange dr = case dr of
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder DataType dt cfl ->
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder let dtelem = mwNameIRI datatypeK dt
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder in if null cfl then dtelem
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder else makeElement datatypeRestrictionK
9a44a07ffc79da9852b6319bd6d9df81efe99809Christian Maeder $ dtelem : map xmlFVPair cfl
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder DataJunction jt drl -> makeElement (
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder case jt of
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder IntersectionOf -> dataIntersectionOfK
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder UnionOf -> dataUnionOfK)
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder $ map xmlDataRange drl
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder DataComplementOf drn -> makeElement dataComplementOfK
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder [xmlDataRange drn]
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder DataOneOf ll -> makeElement dataOneOfK
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder $ map xmlLiteral ll
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder
d48085f765fca838c1d972d2123601997174583dChristian MaederxmlClassExpression :: ClassExpression -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaederxmlClassExpression ce = case ce of
d48085f765fca838c1d972d2123601997174583dChristian Maeder Expression c -> mwNameIRI classK c
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder ObjectJunction jt cel -> makeElement (
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder case jt of
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder IntersectionOf -> objectIntersectionOfK
d48085f765fca838c1d972d2123601997174583dChristian Maeder UnionOf -> objectUnionOfK)
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder $ map xmlClassExpression cel
d48085f765fca838c1d972d2123601997174583dChristian Maeder ObjectComplementOf cex -> makeElement objectComplementOfK
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder [xmlClassExpression cex]
d48085f765fca838c1d972d2123601997174583dChristian Maeder ObjectOneOf il -> makeElement objectOneOfK
d48085f765fca838c1d972d2123601997174583dChristian Maeder $ map xmlIndividual il
d48085f765fca838c1d972d2123601997174583dChristian Maeder ObjectValuesFrom qt ope cex -> makeElement (
d48085f765fca838c1d972d2123601997174583dChristian Maeder case qt of
d48085f765fca838c1d972d2123601997174583dChristian Maeder AllValuesFrom -> objectAllValuesFromK
d48085f765fca838c1d972d2123601997174583dChristian Maeder SomeValuesFrom -> objectSomeValuesFromK)
d48085f765fca838c1d972d2123601997174583dChristian Maeder [xmlObjProp ope, xmlClassExpression cex]
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder ObjectHasValue ope i -> makeElement objectHasValueK
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder [xmlObjProp ope, xmlIndividual i]
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ObjectHasSelf ope -> makeElement objectHasSelfK [xmlObjProp ope]
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder ObjectCardinality (Cardinality ct i op mce) -> setInt i $ makeElement (
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder case ct of
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder MinCardinality -> objectMinCardinalityK
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder MaxCardinality -> objectMaxCardinalityK
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder ExactCardinality -> objectExactCardinalityK)
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder $ xmlObjProp op :
d48085f765fca838c1d972d2123601997174583dChristian Maeder case mce of
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder Nothing -> []
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder Just cexp -> [xmlClassExpression cexp]
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder DataValuesFrom qt dp dr -> makeElement (
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder case qt of
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder AllValuesFrom -> dataAllValuesFromK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder SomeValuesFrom -> dataSomeValuesFromK)
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder [mwNameIRI dataPropertyK dp, xmlDataRange dr]
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder DataHasValue dp l -> makeElement dataHasValueK
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder [mwNameIRI dataPropertyK dp, xmlLiteral l]
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder DataCardinality (Cardinality ct i dp mdr) -> setInt i $ makeElement (
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder case ct of
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder MinCardinality -> dataMinCardinalityK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder MaxCardinality -> dataMaxCardinalityK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ExactCardinality -> dataExactCardinalityK)
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder $ mwNameIRI dataPropertyK dp :
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder case mdr of
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder Nothing -> []
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder Just dr -> [xmlDataRange dr]
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder
a39a820684c1974350f46593025e0bb279f41bc6Christian MaederxmlAnnotation :: Annotation -> Element
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaederxmlAnnotation (Annotation al ap av) = makeElement annotationK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder $ map xmlAnnotation al ++ [mwNameIRI annotationPropertyK ap,
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder case av of
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder AnnValue iri -> xmlSubject iri
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder AnnValLit l -> xmlLiteral l]
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaederxmlSubject :: IRI -> Element
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaederxmlSubject iri = if isAnonymous iri then xmlIndividual iri
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder else mwSimpleIRI iri
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaederxmlAnnotations :: Annotations -> [Element]
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaederxmlAnnotations = map xmlAnnotation
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaederxmlAL :: (a -> Element) -> AnnotatedList a -> [([Element], Element)]
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaederxmlAL f al = let annos = map (xmlAnnotations . fst) al
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder other = map (\ (_, b) -> f b) al
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder in zip annos other
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian MaederxmlLFB :: Extended -> Maybe Relation -> ListFrameBit -> [Element]
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaederxmlLFB ext mr lfb = case lfb of
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder AnnotationBit al ->
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder let list = xmlAL mwSimpleIRI al
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder SimpleEntity (Entity _ ap) = ext
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder in case fromMaybe (error "expected domain, range, subproperty") mr of
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder SubPropertyOf ->
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder let list2 = xmlAL (mwNameIRI annotationPropertyK) al
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder in make1 True subAnnotationPropertyOfK annotationPropertyK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder mwNameIRI ap list2
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder DRRelation ADomain -> make1 True annotationPropertyDomainK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder annotationPropertyK mwNameIRI ap list
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder DRRelation ARange -> make1 True annotationPropertyRangeK
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder annotationPropertyK mwNameIRI ap list
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder _ -> error "bad annotation bit"
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ExpressionBit al ->
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder let list = xmlAL xmlClassExpression al in case ext of
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder Misc anno -> [makeElement (case fromMaybe
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder (error "expected equiv--, disjoint--, class") mr of
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder EDRelation Equivalent -> equivalentClassesK
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder EDRelation Disjoint -> disjointClassesK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder _ -> error "bad equiv or disjoint classes bit"
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ) $ xmlAnnotations anno ++ map snd list]
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ClassEntity c -> make2 True (case fromMaybe
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder (error "expected equiv--, disjoint--, sub-- class") mr of
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder SubClass -> subClassOfK
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder EDRelation Equivalent -> equivalentClassesK
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder EDRelation Disjoint -> disjointClassesK
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder _ -> error "bad equiv, disjoint, subClass bit")
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder xmlClassExpression c list
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder ObjectEntity op -> make2 True (case fromMaybe
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder (error "expected domain, range") mr of
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder DRRelation ADomain -> objectPropertyDomainK
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder DRRelation ARange -> objectPropertyRangeK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder _ -> "bad object domain or range bit") xmlObjProp op list
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder SimpleEntity (Entity ty ent) -> case ty of
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder DataProperty -> make1 True dataPropertyDomainK dataPropertyK
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder mwNameIRI ent list
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder NamedIndividual -> make2 False classAssertionK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder xmlIndividual ent list
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder _ -> error "bad expression bit"
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ObjectBit al ->
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder let list = xmlAL xmlObjProp al in case ext of
19f104861f1832b452c9f98e59880d05e865d9bdChristian Maeder Misc anno -> [makeElement (case fromMaybe
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder (error "expected equiv--, disjoint-- obj prop") mr of
19f104861f1832b452c9f98e59880d05e865d9bdChristian Maeder EDRelation Equivalent -> equivalentObjectPropertiesK
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder EDRelation Disjoint -> disjointObjectPropertiesK
19f104861f1832b452c9f98e59880d05e865d9bdChristian Maeder _ -> error "bad object bit (equiv, disjoint)"
19f104861f1832b452c9f98e59880d05e865d9bdChristian Maeder ) $ xmlAnnotations anno ++ map snd list]
19f104861f1832b452c9f98e59880d05e865d9bdChristian Maeder ObjectEntity o -> make2 True (case fromMaybe
19f104861f1832b452c9f98e59880d05e865d9bdChristian Maeder (error "expected sub, Inverse, equiv, disjoint op") mr of
19f104861f1832b452c9f98e59880d05e865d9bdChristian Maeder SubPropertyOf -> subObjectPropertyOfK
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder InverseOf -> inverseObjectPropertiesK
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder EDRelation Equivalent -> equivalentObjectPropertiesK
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder EDRelation Disjoint -> disjointObjectPropertiesK
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder _ -> error "bad object bit (subpropertyof, inverseof)"
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder ) xmlObjProp o list
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder _ -> error "bad object bit"
62ecb1e7f8fd9573eea8369657de12c7bf9f4f25Christian Maeder DataBit al ->
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder let list = xmlAL (mwNameIRI dataPropertyK) al in case ext of
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder Misc anno -> [makeElement (case fromMaybe
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder (error "expected equiv--, disjoint-- data prop") mr of
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder EDRelation Equivalent -> equivalentDataPropertiesK
adfdcfa67b7f12df6df7292e238c3f9a4b637980Christian Maeder EDRelation Disjoint -> disjointDataPropertiesK
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder _ -> error "bad data bit"
62ecb1e7f8fd9573eea8369657de12c7bf9f4f25Christian Maeder ) $ xmlAnnotations anno ++ map snd list]
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder SimpleEntity (Entity _ ent) -> make1 True (case fromMaybe
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder (error "expected sub, equiv or disjoint data") mr of
fc8c6570c7b4ee13f375eb607bed2290438573bfChristian Maeder SubPropertyOf -> subDataPropertyOfK
d1012ae182d765c4e6986029d210b9e7b48de205Christian Maeder EDRelation Equivalent -> equivalentDataPropertiesK
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder EDRelation Disjoint -> disjointDataPropertiesK
fc8c6570c7b4ee13f375eb607bed2290438573bfChristian Maeder _ -> error "bad data bit"
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder ) dataPropertyK mwNameIRI ent list
fc8c6570c7b4ee13f375eb607bed2290438573bfChristian Maeder _ -> error "bad data bit"
fc8c6570c7b4ee13f375eb607bed2290438573bfChristian Maeder IndividualSameOrDifferent al ->
fc8c6570c7b4ee13f375eb607bed2290438573bfChristian Maeder let list = xmlAL xmlIndividual al in case ext of
fc8c6570c7b4ee13f375eb607bed2290438573bfChristian Maeder Misc anno -> [makeElement (case fromMaybe
09249711700a6acbc40a2e337688b434d7aafa28Christian Maeder (error "expected same--, different-- individuals") mr of
fc8c6570c7b4ee13f375eb607bed2290438573bfChristian Maeder SDRelation Same -> sameIndividualK
fc8c6570c7b4ee13f375eb607bed2290438573bfChristian Maeder SDRelation Different -> differentIndividualsK
fc8c6570c7b4ee13f375eb607bed2290438573bfChristian Maeder _ -> error "bad individual bit (s or d)"
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder ) $ xmlAnnotations anno ++ map snd list]
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder SimpleEntity (Entity _ i) -> make2 True (case fromMaybe
adfdcfa67b7f12df6df7292e238c3f9a4b637980Christian Maeder (error "expected same--, different-- individuals") mr of
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder SDRelation Same -> sameIndividualK
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder SDRelation Different -> differentIndividualsK
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder _ -> error "bad individual bit (s or d)"
42c01284bba8d7c8d995c8dfb96ace57d28ed1bcTill Mossakowski ) xmlIndividual i list
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder _ -> error "bad individual same or different"
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder ObjectCharacteristics al ->
715ffaf874309df081d1e1cd8e05073fc1227729Christian Maeder let ObjectEntity op = ext
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder annos = map (xmlAnnotations . fst) al
e1839fb37a3a2ccd457464cb0dcc5efd466dbe22Christian Maeder list = zip annos (map snd al)
e1839fb37a3a2ccd457464cb0dcc5efd466dbe22Christian Maeder in map (\ (x, y) -> makeElement (case y of
e1839fb37a3a2ccd457464cb0dcc5efd466dbe22Christian Maeder Functional -> functionalObjectPropertyK
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder InverseFunctional -> inverseFunctionalObjectPropertyK
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder Reflexive -> reflexiveObjectPropertyK
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder Irreflexive -> irreflexiveObjectPropertyK
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder Symmetric -> symmetricObjectPropertyK
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder Asymmetric -> asymmetricObjectPropertyK
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder Transitive -> transitiveObjectPropertyK
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder Antisymmetric -> antisymmetricObjectPropertyK
e1839fb37a3a2ccd457464cb0dcc5efd466dbe22Christian Maeder ) $ x ++ [xmlObjProp op]) list
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder DataPropRange al ->
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder let SimpleEntity (Entity DataProperty dp) = ext
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder list = xmlAL xmlDataRange al
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder in make1 True dataPropertyRangeK dataPropertyK mwNameIRI dp list
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder IndividualFacts al ->
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder let SimpleEntity (Entity NamedIndividual i) = ext
7de39d39bc1700cc8a9bb9df90b920aad9e18d4aChristian Maeder annos = map (xmlAnnotations . fst) al
94b34b35075c9115a22b512fd4ec3fb290f13d59Christian Maeder list = zip annos (map snd al)
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder in map (\ (x, f) -> case f of
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder ObjectPropertyFact pn op ind ->
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder makeElement (case pn of
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder Positive -> objectPropertyAssertionK
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder Negative -> negativeObjectPropertyAssertionK
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder ) $ x ++ [xmlObjProp op]
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ++ map xmlIndividual [i, ind]
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder DataPropertyFact pn dp lit ->
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder makeElement (case pn of
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder Positive -> dataPropertyAssertionK
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder Negative -> negativeDataPropertyAssertionK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ) $ x ++ [mwNameIRI dataPropertyK dp] ++
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder [xmlIndividual i] ++ [xmlLiteral lit]
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder ) list
d5c415f6373274fed04d83b9322891f3b82e9c26Christian Maeder
d5c415f6373274fed04d83b9322891f3b82e9c26Christian MaederxmlAFB :: Extended -> Annotations -> AnnFrameBit -> [Element]
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian MaederxmlAFB ext anno afb = case afb of
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder AnnotationFrameBit -> case ext of
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder SimpleEntity ent ->
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder let Entity ty iri = ent in case ty of
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder AnnotationProperty -> map (\ (Annotation as s v) ->
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder makeElement annotationAssertionK $
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder xmlAnnotations as
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder ++ [mwNameIRI annotationPropertyK iri]
d48085f765fca838c1d972d2123601997174583dChristian Maeder ++ [xmlSubject s, case v of
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder AnnValue avalue -> xmlSubject avalue
13f6b64b022fac1179149bfacf9a2ad908f7038dChristian Maeder AnnValLit l -> xmlLiteral l]) anno
13f6b64b022fac1179149bfacf9a2ad908f7038dChristian Maeder _ -> [makeElement declarationK
94b34b35075c9115a22b512fd4ec3fb290f13d59Christian Maeder $ xmlAnnotations anno ++ [xmlEntity ent]]
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder Misc as ->
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder let [Annotation _ ap _] = anno
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder in [makeElement declarationK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder $ xmlAnnotations as ++ [mwNameIRI annotationPropertyK ap]]
5e26bfc8d7b18cf3a3fa7b919b4450fb669f37a5Christian Maeder ClassEntity ent -> case ent of
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder Expression c -> [makeElement declarationK
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder $ xmlAnnotations anno ++ [xmlEntity $ Entity Class c]]
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder _ -> error "XML conversion: incompatible manchester and XML syntax"
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder ObjectEntity ent -> case ent of
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder ObjectProp o -> [makeElement declarationK
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder $ xmlAnnotations anno ++
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder [xmlEntity $ Entity ObjectProperty o]]
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder _ -> error "XML conversion: incompatible manchester and XML syntax"
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder DataFunctional ->
72909c6c1cfe9702f5910d0a135c8b55729c7917Christian Maeder let SimpleEntity (Entity _ dp) = ext
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder in [makeElement functionalDataPropertyK
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder $ xmlAnnotations anno ++ [mwNameIRI dataPropertyK dp]]
e1839fb37a3a2ccd457464cb0dcc5efd466dbe22Christian Maeder DatatypeBit dr ->
0a39036fa485579a7b7c81cdd44a412392571927Christian Maeder let SimpleEntity (Entity _ dt) = ext
0a39036fa485579a7b7c81cdd44a412392571927Christian Maeder in [makeElement datatypeDefinitionK
0a39036fa485579a7b7c81cdd44a412392571927Christian Maeder $ xmlAnnotations anno ++ [mwNameIRI datatypeK dt,
0a39036fa485579a7b7c81cdd44a412392571927Christian Maeder xmlDataRange dr]]
0a39036fa485579a7b7c81cdd44a412392571927Christian Maeder ClassDisjointUnion cel ->
0a39036fa485579a7b7c81cdd44a412392571927Christian Maeder let ClassEntity c = ext
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder in [makeElement disjointUnionK
5a13581acc5a76d392c1dec01657bb3efd4dcf2dChristian Maeder $ xmlAnnotations anno ++ map xmlClassExpression (c : cel)]
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder ClassHasKey op dp ->
4ef2a978e66e2246ff0b7f00c77deb7aabb28b8eChristian Maeder let ClassEntity c = ext
4ef2a978e66e2246ff0b7f00c77deb7aabb28b8eChristian Maeder in [makeElement hasKeyK
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder $ xmlAnnotations anno ++ [xmlClassExpression c]
64b9ab8e743c8e284caab0ca522aa69b2e10ad15Christian Maeder ++ map xmlObjProp op ++ map (mwNameIRI dataPropertyK) dp]
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder ObjectSubPropertyChain opl ->
64b9ab8e743c8e284caab0ca522aa69b2e10ad15Christian Maeder let ObjectEntity op = ext
64b9ab8e743c8e284caab0ca522aa69b2e10ad15Christian Maeder xmlop = map xmlObjProp opl
42c01284bba8d7c8d995c8dfb96ace57d28ed1bcTill Mossakowski in [makeElement subObjectPropertyOfK
64b9ab8e743c8e284caab0ca522aa69b2e10ad15Christian Maeder $ xmlAnnotations anno ++
8c27ccd6d90c4dcdfbe52b95c1f0bef655918f26Christian Maeder [makeElement objectPropertyChainK xmlop, xmlObjProp op]]
42c01284bba8d7c8d995c8dfb96ace57d28ed1bcTill Mossakowski
xmlFrameBit :: Extended -> FrameBit -> [Element]
xmlFrameBit ext fb = case fb of
ListFrameBit mr lfb -> xmlLFB ext mr lfb
AnnFrameBit anno afb -> xmlAFB ext anno afb
xmlAxioms :: Axiom -> [Element]
xmlAxioms (PlainAxiom ext fb) = xmlFrameBit ext fb
xmlFrames :: Frame -> [Element]
xmlFrames (Frame ext fbl) = concatMap (xmlFrameBit ext) fbl
xmlImport :: ImportIRI -> Element
xmlImport i = setName importK $ mwText $ showIRI i
setPref :: String -> Element -> Element
setPref s e = e {elAttribs = Attr {attrKey = makeQN "name"
, attrVal = s} : elAttribs e}
set1Map :: (String, String) -> Element
set1Map (s, iri) = setPref s $ mwIRI $ setFull $ appendBase "" $ mkQName iri
xmlPrefixes :: PrefixMap -> [Element]
xmlPrefixes pm = map (setName prefixK . set1Map) $ Map.toList pm
setXMLNS :: Element -> Element
setXMLNS e = e {elAttribs = Attr {attrKey = makeQN "xmlns", attrVal =
"http://www.w3.org/2002/07/owl#"} : elAttribs e}
setOntIRI :: OntologyIRI -> Element -> Element
setOntIRI iri e =
if elem iri [nullQName, dummyQName] then e
else e {elAttribs = Attr {attrKey = makeQN "ontologyIRI",
attrVal = showQU iri} : elAttribs e}
setBase :: String -> Element -> Element
setBase s e = e {elAttribs = Attr {attrKey = nullQN {qName = "base",
qPrefix = Just "xml"}, attrVal = s} : elAttribs e}
xmlOntologyDoc :: Sign -> OntologyDocument -> Element
xmlOntologyDoc s od =
let ont = ontology od
pd = prefixDeclaration od
emptyPref = fromMaybe (showIRI dummyQName) $ Map.lookup "" pd
in setBase emptyPref $ setXMLNS $ setOntIRI (name ont)
$ makeElement "Ontology" $ xmlPrefixes pd
++ map xmlImport (imports ont)
++ concatMap xmlFrames (ontFrames ont)
++ concatMap xmlAnnotations (ann ont)
++ signToDec s
signToDec :: Sign -> [Element]
signToDec s =
let c = Set.toList $ concepts s
op = Set.toList $ objectProperties s
dp = Set.toList $ dataProperties s
ap = Set.toList $ annotationRoles s
dt = Set.toList $ datatypes s
i = Set.toList $ individuals s
in map (makeElementWith1 declarationK . mwNameIRI classK) c
++ map (makeElementWith1 declarationK . mwNameIRI objectPropertyK) op
++ map (makeElementWith1 declarationK . mwNameIRI dataPropertyK) dp
++ map (makeElementWith1 declarationK . mwNameIRI annotationPropertyK) ap
++ map (makeElementWith1 declarationK . mwNameIRI datatypeK) dt
++ map (makeElementWith1 declarationK . mwNameIRI namedIndividualK) i
mkODoc :: Sign -> [Named Axiom] -> String
mkODoc s na = ppTopElement $ xmlOntologyDoc s $ emptyOntologyDoc
{
ontology = emptyOntologyD
{
ontFrames = map (axToFrame . sentence) na
},
prefixDeclaration = prefixMap s
}