XML.hs revision f20c085644aa49702488405bc2d4245cf0e5a713
1a38107941725211e7c3f051f7a8f5e12199f03acmaedermodule OWL2.XML where
4b0a4c7dea0f67a233dcc42ce9bb18d36de109aeChristian Maeder
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens Elknerimport Text.XML.Light
5ba323da9f037264b4a356085e844889aedeac23Christian Maederimport Data.Maybe
c58a94c44b76b072ace930f2126c889c0b64cb2aChristian Maederimport OWL2.AS
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescuimport OWL2.MS
ea03c5d09694b4a966fbd19d46cfa5772648d95fChristian Maederimport Common.Lexer
3f69b6948966979163bdfe8331c38833d5d90ecdChristian Maeder
4b0a4c7dea0f67a233dcc42ce9bb18d36de109aeChristian MaedergetName :: Element -> String
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian MaedergetName (Element {elName = QName {qName = n}}) = n
4b0a4c7dea0f67a233dcc42ce9bb18d36de109aeChristian Maeder
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaedergetIRI :: Element -> OWL2.AS.QName
ea03c5d09694b4a966fbd19d46cfa5772648d95fChristian MaedergetIRI (Element {elAttribs = a}) =
ea03c5d09694b4a966fbd19d46cfa5772648d95fChristian Maeder let Attr {attrVal = iri} = head a
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maeder in mkQName iri
502ed7ed7fecd10b6d0c83cdd48a244ec45e840aChristian Maeder
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian MaedergetInt :: Element -> Int
950e053ba55ac9c7d9c26a1ab48bd00202b29511Christian MaedergetInt (Element {elAttribs = a}) =
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder let Attr {attrVal = int} = head a
964d1dce6aa88a14e240a4f2fb81c539d2f834fcChristian Maeder in value 10 int
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder
afa6848d579d235c9677e1ab477916df8e5ae11aChristian MaederisSmth :: String -> Text.XML.Light.QName -> Bool
dc6b48bb46df8e56da3491c98476e6da0d1d5d1dChristian MaederisSmth s (QName {qName = qn}) = qn == s
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder
b603f34b79bc0992e5d74f484e5bdc9f9c2346c6Christian MaederisSmthList :: [String] -> Text.XML.Light.QName -> Bool
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian MaederisSmthList l (QName {qName = qn}) = qn `elem` l
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder
1a38107941725211e7c3f051f7a8f5e12199f03acmaederfilterCh :: String -> Element -> [Element]
964d1dce6aa88a14e240a4f2fb81c539d2f834fcChristian MaederfilterCh s = filterChildrenName (isSmth s)
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder
964d1dce6aa88a14e240a4f2fb81c539d2f834fcChristian MaederfilterChL :: [String] -> Element -> [Element]
964d1dce6aa88a14e240a4f2fb81c539d2f834fcChristian MaederfilterChL l = filterChildrenName (isSmthList l)
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder
fd5d3885a092ac0727fa2436cdfc3b248318ebd8Christian MaederentityList :: [String]
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian MaederentityList = ["Class", "Datatype", "NamedIndividual",
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "ObjectProperty", "DataProperty", "AnnotationProperty"]
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian MaederobjectPropList :: [String]
1a38107941725211e7c3f051f7a8f5e12199f03acmaederobjectPropList = ["ObjectProperty", "ObjectInverseOf"]
502ed7ed7fecd10b6d0c83cdd48a244ec45e840aChristian Maeder
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian MaederdataPropList :: [String]
7de39d39bc1700cc8a9bb9df90b920aad9e18d4aChristian MaederdataPropList = ["DataProperty"]
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder
9348e8460498ddfcd9da11cd8b5794c06023e004Christian MaederdataRangeList :: [String]
502ed7ed7fecd10b6d0c83cdd48a244ec45e840aChristian MaederdataRangeList = ["Datatype", "DatatypeRestriction", "DataComplementOf",
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder "DataOneOf", "DataIntersectionOf", "DataUnionOf"]
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder
fd5d3885a092ac0727fa2436cdfc3b248318ebd8Christian MaederclassExpressionList :: [String]
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian MaederclassExpressionList = ["Class", "ObjectIntersectionOf", "ObjectUnionOf",
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "ObjectComplementOf", "ObjectOneOf", "ObjectSomeValuesFrom",
7de39d39bc1700cc8a9bb9df90b920aad9e18d4aChristian Maeder "ObjectAllValuesFrom", "ObjectHasValue", "ObjectHasSelf",
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "ObjectMinCardinality", "ObjectMaxCardinality", "ObjectExactCardinality",
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder "DataSomeValuesFrom", "DataAllValuesFrom", "DataHasValue",
23f8d286586ff38a9e73052b2c7c04c62c5c638fChristian Maeder "DataMinCardinality", "DataMaxCardinality", "DataExactCardinality"]
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian MaedergetEntityType :: String -> EntityType
1a38107941725211e7c3f051f7a8f5e12199f03acmaedergetEntityType ty = case ty of
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "Class" -> Class
23f8d286586ff38a9e73052b2c7c04c62c5c638fChristian Maeder "Datatype" -> Datatype
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder "NamedIndividual" -> NamedIndividual
7de39d39bc1700cc8a9bb9df90b920aad9e18d4aChristian Maeder "ObjectProperty" -> ObjectProperty
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder "DataProperty" -> DataProperty
54ff63bb3b23ef18efbdc51b053a2ca6f348329aChristian Maeder "AnnotationProperty" -> AnnotationProperty
54ff63bb3b23ef18efbdc51b053a2ca6f348329aChristian Maeder _ -> error "not entity type"
54ff63bb3b23ef18efbdc51b053a2ca6f348329aChristian Maeder
54ff63bb3b23ef18efbdc51b053a2ca6f348329aChristian MaedertoEntity :: Element -> Entity
54ff63bb3b23ef18efbdc51b053a2ca6f348329aChristian MaedertoEntity e = Entity (getEntityType $ getName e) (getIRI e)
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian MaedergetEntity :: Element -> Entity
1a38107941725211e7c3f051f7a8f5e12199f03acmaedergetEntity e = toEntity $ fromJust $ filterElementName (isSmthList entityList) e
e1839fb37a3a2ccd457464cb0dcc5efd466dbe22Christian Maeder
9348e8460498ddfcd9da11cd8b5794c06023e004Christian MaedergetDeclaration :: Element -> Frame
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian MaedergetDeclaration e =
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder let ent = fromJust $ filterChildName (isSmthList entityList) e
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder ans = getAllAnnos e
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder in Frame (SimpleEntity $ toEntity ent) [AnnFrameBit ans AnnotationFrameBit]
27912d626bf179b82fcb337077e5cd9653bb71cfChristian Maeder
1a38107941725211e7c3f051f7a8f5e12199f03acmaedergetDeclarations :: Element -> [Frame]
cf3232cec840a6945667bdb06f5b47b22243bc8fChristian MaedergetDeclarations e =
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder let dcl = filterElementsName (isSmth "Declaration") e
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder in map getDeclaration dcl
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian MaederisPlainLiteral :: String -> Bool
ad187062b0009820118c1b773a232e29b879a2faChristian MaederisPlainLiteral s = "PlainLiteral" == drop (length s - 12) s
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
1a38107941725211e7c3f051f7a8f5e12199f03acmaedergetLiteral :: Element -> Literal
5ba323da9f037264b4a356085e844889aedeac23Christian MaedergetLiteral e = let lit = fromJust $ filterElementName (isSmth "Literal") e
5ba323da9f037264b4a356085e844889aedeac23Christian Maeder lf = strContent e
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder dt = fromJust $ findAttrBy (isSmth "datatypeIRI") lit
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder in
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder case findAttrBy (isSmth "lang") lit of
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder Just lang -> Literal lf (Untyped $ Just lang)
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder Nothing -> if isPlainLiteral dt then
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder Literal lf (Untyped Nothing)
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder else Literal lf (Typed $ mkQName dt)
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
7de39d39bc1700cc8a9bb9df90b920aad9e18d4aChristian MaedergetValue :: Element -> AnnotationValue
9348e8460498ddfcd9da11cd8b5794c06023e004Christian MaedergetValue e = let lit = filterElementName (isSmth "Literal") e
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder val = strContent e
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder in case lit of
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder Nothing -> AnnValue $ mkQName val
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder Just _ -> AnnValLit $ getLiteral e
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder
9348e8460498ddfcd9da11cd8b5794c06023e004Christian MaedergetAnnotation :: Element -> Annotation
230aa1e8c53fcaffd75814c7d86bd37c8012596aChristian MaedergetAnnotation e =
230aa1e8c53fcaffd75814c7d86bd37c8012596aChristian Maeder let hd = filterCh "Annotation" e
230aa1e8c53fcaffd75814c7d86bd37c8012596aChristian Maeder ap = filterCh "AnnotationProperty" e
230aa1e8c53fcaffd75814c7d86bd37c8012596aChristian Maeder av = filterCh "Literal" e ++ filterCh "IRI" e
230aa1e8c53fcaffd75814c7d86bd37c8012596aChristian Maeder in
230aa1e8c53fcaffd75814c7d86bd37c8012596aChristian Maeder Annotation (getAnnotations hd)
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder (getIRI $ head ap) (getValue $ head av)
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder
9348e8460498ddfcd9da11cd8b5794c06023e004Christian MaedergetAnnotations :: [Element] -> [Annotation]
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian MaedergetAnnotations e = map getAnnotation $ concatMap
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder (filterElementsName (isSmth "Annotation")) e
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian MaedergetAllAnnos :: Element -> [Annotation]
7de39d39bc1700cc8a9bb9df90b920aad9e18d4aChristian MaedergetAllAnnos e = map getAnnotation
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder $ filterElementsName (isSmth "Annotation") e
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder
d3c9318c22fcf44d9135a3b2c64f880b9a785babChristian Maeder -- still need to cancel double inverses
d3c9318c22fcf44d9135a3b2c64f880b9a785babChristian MaedergetObjProp :: Element -> ObjectPropertyExpression
d3c9318c22fcf44d9135a3b2c64f880b9a785babChristian MaedergetObjProp e = case filterElementName (isSmth "ObjectInverseOf") e of
d3c9318c22fcf44d9135a3b2c64f880b9a785babChristian Maeder Nothing -> ObjectProp $ getIRI e
d3c9318c22fcf44d9135a3b2c64f880b9a785babChristian Maeder Just _ -> ObjectInverseOf $ getObjProp $ head $ elChildren e
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder
502ed7ed7fecd10b6d0c83cdd48a244ec45e840aChristian MaedergetFacetValuePair :: Element -> (ConstrainingFacet, RestrictionValue)
9348e8460498ddfcd9da11cd8b5794c06023e004Christian MaedergetFacetValuePair e = (getIRI e, getLiteral $ head $ elChildren e)
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder
1a38107941725211e7c3f051f7a8f5e12199f03acmaedergetDataRange :: Element -> DataRange
7c57322afb6342e5cc8b1fdc96050b707407fc61Christian MaedergetDataRange e = case getName e of
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "Datatype" -> DataType (getIRI e) []
7de39d39bc1700cc8a9bb9df90b920aad9e18d4aChristian Maeder "DatatypeRestriction" ->
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder let dt = getIRI $ fromJust $ filterChildName (isSmth "Datatype") e
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder fvp = map getFacetValuePair
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder $ filterCh "FacetRestriction" e
fd5d3885a092ac0727fa2436cdfc3b248318ebd8Christian Maeder in DataType dt fvp
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder "DataComplementOf" -> DataComplementOf
628310b42327ad76ce471caf0dde6563d6fa6307Christian Maeder $ getDataRange $ head $ elChildren e
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder "DataOneOf" -> DataOneOf
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder $ map getLiteral $ filterCh "Literal" e
7de39d39bc1700cc8a9bb9df90b920aad9e18d4aChristian Maeder "DataIntersectionOf" -> DataJunction IntersectionOf
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder $ map getDataRange $ elChildren e
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder "DataUnionOf" -> DataJunction UnionOf
31242f7541fd6ef179e4eb5be7522ddf54ae397bChristian Maeder $ map getDataRange $ elChildren e
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder _ -> error "XML parser: not data range"
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian MaedergetClassExpression :: Element -> ClassExpression
7de39d39bc1700cc8a9bb9df90b920aad9e18d4aChristian MaedergetClassExpression e =
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder let ch = elChildren e
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder in case getName e of
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder "Class" -> Expression $ getIRI e
628310b42327ad76ce471caf0dde6563d6fa6307Christian Maeder "ObjectIntersectionOf" -> ObjectJunction IntersectionOf
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder $ map getClassExpression ch
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "ObjectUnionOf" -> ObjectJunction UnionOf
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder $ map getClassExpression ch
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder "ObjectComplementOf" -> ObjectComplementOf
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder $ getClassExpression $ head ch
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder "ObjectOneOf" -> ObjectOneOf
628310b42327ad76ce471caf0dde6563d6fa6307Christian Maeder $ map getIRI ch
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder "ObjectSomeValuesFrom" -> ObjectValuesFrom SomeValuesFrom
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder (getObjProp $ head ch) (getClassExpression $ last ch)
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder "ObjectAllValuesFrom" -> ObjectValuesFrom AllValuesFrom
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder (getObjProp $ head ch) (getClassExpression $ last ch)
964d1dce6aa88a14e240a4f2fb81c539d2f834fcChristian Maeder "ObjectHasValue" -> ObjectHasValue (getObjProp $ head ch) (getIRI $ last ch)
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder "ObjectHasSelf" -> ObjectHasSelf $ getObjProp $ head ch
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder "ObjectMinCardinality" -> if length ch == 2 then
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder ObjectCardinality $ Cardinality
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder MinCardinality (getInt e) (getObjProp $ head ch)
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder $ Just $ getClassExpression $ last ch
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder else ObjectCardinality $ Cardinality
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder MinCardinality (getInt e) (getObjProp $ head ch) Nothing
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "ObjectMaxCardinality" -> if length ch == 2 then
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder ObjectCardinality $ Cardinality
fd5d3885a092ac0727fa2436cdfc3b248318ebd8Christian Maeder MaxCardinality (getInt e) (getObjProp $ head ch)
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder $ Just $ getClassExpression $ last ch
c9892acbf03a509d874ac6d79b9a2cb09042e0dcChristian Maeder else ObjectCardinality $ Cardinality
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder MaxCardinality (getInt e) (getObjProp $ head ch) Nothing
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "ObjectExactCardinality" -> if length ch == 2 then
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder ObjectCardinality $ Cardinality
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder ExactCardinality (getInt e) (getObjProp $ head ch)
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder $ Just $ getClassExpression $ last ch
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder else ObjectCardinality $ Cardinality
31a189d4cff554f78407cdc422480e84e99a6ec6Christian Maeder ExactCardinality (getInt e) (getObjProp $ head ch) Nothing
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "DataSomeValuesFrom" ->
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder let dp = map getIRI $ init ch
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder dr = last ch
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder in DataValuesFrom SomeValuesFrom (head dp) (tail dp) (getDataRange dr)
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "DataAllValuesFrom" ->
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder let dp = map getIRI $ init ch
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder dr = last ch
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder in DataValuesFrom AllValuesFrom (head dp) (tail dp) (getDataRange dr)
b49276c9f50038e0bd499ad49f7bd6444566a834Christian Maeder "DataHasValue" -> DataHasValue (getIRI $ head ch) (getLiteral $ last ch)
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder "DataMinCardinality" -> if length ch == 2 then
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder DataCardinality $ Cardinality
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder MinCardinality (getInt e) (getIRI $ head ch)
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder $ Just $ getDataRange $ last ch
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder else DataCardinality $ Cardinality
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder MinCardinality (getInt e) (getIRI $ head ch) Nothing
16e124196c6b204769042028c74f533509c9b5d3Christian Maeder "DataMaxCardinality" -> if length ch == 2 then
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder DataCardinality $ Cardinality
9348e8460498ddfcd9da11cd8b5794c06023e004Christian Maeder MaxCardinality (getInt e) (getIRI $ head ch)
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder $ Just $ getDataRange $ last ch
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder else DataCardinality $ Cardinality
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder MaxCardinality (getInt e) (getIRI $ head ch) Nothing
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "DataExactCardinality" -> if length ch == 2 then
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder DataCardinality $ Cardinality
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder ExactCardinality (getInt e) (getIRI $ head ch)
31a189d4cff554f78407cdc422480e84e99a6ec6Christian Maeder $ Just $ getDataRange $ last ch
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder else DataCardinality $ Cardinality
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder ExactCardinality (getInt e) (getIRI $ head ch) Nothing
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder _ -> error "XML parser: not ClassExpression"
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian MaedergetClassAxiom :: Element -> Axiom
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian MaedergetClassAxiom e =
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder let ch = elChildren e
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder as = concatMap getAllAnnos ch
facf15c975d25ca5d31d8f84bf48f09d1d951ad6Christian Maeder l = filterChL classExpressionList e
facf15c975d25ca5d31d8f84bf48f09d1d951ad6Christian Maeder drl = filterChL dataRangeList e
facf15c975d25ca5d31d8f84bf48f09d1d951ad6Christian Maeder cel = map getClassExpression l
facf15c975d25ca5d31d8f84bf48f09d1d951ad6Christian Maeder in case getName e of
facf15c975d25ca5d31d8f84bf48f09d1d951ad6Christian Maeder "SubClassOf" ->
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder let ces = drop (length ch - 2) ch
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder sub = head ces
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder super = last ces
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder in PlainAxiom (ClassEntity $ getClassExpression sub)
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder $ ListFrameBit (Just SubClass) $ ExpressionBit [(as, (getClassExpression super))]
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder "EquivalentClasses" -> PlainAxiom (Misc as) $ ListFrameBit
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder (Just (EDRelation Equivalent)) $ ExpressionBit
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder $ map (\ x -> ([], x)) cel
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder "DisjointClasses" -> PlainAxiom (Misc as) $ ListFrameBit
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder (Just (EDRelation Disjoint)) $ ExpressionBit
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder $ map (\ x -> ([], x)) cel
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder "DisjointUnion" -> PlainAxiom (SimpleEntity $ getEntity $ head l)
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder $ AnnFrameBit as $ ClassDisjointUnion $ map getClassExpression $ tail l
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder "DatatypeDefinition" -> PlainAxiom (SimpleEntity $ getEntity $ head drl)
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder $ AnnFrameBit as $ DatatypeBit $ getDataRange $ last drl
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder _ -> error "XML parser: not class axiom"
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
afa6848d579d235c9677e1ab477916df8e5ae11aChristian MaederhasKey :: Element -> Axiom
afa6848d579d235c9677e1ab477916df8e5ae11aChristian MaederhasKey e =
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder let as = concatMap getAllAnnos $ elChildren e
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder ce = getClassExpression $ head $ filterChL classExpressionList e
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder op = map getObjProp $ filterChL objectPropList e
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder dp = map getIRI $ filterChL dataPropList e
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder in PlainAxiom (ClassEntity ce) $ AnnFrameBit as $ ClassHasKey op dp
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder
f8c07dc6526e0134d66885d461a30abadc2c6038Christian MaedergetOPAxiom :: Element -> Axiom
de2f13b8310de00ca228385b1530660e036054c2Christian MaedergetOPAxiom e =
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder let as = concatMap getAllAnnos $ elChildren e
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder op = getObjProp $ fromJust
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder $ filterChildName (isSmthList objectPropList) e
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder in case getName e of
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder "SubObjectPropertyOf" ->
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder let opchain = concatMap (map getObjProp) $ map elChildren
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder $ filterCh "ObjectPropertyChain" e
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder in if null opchain
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder then let opl = map getObjProp $ filterChL objectPropList e
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder in PlainAxiom (ObjectEntity $ head opl)
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder $ ListFrameBit (Just SubPropertyOf) $ ObjectBit
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder [(as, last opl)]
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder else PlainAxiom (ObjectEntity op) $ AnnFrameBit as
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder $ ObjectSubPropertyChain opchain
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder "EquivalentObjectProperties" ->
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder let opl = map getObjProp $ filterChL objectPropList e
d976ba42e9d48c289f9c73147669c7e57b7aa98eChristian Maeder in PlainAxiom (Misc as) $ ListFrameBit (Just (EDRelation Equivalent))
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder $ ObjectBit $ map (\ x -> ([], x)) opl
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder "DisjointObjectProperties" ->
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder let opl = map getObjProp $ filterChL objectPropList e
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder in PlainAxiom (Misc as) $ ListFrameBit (Just (EDRelation Disjoint))
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder $ ObjectBit $ map (\ x -> ([], x)) opl
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder
afa6848d579d235c9677e1ab477916df8e5ae11aChristian MaedergetDPAxiom :: Element -> Axiom
f8c07dc6526e0134d66885d461a30abadc2c6038Christian MaedergetDPAxiom e =
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder let as = concatMap getAllAnnos $ elChildren e
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder in case getName e of
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder "SubDataPropertyOf" ->
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder let dpl = map getIRI $ filterChL dataPropList e
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder in PlainAxiom (SimpleEntity $ Entity DataProperty $ head dpl)
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder $ ListFrameBit (Just SubPropertyOf) $ DataBit [(as, last dpl)]
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder "EquivalentDataProperties" ->
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder let dpl = map getIRI $ filterChL dataPropList e
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder in PlainAxiom (Misc as) $ ListFrameBit (Just (EDRelation Equivalent))
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder $ DataBit $ map (\ x -> ([], x)) dpl
31a189d4cff554f78407cdc422480e84e99a6ec6Christian Maeder "DisjointDataProperties" ->
31a189d4cff554f78407cdc422480e84e99a6ec6Christian Maeder let dpl = map getIRI $ filterChL dataPropList e
31a189d4cff554f78407cdc422480e84e99a6ec6Christian Maeder in PlainAxiom (Misc as) $ ListFrameBit (Just (EDRelation Disjoint))
31a189d4cff554f78407cdc422480e84e99a6ec6Christian Maeder $ DataBit $ map (\ x -> ([], x)) dpl
31a189d4cff554f78407cdc422480e84e99a6ec6Christian Maeder
31a189d4cff554f78407cdc422480e84e99a6ec6Christian Maeder
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder
d4146229cf85928342dfd25ec8b579a7feb0d381Christian Maeder
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder
4561227a776bdf0ab679b19fb92f1eaaed8786f7Christian Maeder
f8c07dc6526e0134d66885d461a30abadc2c6038Christian Maeder
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder
afa6848d579d235c9677e1ab477916df8e5ae11aChristian Maeder
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder
0be2d0cfd911d313e7e941edbc77f95052c8c19bChristian Maeder