AS.hs revision 63946b0fc89de113d5bf4819f9c8cc5d6adce810
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder{-# LANGUAGE DeriveDataTypeable #-}
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder{- |
1549f3abf73c1122acff724f718b615c82fa3648Till MossakowskiModule : $Header$
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian MaederCopyright : (c) C. Maeder, Felix Gabriel Mance
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
b4fbc96e05117839ca409f5f20f97b3ac872d1edTill Mossakowski
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederMaintainer : Christian.Maeder@dfki.de
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederStability : provisional
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederPortability : portable
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
1549f3abf73c1122acff724f718b615c82fa3648Till MossakowskiOWL 2 Functional Syntax constructs
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
1549f3abf73c1122acff724f718b615c82fa3648Till MossakowskiReferences:
1549f3abf73c1122acff724f718b615c82fa3648Till Mossakowski <http://www.w3.org/TR/2009/REC-owl2-syntax-20091027/#Functional-Style_Syntax>
1549f3abf73c1122acff724f718b615c82fa3648Till Mossakowski <http://www.w3.org/TR/owl2-manchester-syntax/>
1549f3abf73c1122acff724f718b615c82fa3648Till Mossakowski-}
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maedermodule OWL2.AS where
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maederimport Common.Id
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maederimport Common.Keywords (stringS)
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
f8b715ab2993083761c0aedb78f1819bcf67b6ccChristian Maederimport Common.Result
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maederimport OWL2.ColonKeywords
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maederimport OWL2.Keywords
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
5e46b572ed576c0494768998b043d9d340594122Till Mossakowskiimport Data.Char (intToDigit)
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wangimport Data.Data
23a00c966f2aa8da525d7a7c51933c99964426c0Christian Maederimport Data.List
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maederimport Data.Maybe
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maederimport qualified Data.Map as Map
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maederimport qualified Data.Set as Set
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maederdata IRIType = Full | Abbreviated | NodeID
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder deriving (Show, Eq, Ord, Typeable, Data)
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 -}
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maederdata QName = QN
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder { namePrefix :: String
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder -- ^ the name prefix part of a qualified name \"namePrefix:localPart\"
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus Luettich , localPart :: String
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder -- ^ the local part of a qualified name \"namePrefix:localPart\"
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus Luettich , iriType :: IRIType
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus Luettich , expandedIRI :: String
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus Luettich -- ^ the associated namespace uri (not printed)
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus Luettich , iriPos :: Range
ca020e82eb3567e7bdbb1cf70729efbd07e9caa4Klaus Luettich } deriving (Show, Typeable, Data)
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maederinstance Eq QName where
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski p == q = compare p q == EQ
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maederinstance Ord QName where
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder compare (QN p1 l1 b1 n1 _) (QN p2 l2 b2 n2 _) =
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder if null n1 || null n2 then compare (b1, p1, l1) (b2, p2, l2) else
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder compare n1 n2 -- compare fully expanded names only
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till MossakowskiqNameRange :: QName -> [Pos]
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederqNameRange q = let Range rs = iriPos q in case rs of
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder [p] -> let
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder p0 = if iriType q == Full then incSourceColumn p (-1) else p
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder in tokenRange $ Token (showQN q) $ Range [p0]
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder _ -> rs
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder
26d11a256b1433604a3dbc69913b520fff7586acChristian Maederinstance GetRange QName where
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder getRange = iriPos
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder rangeSpan = qNameRange
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian MaedershowQN :: QName -> String
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian MaedershowQN q = (if iriType q == Full then showQI else showQU) q
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder-- | show QName as abbreviated iri
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedershowQU :: QName -> String
4fc727afa544a757d1959ce77c02208f8bf330dcChristian MaedershowQU (QN pre local _ _ _) =
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder if null pre then local else pre ++ ":" ++ local
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski-- | show QName in angle brackets as full iris
5e46b572ed576c0494768998b043d9d340594122Till MossakowskishowQI :: QName -> String
5e46b572ed576c0494768998b043d9d340594122Till MossakowskishowQI n = '<' : showQU n ++ ">"
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian MaedernullQName :: QName
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian MaedernullQName = QN "" "" Abbreviated "" nullRange
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian Maeder
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian MaederisNullQName :: QName -> Bool
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaederisNullQName qn = case qn of
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder QN "" "" _ "" _ -> True
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder _ -> False
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian MaederunamedS :: String
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskiunamedS = "//www." ++ dnamedS
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskidnamedS :: String
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskidnamedS = "dfki.de/sks/hets/ontology/unamed"
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian MaederdummyQName :: QName
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaederdummyQName = QN "http" unamedS Full ("http:" ++ unamedS) nullRange
4fc727afa544a757d1959ce77c02208f8bf330dcChristian Maeder
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian MaedermkQName :: String -> QName
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian MaedermkQName s = nullQName { localPart = s }
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian MaedersetQRange :: Range -> QName -> QName
4601edb679f0ba530bbb085b25d82a411cd070aaChristian MaedersetQRange r q = q { iriPos = r }
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder
4601edb679f0ba530bbb085b25d82a411cd070aaChristian MaedersetPrefix :: String -> QName -> QName
4601edb679f0ba530bbb085b25d82a411cd070aaChristian MaedersetPrefix s q = q { namePrefix = s }
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedersetFull :: QName -> QName
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaedersetFull q = q {iriType = Full}
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maedertype IRI = QName
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder-- | checks if an IRI is an anonymous individual
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederisAnonymous :: IRI -> Bool
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederisAnonymous iri = iriType iri == NodeID || namePrefix iri == "_"
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder-- | checks if a string (bound to be localPart of an IRI) contains \":\/\/\"
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaedercssIRI :: String -> IRIType
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaedercssIRI iri = if isInfixOf "://" iri then Full else Abbreviated
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder-- | prefix -> localname
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maedertype PrefixMap = Map.Map String String
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederpredefPrefixes :: PrefixMap
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederpredefPrefixes = Map.fromList
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder [ ("owl", "http://www.w3.org/2002/07/owl#")
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder , ("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#")
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder , ("rdfs", "http://www.w3.org/2000/01/rdf-schema#")
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder , ("xsd", "http://www.w3.org/2001/XMLSchema#")
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder , ("", showQU dummyQName ++ "#") ]
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maedertype LexicalForm = String
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maedertype LanguageTag = String
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maedertype ImportIRI = IRI
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maedertype OntologyIRI = IRI
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maedertype Class = IRI
5e46b572ed576c0494768998b043d9d340594122Till Mossakowskitype Datatype = IRI
612749008484b6773aedf4d6bbc85b8d074d15c6Christian Maedertype ObjectProperty = IRI
612749008484b6773aedf4d6bbc85b8d074d15c6Christian Maedertype DataProperty = IRI
5e46b572ed576c0494768998b043d9d340594122Till Mossakowskitype AnnotationProperty = IRI
1f086d5155f47fdad9a0de4e46bbebb2c4b33d30Christian Maedertype Individual = IRI
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maederdata EquivOrDisjoint = Equivalent | Disjoint
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder deriving (Show, Eq, Ord, Typeable, Data)
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedershowEquivOrDisjoint :: EquivOrDisjoint -> String
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian MaedershowEquivOrDisjoint ed = case ed of
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder Equivalent -> equivalentToC
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder Disjoint -> disjointWithC
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maederdata DomainOrRange = ADomain | ARange
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder deriving (Show, Eq, Ord, Typeable, Data)
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskishowDomainOrRange :: DomainOrRange -> String
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskishowDomainOrRange dr = case dr of
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski ADomain -> domainC
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski ARange -> rangeC
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowskidata SameOrDifferent = Same | Different
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski deriving (Show, Eq, Ord, Typeable, Data)
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskishowSameOrDifferent :: SameOrDifferent -> String
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskishowSameOrDifferent sd = case sd of
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder Same -> sameAsC
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder Different -> differentFromC
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowskidata Relation =
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski EDRelation EquivOrDisjoint
26d11a256b1433604a3dbc69913b520fff7586acChristian Maeder | SubPropertyOf
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski | InverseOf
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski | SubClass
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski | Types
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski | DRRelation DomainOrRange
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski | SDRelation SameOrDifferent
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski deriving (Show, Eq, Ord, Typeable, Data)
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaedershowRelation :: Relation -> String
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaedershowRelation r = case r of
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder EDRelation ed -> showEquivOrDisjoint ed
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski SubPropertyOf -> subPropertyOfC
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski InverseOf -> inverseOfC
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder SubClass -> subClassOfC
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski Types -> typesC
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder DRRelation dr -> showDomainOrRange dr
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski SDRelation sd -> showSameOrDifferent sd
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaedergetED :: Relation -> EquivOrDisjoint
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaedergetED r = case r of
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder EDRelation ed -> ed
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder _ -> error "not domain or range"
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaedergetDR :: Relation -> DomainOrRange
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaedergetDR r = case r of
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski DRRelation dr -> dr
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski _ -> error "not domain or range"
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedergetSD :: Relation -> SameOrDifferent
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian MaedergetSD s = case s of
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder SDRelation sd -> sd
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder _ -> error "not same or different"
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maederdata Character =
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder Functional
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder | InverseFunctional
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder | Reflexive
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder | Irreflexive
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder | Symmetric
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder | Asymmetric
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder | Antisymmetric
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder | Transitive
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder deriving (Enum, Bounded, Show, Eq, Ord, Typeable, Data)
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maederdata PositiveOrNegative = Positive | Negative
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder deriving (Show, Eq, Ord, Typeable, Data)
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maederdata QuantifierType = AllValuesFrom | SomeValuesFrom
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder deriving (Show, Eq, Ord, Typeable, Data)
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaedershowQuantifierType :: QuantifierType -> String
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskishowQuantifierType ty = case ty of
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder AllValuesFrom -> onlyS
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder SomeValuesFrom -> someS
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder-- * Predefined IRI checkings
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaederthingMap :: PreDefMaps
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaederthingMap = makeOWLPredefMaps predefClass
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaederisThing :: IRI -> Bool
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaederisThing = checkPredef thingMap
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaedermakePredefObjProp :: PreDefMaps
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedermakePredefObjProp = makeOWLPredefMaps predefObjProp
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaederisPredefObjProp :: IRI -> Bool
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaederisPredefObjProp = checkPredef makePredefObjProp
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder
0b6f6d3eeb7b3b36292e60f1b3da5a5ce42eef1aChristian MaedermakePredefDataProp :: PreDefMaps
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaedermakePredefDataProp = makeOWLPredefMaps predefDataProp
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaederisPredefDataProp :: IRI -> Bool
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaederisPredefDataProp = checkPredef makePredefDataProp
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaedermakePredefRDFSAnnoProp :: PreDefMaps
0b6f6d3eeb7b3b36292e60f1b3da5a5ce42eef1aChristian MaedermakePredefRDFSAnnoProp = preDefMaps predefRDFSAnnoProps "rdfs"
200849122a9c65773e5b2ba8084ac3490d0490b5Christian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaederisPredefRDFSAnnoProp :: IRI -> Bool
200849122a9c65773e5b2ba8084ac3490d0490b5Christian MaederisPredefRDFSAnnoProp = checkPredef makePredefRDFSAnnoProp
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskimakePredefOWLAnnoProp :: PreDefMaps
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskimakePredefOWLAnnoProp = makeOWLPredefMaps predefOWLAnnoProps
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian MaederisPredefOWLAnnoProp :: IRI -> Bool
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaederisPredefOWLAnnoProp = checkPredef makePredefOWLAnnoProp
1f086d5155f47fdad9a0de4e46bbebb2c4b33d30Christian Maeder
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian MaederisPredefAnnoProp :: IRI -> Bool
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederisPredefAnnoProp iri = isPredefOWLAnnoProp iri || isPredefRDFSAnnoProp iri
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian MaederisPredefPropOrClass :: IRI -> Bool
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian MaederisPredefPropOrClass iri = isPredefAnnoProp iri || isPredefDataProp iri
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder || isPredefObjProp iri || isThing iri
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian MaederpredefIRIs :: Set.Set IRI
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian MaederpredefIRIs = Set.fromList $ map (setPrefix "xsd" . mkQName) xsdKeys
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder ++ map (setPrefix "owl" . mkQName) owlNumbers
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder ++ map (setPrefix "rdf" . mkQName) [rdfsLiteral, stringS]
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder ++ [setPrefix "rdfs" $ mkQName xmlLiteral]
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian MaederisDatatypeKey :: IRI -> Bool
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian MaederisDatatypeKey = not . null . isDatatypeKeyAux
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian MaederxsdMap :: PreDefMaps
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian MaederxsdMap = makeXsdMap xsdKeys
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederowlNumbersMap :: PreDefMaps
4b6aa93c12e4db86ccc7694a48a73e9cf7262d06Christian MaederowlNumbersMap = makeOWLPredefMaps owlNumbers
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian Maeder
01aafb6a9520f05df5ff467b591ecb5474dcfc86Christian MaederrdfMap :: PreDefMaps
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaederrdfMap = preDefMaps [xmlLiteral, stringS] "rdf"
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaederrdfsMap :: PreDefMaps
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaederrdfsMap = preDefMaps [rdfsLiteral] "rdfs"
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaederisDatatypeKeyAux :: IRI -> [(String, String)]
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian MaederisDatatypeKeyAux iri = mapMaybe (`checkPredefAux` iri)
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder [ xsdMap, owlNumbersMap, rdfMap, rdfsMap ]
b10d6cef708b7a659f2d3b367e8e0db0d03ae3f5Till Mossakowski
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maedertype PreDefMaps = ([String], String, String)
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder
5e46b572ed576c0494768998b043d9d340594122Till MossakowskipreDefMaps :: [String] -> String -> PreDefMaps
4601edb679f0ba530bbb085b25d82a411cd070aaChristian MaederpreDefMaps sl pref = let
578b677874296e4ba48e57b5e4b4b0270d995603Christian Maeder Just puri = Map.lookup pref predefPrefixes
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder Just sp = stripPrefix "http://www.w3.org/" puri
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder in (sl, pref, sp)
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaedercheckPredefAux :: PreDefMaps -> IRI -> Maybe (String, String)
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian MaedercheckPredefAux (sl, pref, exPref) u = case expandedIRI u of
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder "" -> Nothing
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder _ -> let lp = localPart u in case namePrefix u of
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder "http" -> case stripPrefix "//www." lp of
e01299e9b22b96b31b720ca1e9f9f5f25af9b024Christian Maeder Just q -> case stripPrefix "w3.org/" q of
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder Just r -> case stripPrefix exPref r of
4fc727afa544a757d1959ce77c02208f8bf330dcChristian Maeder Just s | elem s sl -> Just (pref, s)
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder _ -> Nothing
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder Nothing -> case stripPrefix (dnamedS ++ "#") q of
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder Just s | elem s sl -> Just (pref, s)
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder _ -> Nothing
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder Nothing -> Nothing
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder pu | elem pu ["", pref] && elem lp sl -> Just (pref, lp)
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder _ -> Nothing
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedercheckPredef :: PreDefMaps -> IRI -> Bool
4fc727afa544a757d1959ce77c02208f8bf330dcChristian MaedercheckPredef ms = isJust . checkPredefAux ms
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedermakeOWLPredefMaps :: [String] -> PreDefMaps
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian MaedermakeOWLPredefMaps sl = preDefMaps sl "owl"
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder-- | sets the correct prefix for the predefined datatypes
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedersetDatatypePrefix :: IRI -> IRI
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian MaedersetDatatypePrefix iri = case isDatatypeKeyAux iri of
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder (p, l) : _ -> setPrefix p $ mkQName l
4fc727afa544a757d1959ce77c02208f8bf330dcChristian Maeder _ -> error $ showQU iri ++ " is not a predefined datatype"
4fc727afa544a757d1959ce77c02208f8bf330dcChristian Maeder
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder-- | checks if the IRI is part of the built-in ones and puts the correct prefix
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedersetReservedPrefix :: IRI -> IRI
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian MaedersetReservedPrefix iri = case namePrefix iri of
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder ""
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder | isDatatypeKey iri -> setDatatypePrefix iri
68138d26bcddf5e89c30206aa83ab5ec006d170dChristian Maeder | isThing iri || isPredefDataProp iri || isPredefOWLAnnoProp iri
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder || isPredefObjProp iri -> setPrefix "owl" iri
b1caf27fb0c879dd39600d09d501074a2dfd865aChristian Maeder | isPredefRDFSAnnoProp iri -> setPrefix "rdfs" iri
b1caf27fb0c879dd39600d09d501074a2dfd865aChristian Maeder _ -> iri
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski
1f086d5155f47fdad9a0de4e46bbebb2c4b33d30Christian MaederstripReservedPrefix :: IRI -> IRI
5e46b572ed576c0494768998b043d9d340594122Till MossakowskistripReservedPrefix = mkQName . getPredefName
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
88ece6e49930670e8fd3ee79c89a2e918d2fbd0cChristian Maeder{- | returns the name of the predefined IRI (e.g <xsd:string> returns "string"
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski or <http://www.w3.org/2002/07/owl#real> returns "real") -}
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaedergetPredefName :: IRI -> String
5e46b572ed576c0494768998b043d9d340594122Till MossakowskigetPredefName iri =
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder if namePrefix iri `elem` ["", "xsd", "rdf", "rdfs", "owl"]
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski then localPart iri
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski else case mapMaybe (`stripPrefix` showQU iri)
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski $ Map.elems predefPrefixes of
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder [s] -> s
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder _ -> showQN iri
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski-- | Extracts Token from IRI
329d1810c6d5a5a0827e1d07503d94431578d176Christian MaederuriToTok :: IRI -> Token
5e46b572ed576c0494768998b043d9d340594122Till MossakowskiuriToTok urI = mkSimpleId $ getPredefName urI
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder-- | Extracts Id from IRI
329d1810c6d5a5a0827e1d07503d94431578d176Christian MaederuriToId :: IRI -> Id
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian MaederuriToId = simpleIdToId . uriToTok
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder-- | Extracts Id from Entities
329d1810c6d5a5a0827e1d07503d94431578d176Christian MaederentityToId :: Entity -> Id
329d1810c6d5a5a0827e1d07503d94431578d176Christian MaederentityToId = uriToId . cutIRI
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
329d1810c6d5a5a0827e1d07503d94431578d176Christian MaederprintDatatype :: IRI -> String
329d1810c6d5a5a0827e1d07503d94431578d176Christian MaederprintDatatype dt = showQU $
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder if isDatatypeKey dt then stripReservedPrefix dt else dt
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maederdata DatatypeCat = OWL2Number | OWL2String | OWL2Bool | Other
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder deriving (Show, Eq, Ord, Typeable, Data)
329d1810c6d5a5a0827e1d07503d94431578d176Christian Maeder
329d1810c6d5a5a0827e1d07503d94431578d176Christian MaedergetDatatypeCat :: IRI -> DatatypeCat
329d1810c6d5a5a0827e1d07503d94431578d176Christian MaedergetDatatypeCat iri = case isDatatypeKey iri of
5e46b572ed576c0494768998b043d9d340594122Till Mossakowski True
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder | checkPredef xsdBooleanMap iri -> OWL2Bool
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder | checkPredef xsdNumbersMap iri || checkPredef owlNumbersMap iri
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian Maeder -> OWL2Number
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder | checkPredef xsdStringsMap iri -> OWL2String
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder | otherwise -> Other
243b39800f5ea9033daca8ce5475531d114e1877Christian Maeder False -> Other
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian MaedermakeXsdMap :: [String] -> PreDefMaps
0e2ae85e2453466d03c1fc5884a3d693235bb9d9Christian MaedermakeXsdMap sl = preDefMaps sl "xsd"
4601edb679f0ba530bbb085b25d82a411cd070aaChristian Maeder
746440cc1b984a852f5864235b8fa3930963a081Christian MaederxsdBooleanMap :: PreDefMaps
746440cc1b984a852f5864235b8fa3930963a081Christian MaederxsdBooleanMap = makeXsdMap [booleanS]
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian Maeder
7a47fbe6b987bd69a5056ce5d00fc8710f6c5e8aChristian MaederxsdNumbersMap :: PreDefMaps
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaederxsdNumbersMap = makeXsdMap xsdNumbers
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaederxsdStringsMap :: PreDefMaps
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaederxsdStringsMap = makeXsdMap xsdStrings
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaederfacetToIRI :: DatatypeFacet -> ConstrainingFacet
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaederfacetToIRI = setPrefix "xsd" . mkQName . showFacet
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder-- * Cardinalities
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maederdata CardinalityType = MinCardinality | MaxCardinality | ExactCardinality
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder deriving (Show, Eq, Ord, Typeable, Data)
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaedershowCardinalityType :: CardinalityType -> String
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaedershowCardinalityType ty = case ty of
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder MinCardinality -> minS
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder MaxCardinality -> maxS
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder ExactCardinality -> exactlyS
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maederdata Cardinality a b = Cardinality CardinalityType Int a (Maybe b)
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder deriving (Show, Eq, Ord, Typeable, Data)
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maederdata JunctionType = UnionOf | IntersectionOf
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder deriving (Show, Eq, Ord, Typeable, Data)
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maedertype ConstrainingFacet = IRI
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maedertype RestrictionValue = Literal
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder-- * ENTITIES
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maederdata Entity = Entity
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder { label :: Maybe String
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder , entityKind :: EntityType
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maeder , cutIRI :: IRI }
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder deriving (Show, Typeable, Data)
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaedermkEntity :: EntityType -> IRI -> Entity
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaedermkEntity = Entity Nothing
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaedermkEntityLbl :: String -> EntityType -> IRI -> Entity
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian MaedermkEntityLbl = Entity . Just
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maederinstance Ord Entity where
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder compare (Entity _ ek1 ir1) (Entity _ ek2 ir2) = compare (ek1, ir1) (ek2, ir2)
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
575a55eadc8dcab8ee350324b417cbd9e52e69c0Christian Maederinstance Eq Entity where
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder e1 == e2 = compare e1 e2 == EQ
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maederinstance GetRange Entity where
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder getRange = iriPos . cutIRI
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder rangeSpan = qNameRange . cutIRI
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder
746440cc1b984a852f5864235b8fa3930963a081Christian Maederdata EntityType =
746440cc1b984a852f5864235b8fa3930963a081Christian Maeder Datatype
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder | Class
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder | ObjectProperty
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder | DataProperty
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder | AnnotationProperty
d79a4d0d842c212f82f9507fff178ffe4ba2e214Christian Maeder | NamedIndividual
746440cc1b984a852f5864235b8fa3930963a081Christian Maeder deriving (Enum, Bounded, Show, Read, Eq, Ord, Typeable, Data)
746440cc1b984a852f5864235b8fa3930963a081Christian Maeder
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill MossakowskishowEntityType :: EntityType -> String
3b70d8ee5c2927f843d5d907e6ef724f867f1b40Till MossakowskishowEntityType e = case e of
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder Datatype -> datatypeC
a001917177db7ae636853b37c0d0f9f4e90a83ffChristian Maeder Class -> classC
3b70d8ee5c2927f843d5d907e6ef724f867f1b40Till Mossakowski ObjectProperty -> objectPropertyC
3b70d8ee5c2927f843d5d907e6ef724f867f1b40Till Mossakowski DataProperty -> dataPropertyC
3b70d8ee5c2927f843d5d907e6ef724f867f1b40Till Mossakowski AnnotationProperty -> annotationPropertyC
3b70d8ee5c2927f843d5d907e6ef724f867f1b40Till Mossakowski NamedIndividual -> individualC
ca732bc259f74cb4f3f725daab7fe80fc7e1d9a0Till Mossakowski
ca732bc259f74cb4f3f725daab7fe80fc7e1d9a0Till MossakowskientityTypes :: [EntityType]
ca732bc259f74cb4f3f725daab7fe80fc7e1d9a0Till MossakowskientityTypes = [minBound .. maxBound]
ca732bc259f74cb4f3f725daab7fe80fc7e1d9a0Till Mossakowski
ca732bc259f74cb4f3f725daab7fe80fc7e1d9a0Till MossakowskipairSymbols :: Entity -> Entity -> Result Entity -- TODO: improve!
ca732bc259f74cb4f3f725daab7fe80fc7e1d9a0Till MossakowskipairSymbols (Entity lb1 k1 i1) (Entity lb2 k2 i2) =
ca732bc259f74cb4f3f725daab7fe80fc7e1d9a0Till Mossakowski if k1 /= k2 then
ca732bc259f74cb4f3f725daab7fe80fc7e1d9a0Till Mossakowski error "can't pair symbols of different kind"
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang else do
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang let rest x = drop 1 $ dropWhile (/= '#') x
239fe94380bba365636e6ac48e094fc92cae30c7Christian Maeder pairLables lbl1 lbl2 = case (lbl1, lbl2) of
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang (Nothing, _) -> pairLables lbl2 lbl1
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang (Just l1, Just l2) | l1 /= l2 -> Just $ l1 ++ ", " ++ l2
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder _ -> lbl1
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang pairIRIs (QN p1 l1 t1 _e1 r1)
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang (QN _p2 l2 _t2 _e2 _r2) =
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang QN
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang { namePrefix = p1
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang , localPart = if rest l1 == rest l2 then l1 else l1 ++ "_" ++ rest l2
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder , iriType = t1
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang , expandedIRI = ""
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder , iriPos = r1
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang }
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang return $ Entity (pairLables lb1 lb2) k1 $ pairIRIs i1 i2
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski-- * LITERALS
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wangdata TypedOrUntyped = Typed Datatype | Untyped (Maybe LanguageTag)
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang deriving (Show, Eq, Ord, Typeable, Data)
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wangdata Literal = Literal LexicalForm TypedOrUntyped | NumberLit FloatLit
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski deriving (Show, Eq, Ord, Typeable, Data)
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang-- | non-negative integers given by the sequence of digits
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maederdata NNInt = NNInt [Int] deriving (Eq, Ord, Typeable, Data)
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wanginstance Show NNInt where
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder show (NNInt l) = map intToDigit l
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun WangzeroNNInt :: NNInt
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun WangzeroNNInt = NNInt []
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun Wang
db453fe9625a9dab5d108f7a5e464598814144b8Jian Chun WangisZeroNNInt :: NNInt -> Bool
isZeroNNInt (NNInt l) = null l
data IntLit = IntLit
{ absInt :: NNInt
, isNegInt :: Bool }
deriving (Eq, Ord, Typeable, Data)
instance Show IntLit where
show (IntLit n b) = (if b then ('-' :) else id) $ show n
zeroInt :: IntLit
zeroInt = IntLit zeroNNInt False
isZeroInt :: IntLit -> Bool
isZeroInt (IntLit n _) = isZeroNNInt n
negNNInt :: Bool -> NNInt -> IntLit
negNNInt b n = IntLit n b
negInt :: IntLit -> IntLit
negInt (IntLit n b) = IntLit n $ not b
data DecLit = DecLit
{ truncDec :: IntLit
, fracDec :: NNInt }
deriving (Eq, Ord, Typeable, Data)
instance Show DecLit where
show (DecLit t f) = show t
++ if isZeroNNInt f then "" else
'.' : show f
isDecInt :: DecLit -> Bool
isDecInt = isZeroNNInt . fracDec
negDec :: Bool -> DecLit -> DecLit
negDec b (DecLit t f) = DecLit (if b then negInt t else t) f
data FloatLit = FloatLit
{ floatBase :: DecLit
, floatExp :: IntLit }
deriving (Eq, Ord, Typeable, Data)
instance Show FloatLit where
show (FloatLit b e) = show b
++ if isZeroInt e then "" else
'E' : show e ++ "F"
isFloatDec :: FloatLit -> Bool
isFloatDec = isZeroInt . floatExp
isFloatInt :: FloatLit -> Bool
isFloatInt f = isFloatDec f && isDecInt (floatBase f)
floatToInt :: FloatLit -> IntLit
floatToInt = truncDec . floatBase
intToDec :: IntLit -> DecLit
intToDec i = DecLit i zeroNNInt
decToFloat :: DecLit -> FloatLit
decToFloat d = FloatLit d zeroInt
intToFloat :: IntLit -> FloatLit
intToFloat = decToFloat . intToDec
abInt :: IntLit -> IntLit
abInt int = int {isNegInt = False}
abDec :: DecLit -> DecLit
abDec dec = dec {truncDec = abInt $ truncDec dec}
abFloat :: FloatLit -> FloatLit
abFloat f = f {floatBase = abDec $ floatBase f}
isNegDec :: DecLit -> Bool
isNegDec d = isNegInt $ truncDec d
numberName :: FloatLit -> String
numberName f
| isFloatInt f = integerS
| isFloatDec f = decimalS
| otherwise = floatS
cTypeS :: String
cTypeS = "^^"
-- * PROPERTY EXPRESSIONS
type InverseObjectProperty = ObjectPropertyExpression
data ObjectPropertyExpression = ObjectProp ObjectProperty
| ObjectInverseOf InverseObjectProperty
deriving (Show, Eq, Ord, Typeable, Data)
objPropToIRI :: ObjectPropertyExpression -> Individual
objPropToIRI opExp = case opExp of
ObjectProp u -> u
ObjectInverseOf objProp -> objPropToIRI objProp
type DataPropertyExpression = DataProperty
-- * DATA RANGES
data DataRange =
DataType Datatype [(ConstrainingFacet, RestrictionValue)]
| DataJunction JunctionType [DataRange]
| DataComplementOf DataRange
| DataOneOf [Literal]
deriving (Show, Eq, Ord, Typeable, Data)
-- * CLASS EXPERSSIONS
data ClassExpression =
Expression Class
| ObjectJunction JunctionType [ClassExpression]
| ObjectComplementOf ClassExpression
| ObjectOneOf [Individual]
| ObjectValuesFrom QuantifierType ObjectPropertyExpression ClassExpression
| ObjectHasValue ObjectPropertyExpression Individual
| ObjectHasSelf ObjectPropertyExpression
| ObjectCardinality (Cardinality ObjectPropertyExpression ClassExpression)
| DataValuesFrom QuantifierType DataPropertyExpression DataRange
| DataHasValue DataPropertyExpression Literal
| DataCardinality (Cardinality DataPropertyExpression DataRange)
deriving (Show, Eq, Ord, Typeable, Data)
-- * ANNOTATIONS
data Annotation = Annotation [Annotation] AnnotationProperty AnnotationValue
deriving (Show, Eq, Ord, Typeable, Data)
data AnnotationValue = AnnValue IRI | AnnValLit Literal
deriving (Show, Eq, Ord, Typeable, Data)