XMLConversion.hs revision 668c9c725a11c0f77057152148570af853a1bc0d
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian MaederModule : $Header$
09249711700a6acbc40a2e337688b434d7aafa28Christian MaederCopyright : (c) Felix Gabriel Mance
76647324ed70f33b95a881b536d883daccf9568dChristian MaederLicense : GPLv2 or higher, see LICENSE.txt
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian MaederMaintainer : f.mance@jacobs-university.de
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederStability : provisionalM
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian MaederPortability : portable
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederConversion from Manchester syntax to XML Syntax
5d7e4bf173534e7eb3fc84dce7bb0151079d3f8aChristian Maederimport Common.AS_Annotation (Named, sentence)
0a39036fa485579a7b7c81cdd44a412392571927Christian Maederimport qualified Data.Set as Set
abd8dd44106c507dd2cb64359b63d7d56fa0a9c8Christian Maederimport qualified Data.Map as Map
76647324ed70f33b95a881b536d883daccf9568dChristian MaedershowIRI :: OWL2.AS.QName -> String
d48085f765fca838c1d972d2123601997174583dChristian MaedershowIRI (QN pre local _ _ _) = pre ++ ":" ++ local
d48085f765fca838c1d972d2123601997174583dChristian MaedernullQN = QName "" Nothing Nothing
d48085f765fca838c1d972d2123601997174583dChristian MaedermakeQN :: String -> Text.XML.Light.QName
d48085f765fca838c1d972d2123601997174583dChristian MaedermakeQN s = nullQN {qName = s}
d48085f765fca838c1d972d2123601997174583dChristian MaedersetQNPrefix :: String -> Text.XML.Light.QName -> Text.XML.Light.QName
d48085f765fca838c1d972d2123601997174583dChristian MaedersetQNPrefix s qn = qn {qPrefix = Just s}
a39a820684c1974350f46593025e0bb279f41bc6Christian MaedernullElem :: Element
a39a820684c1974350f46593025e0bb279f41bc6Christian MaedernullElem = Element nullQN [] [] Nothing
76647324ed70f33b95a881b536d883daccf9568dChristian MaedersetIRI :: IRI -> Element -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaedersetIRI iri e =
d48085f765fca838c1d972d2123601997174583dChristian Maeder let fan = iriType iri
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}]}
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#"} }
feab655b0275874012c3cf9859064c177860cc70Christian MaedersetContent :: [Element] -> Element -> Element
f2c2b420e386a90d940c758c631d16f12952d2b7Christian MaedersetContent cl e = e {elContent = map Elem cl}
f2c2b420e386a90d940c758c631d16f12952d2b7Christian MaedersetText :: String -> Element -> Element
793945d4ac7c0f22760589c87af8e71427c76118Christian MaedersetText s e = e {elContent = [Text CData {cdVerbatim = CDataText,
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder cdData = s, cdLine = Nothing}]}
a716971174535184da7713ed308423e355a4aa66Christian MaedersetInt :: Int -> Element -> Element
5e5c3fbbf8c22b883d551d83429b9f8d8041f1e0Christian MaedersetInt i e = e {elAttribs = [Attr {attrKey = makeQN "cardinality",
a716971174535184da7713ed308423e355a4aa66Christian Maeder attrVal = show i}]}
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 MaedersetLangTag :: Maybe LanguageTag -> Element -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaedersetLangTag ml e = case ml of
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder Just lt -> e {elAttribs = elAttribs e ++ [Attr {attrKey
793945d4ac7c0f22760589c87af8e71427c76118Christian Maeder = setQNPrefix "xml" (makeQN "lang"), attrVal = lt}]}
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian MaedermwString :: String -> Element
793945d4ac7c0f22760589c87af8e71427c76118Christian MaedermwString s = setName s nullElem
a716971174535184da7713ed308423e355a4aa66Christian MaedermwIRI :: IRI -> Element
a716971174535184da7713ed308423e355a4aa66Christian MaedermwIRI iri = setIRI iri nullElem
67a14e04c885a87e4273a300eef60e680531088cChristian MaedermwNameIRI :: String -> IRI -> Element
67a14e04c885a87e4273a300eef60e680531088cChristian MaedermwNameIRI s iri = setName s $ mwIRI iri
d48085f765fca838c1d972d2123601997174583dChristian MaedermwText :: String -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaedermwText s = setText s nullElem
d48085f765fca838c1d972d2123601997174583dChristian MaedermwSimpleIRI :: IRI -> Element
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian MaedermwSimpleIRI s = setName (if iriType s /= Abbreviated then iriK
d48085f765fca838c1d972d2123601997174583dChristian Maeder else "AbbreviatedIRI")
d48085f765fca838c1d972d2123601997174583dChristian Maeder $ mwText $ showIRI s
d48085f765fca838c1d972d2123601997174583dChristian MaedermakeElement :: String -> [Element] -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaedermakeElement s el = setContent el $ mwString s
76647324ed70f33b95a881b536d883daccf9568dChristian MaedermakeElementWith1 :: String -> Element -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaedermakeElementWith1 s e = setContent [e] $ mwString s
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 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 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
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 MaederxmlIndividual :: IRI -> Element
d48085f765fca838c1d972d2123601997174583dChristian MaederxmlIndividual iri =
76647324ed70f33b95a881b536d883daccf9568dChristian Maeder mwNameIRI (if isAnonymous iri then anonymousIndividualK
d48085f765fca838c1d972d2123601997174583dChristian Maeder else namedIndividualK) iri
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaederxmlFVPair :: (ConstrainingFacet, RestrictionValue) -> Element
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaederxmlFVPair (cf, rv) = setDt False cf $ makeElement facetRestrictionK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder [xmlLiteral rv]
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 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 (
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
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 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 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 MinCardinality -> objectMinCardinalityK
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder MaxCardinality -> objectMaxCardinalityK
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder ExactCardinality -> objectExactCardinalityK)
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder $ xmlObjProp op :
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder Nothing -> []
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder Just cexp -> [xmlClassExpression cexp]
35cd0c10843c2cdbbe29f00a2a5d7e5e4f2d0064Christian Maeder DataValuesFrom qt dp dr -> makeElement (
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 MinCardinality -> dataMinCardinalityK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder MaxCardinality -> dataMaxCardinalityK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ExactCardinality -> dataExactCardinalityK)
5b1f1d57c75562a7af79e8256f4afa07febe921bChristian Maeder $ mwNameIRI dataPropertyK dp :
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder Nothing -> []
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder Just dr -> [xmlDataRange dr]
a39a820684c1974350f46593025e0bb279f41bc6Christian MaederxmlAnnotation :: Annotation -> Element
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaederxmlAnnotation (Annotation al ap av) = makeElement annotationK
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder $ map xmlAnnotation al ++ [mwNameIRI annotationPropertyK ap,
a39a820684c1974350f46593025e0bb279f41bc6Christian Maeder AnnValue iri -> xmlSubject iri
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder AnnValLit l -> xmlLiteral l]
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaederxmlSubject :: IRI -> Element
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian MaederxmlSubject iri = if isAnonymous iri then xmlIndividual iri
98c47b3c137bdb20c53b6c1d346c0fb48b48d673Christian Maeder else mwSimpleIRI iri
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaederxmlAnnotations :: Annotations -> [Element]
3eb7ebab2dd79ac5277f087b18e8f05b9e9f0f9bChristian MaederxmlAnnotations = map xmlAnnotation
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
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]
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]]
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]]
xmlPrefixes pm = map (setName prefixK . set1Map) $ Map.toList pm
"http://www.w3.org/2002/07/owl#"} : elAttribs e}
emptyPref = fromMaybe (showIRI dummyQName) $ Map.lookup "" pd
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