AS.hs revision 75aaf82c430ad2a5cf159962b1c5c09255010fb4
ce5ff829db5f0bb4f16ad4de150eed4401d6acd5Christian MaederModule : $Header$
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaederCopyright : (c) C. Maeder
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
eca29a7be76eb73944ec19b06eda3d6a9e6e543dChristian MaederMaintainer : Christian.Maeder@dfki.de
ce5ff829db5f0bb4f16ad4de150eed4401d6acd5Christian MaederStability : provisional
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaederPortability : portable
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederCommon datatypes for the Functional and Manchester Syntaxes of OWL 2
3f63b98c111e5e2bb2cf13795cf6e084a78b0a8dChristian Maeder <http://www.w3.org/TR/2009/REC-owl2-syntax-20091027/#Functional-Style_Syntax>
3f63b98c111e5e2bb2cf13795cf6e084a78b0a8dChristian Maeder <http://www.w3.org/TR/owl2-manchester-syntax/>
15c12a3ac049a4528da05b1017b78145f308aeb0Christian Maederimport qualified Data.Map as Map
3f63b98c111e5e2bb2cf13795cf6e084a78b0a8dChristian Maeder{- | full or abbreviated IRIs with a possible uri for the prefix
15c12a3ac049a4528da05b1017b78145f308aeb0Christian Maeder or a local part following a hash sign -}
fc7df539e6d41b050161ed8f9ae6e444b1b5ab14Christian Maederdata QName = QN
3f63b98c111e5e2bb2cf13795cf6e084a78b0a8dChristian Maeder { namePrefix :: String
3f63b98c111e5e2bb2cf13795cf6e084a78b0a8dChristian Maeder -- ^ the name prefix part of a qualified name \"namePrefix:localPart\"
2b9022bd5dfb351d1d80f61680336effeccfa23eChristian Maeder , localPart :: String
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder -- ^ the local part of a qualified name \"namePrefix:localPart\"
d3bca27d616c5741d0b18776c8a0848ec31c87f4Christian Maeder , isFullIri :: Bool
2b9022bd5dfb351d1d80f61680336effeccfa23eChristian Maeder , expandedIRI :: String
cc8b603388a7deb7fb8045db0341f550f8be5844Christian Maeder -- ^ the associated namespace uri (not printed)
0df692ce8b9293499b2e1768458613a63e7b5cd0Christian Maeder , iriPos :: Range
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder } deriving Show
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maederinstance GetRange QName where
f4741f6b7da52b5417899c8fcbe4349b920b006eChristian Maeder getRange = iriPos
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaedershowQN :: QName -> String
f4741f6b7da52b5417899c8fcbe4349b920b006eChristian MaedershowQN q = (if isFullIri q then showQI else showQU) q
f4741f6b7da52b5417899c8fcbe4349b920b006eChristian Maeder-- | show QName as abbreviated iri
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaedershowQU :: QName -> String
04dada28736b4a237745e92063d8bdd49a362debChristian MaedershowQU (QN pre local _ _ _) =
ce5ff829db5f0bb4f16ad4de150eed4401d6acd5Christian Maeder if null pre then local else pre ++ ":" ++ local
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder-- | show QName in ankle brackets as full iris
cf5149eb4d0faef6272231879c04aa740f5abc2bChristian MaedershowQI :: QName -> String
cf5149eb4d0faef6272231879c04aa740f5abc2bChristian MaedershowQI = ('<' :) . (++ ">") . showQU
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaedernullQName :: QName
cf5149eb4d0faef6272231879c04aa740f5abc2bChristian MaedernullQName = QN "" "" False "" nullRange
f4741f6b7da52b5417899c8fcbe4349b920b006eChristian MaederdummyQName :: QName
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder QN "http" "//www.dfki.de/sks/hets/ontology/unamed" True "" nullRange
f4741f6b7da52b5417899c8fcbe4349b920b006eChristian MaedermkQName :: String -> QName
f4741f6b7da52b5417899c8fcbe4349b920b006eChristian MaedermkQName s = nullQName { localPart = s }
04dada28736b4a237745e92063d8bdd49a362debChristian MaedersetQRange :: Range -> QName -> QName
ce5ff829db5f0bb4f16ad4de150eed4401d6acd5Christian MaedersetQRange r q = q { iriPos = r }
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaedersetPrefix :: String -> QName -> QName
ccf3de3d66b521a260e5c22d335c64a48e3f0195Christian MaedersetPrefix s q = q { namePrefix = s }
8338fbf3cfb9cf981261d893286f070bd9fa17efChristian MaedersetFull :: QName -> QName
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaedersetFull q = q {isFullIri = True}
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maederinstance Eq QName where
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder p == q = compare p q == EQ
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maederinstance Ord QName where
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder compare (QN p1 l1 b1 n1 _) (QN p2 l2 b2 n2 _) = case (n1, n2) of
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder ("", "") -> compare (b1, p1, l1) (b2, p2, l2)
42c01284bba8d7c8d995c8dfb96ace57d28ed1bcTill Mossakowski ("", _) -> LT
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder (_, "") -> GT
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder _ -> compare n1 n2 -- compare fully expanded names only
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaederisThing :: IRI -> Bool
36c6cc568751e4235502cfee00ba7b597dae78dcChristian MaederisThing u = localPart u `elem` ["Thing", "Nothing"]
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maedertype IRIreference = QName
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maedertype IRI = QName
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder-- | prefix -> localname
7dec34aee2b609b9535c48d060e0f7baf3536457Christian Maedertype PrefixMap = Map.Map String String
e76e6a43f51438215737d6fc176c89da05bb86daChristian Maedertype LexicalForm = String
3f63b98c111e5e2bb2cf13795cf6e084a78b0a8dChristian Maedertype LanguageTag = String
0df692ce8b9293499b2e1768458613a63e7b5cd0Christian Maedertype ImportIRI = IRI
0df692ce8b9293499b2e1768458613a63e7b5cd0Christian Maedertype OntologyIRI = IRI
0df692ce8b9293499b2e1768458613a63e7b5cd0Christian Maedertype Class = IRI
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maedertype Datatype = IRI
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maedertype ObjectProperty = IRI
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maedertype DataProperty = IRI
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maedertype AnnotationProperty = IRI
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maedertype NamedIndividual = IRI
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maedertype Individual = IRI
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maedertype SourceIndividual = Individual
d48085f765fca838c1d972d2123601997174583dChristian Maedertype TargetIndividual = Individual
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maedertype TargetValue = Literal
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maederdata EquivOrDisjoint = Equivalent | Disjoint
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder deriving (Show, Eq, Ord)
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedershowEquivOrDisjoint :: EquivOrDisjoint -> String
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedershowEquivOrDisjoint ed = case ed of
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder Equivalent -> equivalentToC
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder Disjoint -> disjointWithC
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maederdata DomainOrRange = ADomain | ARange deriving (Show, Eq, Ord)
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaedershowDomainOrRange :: DomainOrRange -> String
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedershowDomainOrRange dr = case dr of
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder ADomain -> domainC
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder ARange -> rangeC
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maederdata Relation =
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder EDRelation EquivOrDisjoint
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder | SubPropertyOf
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder | DRRelation DomainOrRange
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder | SDRelation SameOrDifferent
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder deriving (Show, Eq, Ord)
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedershowRelation :: Relation -> String
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedershowRelation r = case r of
cc8b603388a7deb7fb8045db0341f550f8be5844Christian Maeder EDRelation ed -> showEquivOrDisjoint ed
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder SubPropertyOf -> subPropertyOfC
f4741f6b7da52b5417899c8fcbe4349b920b006eChristian Maeder InverseOf -> inverseOfC
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder SubClass -> subClassOfC
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maeder Types -> typesC
15c12a3ac049a4528da05b1017b78145f308aeb0Christian Maeder DRRelation dr -> showDomainOrRange dr
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder SDRelation sd -> showSameOrDifferent sd
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedergetDR :: Relation -> DomainOrRange
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaedergetDR r = case r of
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder DRRelation dr -> dr
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder _ -> error "not domain or range"
6a546f84de613989a2a7a708d310915c7bc3fbddChristian MaedergetED :: Relation -> EquivOrDisjoint
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedergetED r = case r of
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder EDRelation ed -> ed
15c12a3ac049a4528da05b1017b78145f308aeb0Christian Maeder _ -> error "not domain or range"
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedergetSD :: Relation -> SameOrDifferent
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaedergetSD s = case s of
cc8b603388a7deb7fb8045db0341f550f8be5844Christian Maeder SDRelation sd -> sd
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder _ -> error "not same or different"
1d589334ba6b4a4cbfb35307a7a732261e77b0cdChristian Maederdata DataDomainOrRange = DataDomain ClassExpression | DataRange DataRange
cc8b603388a7deb7fb8045db0341f550f8be5844Christian Maeder deriving (Show, Eq, Ord)
cc8b603388a7deb7fb8045db0341f550f8be5844Christian Maederdata Character =
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian Maeder | InverseFunctional
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder | Irreflexive
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder | Antisymmetric
4ef2a978e66e2246ff0b7f00c77deb7aabb28b8eChristian Maeder deriving (Enum, Bounded, Show, Eq, Ord)
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maederdata SameOrDifferent = Same | Different deriving (Show, Eq, Ord)
20fe556546c9277cf017931a07d90add61f199d9Christian MaedershowSameOrDifferent :: SameOrDifferent -> String
c2dead95fafd7ca36d06ddf07606a1292ead6d8aChristian MaedershowSameOrDifferent sd = case sd of
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder Same -> sameAsC
20fe556546c9277cf017931a07d90add61f199d9Christian Maeder Different -> differentFromC
4ef2a978e66e2246ff0b7f00c77deb7aabb28b8eChristian Maederdata PositiveOrNegative = Positive | Negative deriving (Show, Eq, Ord)
c9b711a46e5138b2742727817c8071960e673073Christian Maederdata QuantifierType = AllValuesFrom | SomeValuesFrom deriving (Show, Eq, Ord)
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaedershowQuantifierType :: QuantifierType -> String
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaedershowQuantifierType ty = case ty of
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder AllValuesFrom -> onlyS
c438c79d00fc438f99627e612498744bdc0d0c89Christian Maeder SomeValuesFrom -> someS
59c036af82aff7fbe074455dad50477b7878e2d8Christian Maeder-- | data type strings (some are not listed in the grammar)
81946e2b3f6dde6167f48769bd02c7a634736856Christian MaederdatatypeKeys :: [String]
c438c79d00fc438f99627e612498744bdc0d0c89Christian MaederdatatypeKeys =