AS.hs revision 544989bc1f6ed4bc0813334ffd934db0fb0010ea
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder{- |
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederModule : $Header$
e6d40133bc9f858308654afb1262b8b483ec5922Till MossakowskiCopyright : (c) C. Maeder, Felix Gabriel Mance
1549f3abf73c1122acff724f718b615c82fa3648Till MossakowskiLicense : GPLv2 or higher, see LICENSE.txt
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederMaintainer : Christian.Maeder@dfki.de
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederStability : provisional
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederPortability : portable
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian Maeder
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederOWL 2 Functional Syntax constructs
e6d40133bc9f858308654afb1262b8b483ec5922Till Mossakowski
1549f3abf73c1122acff724f718b615c82fa3648Till MossakowskiReferences:
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder <http://www.w3.org/TR/2009/REC-owl2-syntax-20091027/#Functional-Style_Syntax>
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder <http://www.w3.org/TR/owl2-manchester-syntax/>
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder-}
f8b715ab2993083761c0aedb78f1819bcf67b6ccChristian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maedermodule OWL2.AS where
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder
ad270004874ce1d0697fb30d7309f180553bb315Christian Maederimport Common.Id
ad270004874ce1d0697fb30d7309f180553bb315Christian Maederimport OWL2.ColonKeywords
5e46b572ed576c0494768998b043d9d340594122Till Mossakowskiimport OWL2.Keywords
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang
23a00c966f2aa8da525d7a7c51933c99964426c0Christian Maederimport Data.Char (intToDigit)
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maederimport Data.List
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maederimport Data.Maybe
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wangimport qualified Data.Map as Map
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maederdata IRIType = Full | Abbreviated | NodeID
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder deriving (Show, Eq, Ord)
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder{- | full or abbreviated IRIs with a possible uri for the prefix
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski or a local part following a hash sign -}
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maederdata QName = QN
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder { namePrefix :: String
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder -- ^ the name prefix part of a qualified name \"namePrefix:localPart\"
90c174bac60a72ffd81bc3bf5ae2dd9a61943b8bChristian Maeder , localPart :: String
2561b4bfc45d280ee2be8a7870314670e4e682e4Christian Maeder -- ^ the local part of a qualified name \"namePrefix:localPart\"
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus Luettich , iriType :: IRIType
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder , expandedIRI :: String
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus Luettich -- ^ the associated namespace uri (not printed)
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder , iriPos :: Range
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder } deriving Show
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maederinstance Eq QName where
c7e03d0708369f944b6f235057b39142a21599f2Mihai Codescu p == q = compare p q == EQ
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder
986d3f255182539098a97ac86da9eeee5b7a72e3Christian Maederinstance Ord QName where
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder compare (QN p1 l1 b1 n1 _) (QN p2 l2 b2 n2 _) =
8e80792f474d154ff11762fac081a422e34f1accChristian Maeder if null n1 || null n2 then compare (b1, p1, l1) (b2, p2, l2) else
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder compare n1 n2 -- compare fully expanded names only
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian Maederinstance GetRange QName where
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder getRange = iriPos
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian MaedershowQN :: QName -> String
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian MaedershowQN q = (if iriType q /= Abbreviated then showQI else showQU) q
4c7f058cdd19ce67b2b5d4b7f69703d0f8a21e38Christian Maeder
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian Maeder-- | show QName as abbreviated iri
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian MaedershowQU :: QName -> String
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian MaedershowQU (QN pre local _ _ _) =
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian Maeder if null pre then local else pre ++ ":" ++ local
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian Maeder
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian Maeder-- | show QName in ankle brackets as full iris
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian MaedershowQI :: QName -> String
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian MaedershowQI = ('<' :) . (++ ">") . showQU
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian Maeder
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian MaedernullQName :: QName
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaedernullQName = QN "" "" Abbreviated "" nullRange
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian Maeder
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaederisNullQName :: QName -> Bool
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaederisNullQName qn = case qn of
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian Maeder QN "" "" _ "" _ -> True
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian Maeder _ -> False
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian Maeder
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaederdummyQName :: QName
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaederdummyQName =
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian Maeder QN "http" "//www.dfki.de/sks/hets/ontology/unamed" Full "" nullRange
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian Maeder
351145cfe8c03b4d47133c96b209f2bd6cfbf504Christian MaedermkQName :: String -> QName
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaedermkQName s = nullQName { localPart = s }
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian Maeder
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaedersetQRange :: Range -> QName -> QName
81101b83a042f5a1bdeeef93b1b49aff05817e44Christian MaedersetQRange r q = q { iriPos = r }
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian Maeder
9eb39c7a0e7a1ddad1eec1d23c6d4e3a99c54023Christian MaedersetPrefix :: String -> QName -> QName
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian MaedersetPrefix s q = q { namePrefix = s }
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaedersetFull :: QName -> QName
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaedersetFull q = q {iriType = Full}
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maedertype IRI = QName
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder-- | checks if an IRI is an anonymous individual
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaederisAnonymous :: IRI -> Bool
03136b84a0c70d877e227444f0875e209506b9e4Christian MaederisAnonymous iri = iriType iri == NodeID
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder-- | checks if a string (bound to be localPart of an IRI) contains \":\/\/\"
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaedercssIRI :: String -> IRIType
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaedercssIRI iri = if isInfixOf "://" iri then Full else Abbreviated
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder-- | prefix -> localname
03136b84a0c70d877e227444f0875e209506b9e4Christian Maedertype PrefixMap = Map.Map String String
fa167e362877db231378e17ba49c66fbb84862fcChristian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian MaederpredefPrefixes :: PrefixMap
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian MaederpredefPrefixes = Map.fromList
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder [ ("owl", "http://www.w3.org/2002/07/owl#")
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder , ("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#")
6a22b2854c3bc9cb4877cb7d29049d6559238639Christian Maeder , ("rdfs", "http://www.w3.org/2000/01/rdf-schema#")
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder , ("xsd", "http://www.w3.org/2001/XMLSchema#")
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder , ("", showQU dummyQName ++ "#") ]
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maedertype LexicalForm = String
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowskitype LanguageTag = String
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowskitype ImportIRI = IRI
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowskitype OntologyIRI = IRI
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maedertype Class = IRI
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maedertype Datatype = IRI
03136b84a0c70d877e227444f0875e209506b9e4Christian Maedertype ObjectProperty = IRI
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maedertype DataProperty = IRI
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maedertype AnnotationProperty = IRI
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maedertype NamedIndividual = IRI
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maedertype Individual = IRI
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian Maederdata EquivOrDisjoint = Equivalent | Disjoint
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder deriving (Show, Eq, Ord)
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian MaedershowEquivOrDisjoint :: EquivOrDisjoint -> String
03136b84a0c70d877e227444f0875e209506b9e4Christian MaedershowEquivOrDisjoint ed = case ed of
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder Equivalent -> equivalentToC
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder Disjoint -> disjointWithC
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maederdata DomainOrRange = ADomain | ARange
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder deriving (Show, Eq, Ord)
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
aea143fff7a50aceb809845fbc42698b0b3f545aChristian MaedershowDomainOrRange :: DomainOrRange -> String
aea143fff7a50aceb809845fbc42698b0b3f545aChristian MaedershowDomainOrRange dr = case dr of
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder ADomain -> domainC
6a22b2854c3bc9cb4877cb7d29049d6559238639Christian Maeder ARange -> rangeC
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maederdata SameOrDifferent = Same | Different
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder deriving (Show, Eq, Ord)
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaedershowSameOrDifferent :: SameOrDifferent -> String
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaedershowSameOrDifferent sd = case sd of
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder Same -> sameAsC
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder Different -> differentFromC
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian Maederdata Relation =
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder EDRelation EquivOrDisjoint
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski | SubPropertyOf
74d9a385499bf903b24848dff450a153f525bda7Christian Maeder | InverseOf
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder | SubClass
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder | Types
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder | DRRelation DomainOrRange
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder | SDRelation SameOrDifferent
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder deriving (Show, Eq, Ord)
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian MaedershowRelation :: Relation -> String
03136b84a0c70d877e227444f0875e209506b9e4Christian MaedershowRelation r = case r of
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder EDRelation ed -> showEquivOrDisjoint ed
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder SubPropertyOf -> subPropertyOfC
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder InverseOf -> inverseOfC
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder SubClass -> subClassOfC
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder Types -> typesC
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder DRRelation dr -> showDomainOrRange dr
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder SDRelation sd -> showSameOrDifferent sd
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaedergetED :: Relation -> EquivOrDisjoint
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaedergetED r = case r of
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski EDRelation ed -> ed
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski _ -> error "not domain or range"
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaedergetDR :: Relation -> DomainOrRange
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaedergetDR r = case r of
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder DRRelation dr -> dr
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder _ -> error "not domain or range"
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian MaedergetSD :: Relation -> SameOrDifferent
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian MaedergetSD s = case s of
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder SDRelation sd -> sd
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder _ -> error "not same or different"
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maederdata Character =
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder Functional
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder | InverseFunctional
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder | Reflexive
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder | Irreflexive
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder | Symmetric
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder | Asymmetric
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maeder | Antisymmetric
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder | Transitive
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maeder deriving (Enum, Bounded, Show, Eq, Ord)
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maeder
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowskidata PositiveOrNegative = Positive | Negative
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder deriving (Show, Eq, Ord)
ab642ff136ce716af9e609b667e3f06d766c4ad7Christian Maeder
99476ac2689c74251219db4782e57fe713a24a52Christian Maederdata QuantifierType = AllValuesFrom | SomeValuesFrom
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder deriving (Show, Eq, Ord)
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
99476ac2689c74251219db4782e57fe713a24a52Christian MaedershowQuantifierType :: QuantifierType -> String
99476ac2689c74251219db4782e57fe713a24a52Christian MaedershowQuantifierType ty = case ty of
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder AllValuesFrom -> onlyS
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder SomeValuesFrom -> someS
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder-- * Predefined IRI checkings
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian MaederisThing :: IRI -> Bool
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederisThing = isOWLPredef predefClass
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian MaederisPredefObjProp :: IRI -> Bool
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian MaederisPredefObjProp = isOWLPredef predefObjProp
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederisPredefDataProp :: IRI -> Bool
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederisPredefDataProp = isOWLPredef predefDataProp
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederisPredefAnnoProp :: IRI -> Bool
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederisPredefAnnoProp iri = isOWLPredef predefOWLAnnoProps iri
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian Maeder || checkPredef predefRDFSAnnoProps "rdfs" iri
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian MaederisPredefPropOrClass :: IRI -> Bool
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian MaederisPredefPropOrClass iri = isPredefAnnoProp iri || isPredefDataProp iri
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian Maeder || isPredefObjProp iri || isThing iri
88124ca824f94153b0a2a24ea1e4b089fff7011fChristian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederpredefIRIs :: [IRI]
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederpredefIRIs = map (setPrefix "xsd" . mkQName) xsdKeys
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder ++ map (setPrefix "owl" . mkQName) owlNumbers
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder ++ [setPrefix "rdf" (mkQName rdfsLiteral),
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder setPrefix "rdfs" $ mkQName xmlLiteral]
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederisDatatypeKey :: IRI -> Bool
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederisDatatypeKey iri = any (\ (l, p) -> checkPredef l p iri) [(xsdKeys, "xsd"),
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maeder (owlNumbers, "owl"), ([xmlLiteral], "rdf"), ([rdfsLiteral], "rdfs")]
8c63cd89ef840cd7a3d3b75f0207dc800388c800Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaedercheckPredef :: [String] -> String -> IRI -> Bool
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskicheckPredef sl pref u =
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder localPart u `elem` sl && elem (namePrefix u) ["", pref]
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder || showQU u `elem` map (Map.findWithDefault
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder (error $ "not predefined prefix: " ++ show pref)
ee152ae82dc19d6415119c0019ae1bfa991b1f02Christian Maeder pref (predefPrefixes `Map.difference`
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder Map.fromList [("", showQU dummyQName ++ "#")]) ++) sl
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskiisOWLPredef :: [String] -> IRI -> Bool
03136b84a0c70d877e227444f0875e209506b9e4Christian MaederisOWLPredef sl = checkPredef sl "owl"
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder-- | sets the correct prefix for the predefined datatypes
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian MaedersetDatatypePrefix :: IRI -> IRI
03136b84a0c70d877e227444f0875e209506b9e4Christian MaedersetDatatypePrefix iri = let lp = localPart iri in
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder if lp `elem` xsdKeys
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder then setPrefix "xsd" iri
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder else if lp `elem` owlNumbers
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder then setPrefix "owl" iri
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder else case lp of
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder "XMLLiteral" -> setPrefix "rdf" iri
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder "Literal" -> setPrefix "rdfs" iri
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder _ -> error $ showQU iri ++ " is not a predefined datatype"
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder-- | checks if the IRI is part of the built-in ones and puts the correct prefix
99476ac2689c74251219db4782e57fe713a24a52Christian MaedersetReservedPrefix :: IRI -> IRI
99476ac2689c74251219db4782e57fe713a24a52Christian MaedersetReservedPrefix iri
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder | isDatatypeKey iri && null (namePrefix iri) = setDatatypePrefix iri
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder | (isThing iri || isPredefAnnoProp iri || isPredefDataProp iri
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder || isPredefObjProp iri) && null (namePrefix iri) = setPrefix "owl" iri
99476ac2689c74251219db4782e57fe713a24a52Christian Maeder | otherwise = iri
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaederstripReservedPrefix :: IRI -> IRI
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaederstripReservedPrefix = mkQName . getPredefName
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder{- | returns the name of the predefined IRI (e.g <xsd:string> returns "string"
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder or <http://www.w3.org/2002/07/owl#real> returns "real") -}
6a22b2854c3bc9cb4877cb7d29049d6559238639Christian MaedergetPredefName :: IRI -> String
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskigetPredefName iri =
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder if namePrefix iri `elem` ["", "xsd", "rdf", "rdfs", "owl"]
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder then localPart iri
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder else case mapMaybe (flip stripPrefix $ showQU iri)
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder $ Map.elems predefPrefixes of
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder [s] -> s
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder _ -> error $ showQU iri ++ " is not a predefined IRI"
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maederdata DatatypeCat = OWL2Number | OWL2String | OWL2Bool | Other
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder deriving (Show, Eq, Ord)
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaedergetDatatypeCat :: IRI -> DatatypeCat
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaedergetDatatypeCat iri = case isDatatypeKey iri of
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder True
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder | hasPrefXSD [booleanS] iri -> OWL2Bool
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder | hasPrefXSD xsdNumbers iri || checkPredef owlNumbers "owl" iri
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder -> OWL2Number
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder | hasPrefXSD xsdStrings iri -> OWL2String
6a22b2854c3bc9cb4877cb7d29049d6559238639Christian Maeder | otherwise -> Other
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder False -> Other
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaederhasPrefXSD :: [String] -> IRI -> Bool
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaederhasPrefXSD sl = checkPredef sl "xsd"
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian Maeder
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaederfacetToIRI :: DatatypeFacet -> ConstrainingFacet
0b6f6d3eeb7b3b36292e60f1b3da5a5ce42eef1aChristian MaederfacetToIRI = setPrefix "xsd" . mkQName . showFacet
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder-- * Cardinalities
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian Maederdata CardinalityType = MinCardinality | MaxCardinality | ExactCardinality
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder deriving (Show, Eq, Ord)
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedershowCardinalityType :: CardinalityType -> String
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian MaedershowCardinalityType ty = case ty of
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder MinCardinality -> minS
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder MaxCardinality -> maxS
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder ExactCardinality -> exactlyS
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maederdata Cardinality a b = Cardinality CardinalityType Int a (Maybe b)
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder deriving (Show, Eq, Ord)
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maederdata JunctionType = UnionOf | IntersectionOf
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder deriving (Show, Eq, Ord)
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maedertype ConstrainingFacet = IRI
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maedertype RestrictionValue = Literal
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder-- * ENTITIES
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maederdata Entity = Entity EntityType IRI deriving (Show, Eq, Ord)
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maederinstance GetRange Entity where
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder getRange (Entity _ iri) = iriPos iri
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maederdata EntityType =
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder Datatype
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder | Class
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder | ObjectProperty
e82587ca2892d246aa4405c2f5b9f30f287f9ebfChristian Maeder | DataProperty
2561b4bfc45d280ee2be8a7870314670e4e682e4Christian Maeder | AnnotationProperty
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder | NamedIndividual
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder deriving (Enum, Bounded, Show, Read, Eq, Ord)
fa167e362877db231378e17ba49c66fbb84862fcChristian Maeder
fa167e362877db231378e17ba49c66fbb84862fcChristian MaedershowEntityType :: EntityType -> String
fa167e362877db231378e17ba49c66fbb84862fcChristian MaedershowEntityType e = case e of
fa167e362877db231378e17ba49c66fbb84862fcChristian Maeder Datatype -> datatypeC
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder Class -> classC
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder ObjectProperty -> objectPropertyC
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder DataProperty -> dataPropertyC
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder AnnotationProperty -> annotationPropertyC
aea143fff7a50aceb809845fbc42698b0b3f545aChristian Maeder NamedIndividual -> individualC
caf021dd48c90ff6b26117f13e1d8c0ef1ca618aChristian Maeder
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaederentityTypes :: [EntityType]
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till MossakowskientityTypes = [minBound .. maxBound]
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian MaedercutIRI :: Entity -> IRI
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian MaedercutIRI (Entity _ iri) = iri
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder-- * LITERALS
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maederdata TypedOrUntyped = Typed Datatype | Untyped (Maybe LanguageTag)
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder deriving (Show, Eq, Ord)
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maederdata Literal = Literal LexicalForm TypedOrUntyped | NumberLit FloatLit
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder deriving (Show, Eq, Ord)
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder-- | non-negative integers given by the sequence of digits
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maederdata NNInt = NNInt [Int] deriving (Eq, Ord)
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder
44d2a211a352759ee988ed8353026f5fa9511209Christian Maederinstance Show NNInt where
44d2a211a352759ee988ed8353026f5fa9511209Christian Maeder show (NNInt l) = map intToDigit l
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaederzeroNNInt :: NNInt
4fc727afa544a757d1959ce77c02208f8bf330dcChristian MaederzeroNNInt = NNInt []
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaederisZeroNNInt :: NNInt -> Bool
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaederisZeroNNInt (NNInt l) = null l
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maederdata IntLit = IntLit
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder { absInt :: NNInt
6a22b2854c3bc9cb4877cb7d29049d6559238639Christian Maeder , isNegInt :: Bool }
03136b84a0c70d877e227444f0875e209506b9e4Christian Maeder deriving (Eq, Ord)
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder
4fc727afa544a757d1959ce77c02208f8bf330dcChristian Maederinstance Show IntLit where
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder show (IntLit n b) = (if b then ('-' :) else id) $ show n
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian MaederzeroInt :: IntLit
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian MaederzeroInt = IntLit zeroNNInt False
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian MaederisZeroInt :: IntLit -> Bool
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian MaederisZeroInt (IntLit n _) = isZeroNNInt n
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian MaedernegNNInt :: Bool -> NNInt -> IntLit
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian MaedernegNNInt b n = IntLit n b
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian MaedernegInt :: IntLit -> IntLit
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian MaedernegInt (IntLit n b) = IntLit n $ not b
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski
74d9a385499bf903b24848dff450a153f525bda7Christian Maederdata DecLit = DecLit
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski { truncDec :: IntLit
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder , fracDec :: NNInt }
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder deriving (Eq, Ord)
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maederinstance Show DecLit where
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski show (DecLit t f) = show t
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder ++ if isZeroNNInt f then "" else
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski '.' : show f
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski
5e46b572ed576c0494768998b043d9d340594122Till MossakowskiisDecInt :: DecLit -> Bool
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaederisDecInt = isZeroNNInt . fracDec
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaedernegDec :: Bool -> DecLit -> DecLit
5e46b572ed576c0494768998b043d9d340594122Till MossakowskinegDec b (DecLit t f) = DecLit (if b then negInt t else t) f
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maederdata FloatLit = FloatLit
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder { floatBase :: DecLit
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder , floatExp :: IntLit }
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder deriving (Eq, Ord)
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maederinstance Show FloatLit where
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder show (FloatLit b e) = show b
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder ++ if isZeroInt e then "" else
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder 'E' : show e ++ "F"
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederisFloatDec :: FloatLit -> Bool
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederisFloatDec = isZeroInt . floatExp
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian Maeder
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederisFloatInt :: FloatLit -> Bool
22eea35d0effc6582b2951a28b5240fa7a82f3dfChristian MaederisFloatInt f = isFloatDec f && isDecInt (floatBase f)
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederfloatToInt :: FloatLit -> IntLit
d058429727dd696a0327cdc28cadd268c34c36baChristian MaederfloatToInt = truncDec . floatBase
d058429727dd696a0327cdc28cadd268c34c36baChristian Maeder
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederintToDec :: IntLit -> DecLit
d058429727dd696a0327cdc28cadd268c34c36baChristian MaederintToDec i = DecLit i zeroNNInt
d058429727dd696a0327cdc28cadd268c34c36baChristian Maeder
d058429727dd696a0327cdc28cadd268c34c36baChristian MaederdecToFloat :: DecLit -> FloatLit
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederdecToFloat d = FloatLit d zeroInt
d058429727dd696a0327cdc28cadd268c34c36baChristian Maeder
d058429727dd696a0327cdc28cadd268c34c36baChristian MaederintToFloat :: IntLit -> FloatLit
ebc51e8081f6f1fe2f3d39ceff81d8dd0169c0b0Christian MaederintToFloat = decToFloat . intToDec
d058429727dd696a0327cdc28cadd268c34c36baChristian Maeder
329d1810c6d5a5a0827e1d07503d94431578d176Christian MaederabInt :: IntLit -> IntLit
5e46b572ed576c0494768998b043d9d340594122Till MossakowskiabInt int = int {isNegInt = False}
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder
329d1810c6d5a5a0827e1d07503d94431578d176Christian MaederabDec :: DecLit -> DecLit
d058429727dd696a0327cdc28cadd268c34c36baChristian MaederabDec dec = dec {truncDec = abInt $ truncDec dec}
d058429727dd696a0327cdc28cadd268c34c36baChristian Maeder
03136b84a0c70d877e227444f0875e209506b9e4Christian MaederabFloat :: FloatLit -> FloatLit
5a9a06d23910b9521e1d1cd39865ac7912ccee4bChristian MaederabFloat f = f {floatBase = abDec $ floatBase f}
5a9a06d23910b9521e1d1cd39865ac7912ccee4bChristian Maeder
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaederisNegDec :: DecLit -> Bool
d058429727dd696a0327cdc28cadd268c34c36baChristian MaederisNegDec d = isNegInt $ truncDec d
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder
5e46b572ed576c0494768998b043d9d340594122Till MossakowskinumberName :: FloatLit -> String
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian MaedernumberName f
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder | isFloatInt f = integerS
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder | isFloatDec f = decimalS
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder | otherwise = floatS
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian MaedercTypeS :: String
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian MaedercTypeS = "^^"
d0c66a832d7b556e20ea4af4852cdc27a5463d51Christian Maeder
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder-- * PROPERTY EXPRESSIONS
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maedertype InverseObjectProperty = ObjectPropertyExpression
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maeder
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maederdata ObjectPropertyExpression = ObjectProp ObjectProperty
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder | ObjectInverseOf InverseObjectProperty
86b1d0c80abdd4ca36491cf7025b718a5fea5080Christian Maeder deriving (Show, Eq, Ord)
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maedertype DataPropertyExpression = DataProperty
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder-- * DATA RANGES
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder
40d15f6c5f4d15866e085c588f8b5130dfd6cf63Christian Maederdata DataRange =
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder DataType Datatype [(ConstrainingFacet, RestrictionValue)]
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder | DataJunction JunctionType [DataRange]
27b37f8e6b165f7abb653a54b45ffcdb81cec561Christian Maeder | DataComplementOf DataRange
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski | DataOneOf [Literal]
32562a567baac248a00782d2727716c13117dc4aChristian Maeder deriving (Show, Eq, Ord)
32562a567baac248a00782d2727716c13117dc4aChristian Maeder
32562a567baac248a00782d2727716c13117dc4aChristian Maeder-- * CLASS EXPERSSIONS
32562a567baac248a00782d2727716c13117dc4aChristian Maeder
32562a567baac248a00782d2727716c13117dc4aChristian Maederdata ClassExpression =
32562a567baac248a00782d2727716c13117dc4aChristian Maeder Expression Class
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder | ObjectJunction JunctionType [ClassExpression]
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder | ObjectComplementOf ClassExpression
32562a567baac248a00782d2727716c13117dc4aChristian Maeder | ObjectOneOf [Individual]
32562a567baac248a00782d2727716c13117dc4aChristian Maeder | ObjectValuesFrom QuantifierType ObjectPropertyExpression ClassExpression
32562a567baac248a00782d2727716c13117dc4aChristian Maeder | ObjectHasValue ObjectPropertyExpression Individual
32562a567baac248a00782d2727716c13117dc4aChristian Maeder | ObjectHasSelf ObjectPropertyExpression
32562a567baac248a00782d2727716c13117dc4aChristian Maeder | ObjectCardinality (Cardinality ObjectPropertyExpression ClassExpression)
32562a567baac248a00782d2727716c13117dc4aChristian Maeder | DataValuesFrom QuantifierType DataPropertyExpression DataRange
746440cc1b984a852f5864235b8fa3930963a081Christian Maeder | DataHasValue DataPropertyExpression Literal
32562a567baac248a00782d2727716c13117dc4aChristian Maeder | DataCardinality (Cardinality DataPropertyExpression DataRange)
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder deriving (Show, Eq, Ord)
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder-- * ANNOTATIONS
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
e68f45f355ed9d4026ee9baff5aa75aa7c911cc2Christian Maederdata Annotation = Annotation [Annotation] AnnotationProperty AnnotationValue
e68f45f355ed9d4026ee9baff5aa75aa7c911cc2Christian Maeder deriving (Show, Eq, Ord)
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maeder
9ecf13b5fd914bc7272f1fc17348d7f4a8c77061Christian Maederdata AnnotationValue =
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder AnnValue IRI
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder | AnnValLit Literal
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder deriving (Show, Eq, Ord)
fa167e362877db231378e17ba49c66fbb84862fcChristian Maeder