AS.hs revision e40758c36e3e5312669558ad189b24b3eaf10c59
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance{- |
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel ManceModule : $Header$
81ec673ac5ab1493568d9ef7798b752ab8ee0e61Felix Gabriel ManceCopyright : (c) C. Maeder, Felix Gabriel Mance
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel ManceLicense : GPLv2 or higher, see LICENSE.txt
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel ManceMaintainer : Christian.Maeder@dfki.de
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel ManceStability : provisional
5d801400993c9671010d244646936d8fd435638cChristian MaederPortability : portable
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel ManceOWL 2 Functional Syntax constructs
aa0ca44e856c87db27e61687cbb630f270976da1Felix Gabriel Mance
5d801400993c9671010d244646936d8fd435638cChristian MaederReferences:
5d801400993c9671010d244646936d8fd435638cChristian Maeder <http://www.w3.org/TR/2009/REC-owl2-syntax-20091027/#Functional-Style_Syntax>
5d801400993c9671010d244646936d8fd435638cChristian Maeder <http://www.w3.org/TR/owl2-manchester-syntax/>
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance-}
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
097bc9f18b722812d480df0f5c634d09cbca8e21Felix Gabriel Mancemodule OWL2.AS where
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
852bd6145634dc2832b61c44678fe539bc1682d5Christian Maederimport Common.Id
090c663fcc1593c66f39a0972326799a672760d5Christian Maederimport Common.Keywords (stringS)
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian Maeder
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescuimport Common.Result
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu
feab1106bbee4f2ea2fd48bca7106dd041e4211dFelix Gabriel Manceimport OWL2.ColonKeywords
18ff56829e5e99383ee6106584d55bcbd8ed45e7Felix Gabriel Manceimport OWL2.Keywords
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel Mance
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maederimport Data.Char (intToDigit)
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel Manceimport Data.List
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Manceimport Data.Maybe
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Manceimport qualified Data.Map as Map
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian Maederimport qualified Data.Set as Set
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel Mancedata IRIType = Full | Abbreviated | NodeID
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel Mance deriving (Show, Eq, Ord)
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel Mance
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance{- | full or abbreviated IRIs with a possible uri for the prefix
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance or a local part following a hash sign -}
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mancedata QName = QN
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance { namePrefix :: String
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance -- ^ the name prefix part of a qualified name \"namePrefix:localPart\"
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance , localPart :: String
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance -- ^ the local part of a qualified name \"namePrefix:localPart\"
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel Mance , iriType :: IRIType
0ec1551231bc5dfdcb3f2bd68fec7457fade7bfdFelix Gabriel Mance , expandedIRI :: String
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance -- ^ the associated namespace uri (not printed)
852bd6145634dc2832b61c44678fe539bc1682d5Christian Maeder , iriPos :: Range
968930c7674ae3b63d308bf4fa651400aa263054Christian Maeder } deriving Show
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Manceinstance Eq QName where
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu p == q = localPart p == localPart q --compare p q == EQ
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Manceinstance Ord QName where
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance compare (QN p1 l1 b1 n1 _) (QN p2 l2 b2 n2 _) =
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance if null n1 || null n2 then compare (b1, p1, l1) (b2, p2, l2) else
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance compare n1 n2 -- compare fully expanded names only
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance
68de80eb2800338cbd16512106fcadab79325d8bChristian MaederqNameRange :: QName -> [Pos]
68de80eb2800338cbd16512106fcadab79325d8bChristian MaederqNameRange q = let Range rs = iriPos q in case rs of
68de80eb2800338cbd16512106fcadab79325d8bChristian Maeder [p] -> let
68de80eb2800338cbd16512106fcadab79325d8bChristian Maeder p0 = if iriType q == Full then incSourceColumn p (-1) else p
68de80eb2800338cbd16512106fcadab79325d8bChristian Maeder in tokenRange $ Token (showQN q) $ Range [p0]
68de80eb2800338cbd16512106fcadab79325d8bChristian Maeder _ -> rs
68de80eb2800338cbd16512106fcadab79325d8bChristian Maeder
fc7bd98aabe1bc26058660085e8c77d60a97bcecChristian Maederinstance GetRange QName where
fc7bd98aabe1bc26058660085e8c77d60a97bcecChristian Maeder getRange = iriPos
68de80eb2800338cbd16512106fcadab79325d8bChristian Maeder rangeSpan = qNameRange
fc7bd98aabe1bc26058660085e8c77d60a97bcecChristian Maeder
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel ManceshowQN :: QName -> String
68de80eb2800338cbd16512106fcadab79325d8bChristian MaedershowQN q = (if iriType q == Full then showQI else showQU) q
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance-- | show QName as abbreviated iri
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel ManceshowQU :: QName -> String
852bd6145634dc2832b61c44678fe539bc1682d5Christian MaedershowQU (QN pre local _ _ _) =
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance if null pre then local else pre ++ ":" ++ local
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance-- | show QName in ankle brackets as full iris
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel ManceshowQI :: QName -> String
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel ManceshowQI = ('<' :) . (++ ">") . showQU
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel MancenullQName :: QName
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel MancenullQName = QN "" "" Abbreviated "" nullRange
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
544989bc1f6ed4bc0813334ffd934db0fb0010eaFelix Gabriel ManceisNullQName :: QName -> Bool
544989bc1f6ed4bc0813334ffd934db0fb0010eaFelix Gabriel ManceisNullQName qn = case qn of
544989bc1f6ed4bc0813334ffd934db0fb0010eaFelix Gabriel Mance QN "" "" _ "" _ -> True
544989bc1f6ed4bc0813334ffd934db0fb0010eaFelix Gabriel Mance _ -> False
544989bc1f6ed4bc0813334ffd934db0fb0010eaFelix Gabriel Mance
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian MaederunamedS :: String
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian MaederunamedS = "//www." ++ dnamedS
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian MaederdnamedS :: String
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian MaederdnamedS = "dfki.de/sks/hets/ontology/unamed"
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian Maeder
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel MancedummyQName :: QName
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian MaederdummyQName = QN "http" unamedS Full ("http:" ++ unamedS) nullRange
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel MancemkQName :: String -> QName
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel MancemkQName s = nullQName { localPart = s }
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
852bd6145634dc2832b61c44678fe539bc1682d5Christian MaedersetQRange :: Range -> QName -> QName
852bd6145634dc2832b61c44678fe539bc1682d5Christian MaedersetQRange r q = q { iriPos = r }
852bd6145634dc2832b61c44678fe539bc1682d5Christian Maeder
ea3f858eb531d981df3ed00beeadd99cf025adecChristian MaedersetPrefix :: String -> QName -> QName
ea3f858eb531d981df3ed00beeadd99cf025adecChristian MaedersetPrefix s q = q { namePrefix = s }
ea3f858eb531d981df3ed00beeadd99cf025adecChristian Maeder
75aaf82c430ad2a5cf159962b1c5c09255010fb4Felix Gabriel MancesetFull :: QName -> QName
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel MancesetFull q = q {iriType = Full}
75aaf82c430ad2a5cf159962b1c5c09255010fb4Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mancetype IRI = QName
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance-- | checks if an IRI is an anonymous individual
1b1144abf7f95a4b23405b8d5604813cfe7b036aFelix Gabriel ManceisAnonymous :: IRI -> Bool
19e01e1a7e319063434bd86c8ecbc5f241ef9993Felix Gabriel ManceisAnonymous iri = iriType iri == NodeID || namePrefix iri == "_"
1b1144abf7f95a4b23405b8d5604813cfe7b036aFelix Gabriel Mance
5a3ae0a9224276de25e709ef8788c1b9716cd206Christian Maeder-- | checks if a string (bound to be localPart of an IRI) contains \":\/\/\"
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel MancecssIRI :: String -> IRIType
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel MancecssIRI iri = if isInfixOf "://" iri then Full else Abbreviated
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel Mance
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance-- | prefix -> localname
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancetype PrefixMap = Map.Map String String
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
1b90322eaf59ded3de24fc891bd67bbd73ec2bfaFelix Gabriel MancepredefPrefixes :: PrefixMap
1b90322eaf59ded3de24fc891bd67bbd73ec2bfaFelix Gabriel MancepredefPrefixes = Map.fromList
1b90322eaf59ded3de24fc891bd67bbd73ec2bfaFelix Gabriel Mance [ ("owl", "http://www.w3.org/2002/07/owl#")
1b90322eaf59ded3de24fc891bd67bbd73ec2bfaFelix Gabriel Mance , ("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#")
1b90322eaf59ded3de24fc891bd67bbd73ec2bfaFelix Gabriel Mance , ("rdfs", "http://www.w3.org/2000/01/rdf-schema#")
1b90322eaf59ded3de24fc891bd67bbd73ec2bfaFelix Gabriel Mance , ("xsd", "http://www.w3.org/2001/XMLSchema#")
1b90322eaf59ded3de24fc891bd67bbd73ec2bfaFelix Gabriel Mance , ("", showQU dummyQName ++ "#") ]
1b90322eaf59ded3de24fc891bd67bbd73ec2bfaFelix Gabriel Mance
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancetype LexicalForm = String
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancetype LanguageTag = String
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancetype ImportIRI = IRI
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancetype OntologyIRI = IRI
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancetype Class = IRI
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancetype Datatype = IRI
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancetype ObjectProperty = IRI
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancetype DataProperty = IRI
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancetype AnnotationProperty = IRI
9cb6af1a7632f12b60f592ce5eb2ac51e6bd33bbFelix Gabriel Mancetype Individual = IRI
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mancedata EquivOrDisjoint = Equivalent | Disjoint
968930c7674ae3b63d308bf4fa651400aa263054Christian Maeder deriving (Show, Eq, Ord)
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel ManceshowEquivOrDisjoint :: EquivOrDisjoint -> String
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel ManceshowEquivOrDisjoint ed = case ed of
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance Equivalent -> equivalentToC
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance Disjoint -> disjointWithC
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mancedata DomainOrRange = ADomain | ARange
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance deriving (Show, Eq, Ord)
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel ManceshowDomainOrRange :: DomainOrRange -> String
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel ManceshowDomainOrRange dr = case dr of
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance ADomain -> domainC
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance ARange -> rangeC
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mancedata SameOrDifferent = Same | Different
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance deriving (Show, Eq, Ord)
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel ManceshowSameOrDifferent :: SameOrDifferent -> String
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel ManceshowSameOrDifferent sd = case sd of
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance Same -> sameAsC
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance Different -> differentFromC
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mancedata Relation =
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance EDRelation EquivOrDisjoint
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | SubPropertyOf
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | InverseOf
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | SubClass
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | Types
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | DRRelation DomainOrRange
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | SDRelation SameOrDifferent
968930c7674ae3b63d308bf4fa651400aa263054Christian Maeder deriving (Show, Eq, Ord)
a921ae1da1302f673204e7b63cdce01439a9bd5eFelix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel ManceshowRelation :: Relation -> String
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel ManceshowRelation r = case r of
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance EDRelation ed -> showEquivOrDisjoint ed
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance SubPropertyOf -> subPropertyOfC
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance InverseOf -> inverseOfC
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance SubClass -> subClassOfC
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance Types -> typesC
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance DRRelation dr -> showDomainOrRange dr
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance SDRelation sd -> showSameOrDifferent sd
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel MancegetED :: Relation -> EquivOrDisjoint
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel MancegetED r = case r of
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance EDRelation ed -> ed
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance _ -> error "not domain or range"
097bc9f18b722812d480df0f5c634d09cbca8e21Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel MancegetDR :: Relation -> DomainOrRange
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel MancegetDR r = case r of
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance DRRelation dr -> dr
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance _ -> error "not domain or range"
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel MancegetSD :: Relation -> SameOrDifferent
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel MancegetSD s = case s of
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance SDRelation sd -> sd
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance _ -> error "not same or different"
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mancedata Character =
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance Functional
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | InverseFunctional
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | Reflexive
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | Irreflexive
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | Symmetric
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | Asymmetric
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | Antisymmetric
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | Transitive
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance deriving (Enum, Bounded, Show, Eq, Ord)
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mancedata PositiveOrNegative = Positive | Negative
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance deriving (Show, Eq, Ord)
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mancedata QuantifierType = AllValuesFrom | SomeValuesFrom
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance deriving (Show, Eq, Ord)
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel ManceshowQuantifierType :: QuantifierType -> String
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel ManceshowQuantifierType ty = case ty of
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance AllValuesFrom -> onlyS
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance SomeValuesFrom -> someS
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
083b2687afdb676237f926bdb643b24027291d05Felix Gabriel Mance-- * Predefined IRI checkings
511be329b2e8f55d0c6b18bd92571a1776b15932Felix Gabriel Mance
e26bfed39ffa184453272125a4adf147206eac74Christian MaederthingMap :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaederthingMap = makeOWLPredefMaps predefClass
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
511be329b2e8f55d0c6b18bd92571a1776b15932Felix Gabriel ManceisThing :: IRI -> Bool
e26bfed39ffa184453272125a4adf147206eac74Christian MaederisThing = checkPredef thingMap
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakePredefObjProp :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakePredefObjProp = makeOWLPredefMaps predefObjProp
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance
0c3badd7ad83eb89f64ef5ed1122c4fa856fb45dFelix Gabriel ManceisPredefObjProp :: IRI -> Bool
e26bfed39ffa184453272125a4adf147206eac74Christian MaederisPredefObjProp = checkPredef makePredefObjProp
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakePredefDataProp :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakePredefDataProp = makeOWLPredefMaps predefDataProp
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel ManceisPredefDataProp :: IRI -> Bool
e26bfed39ffa184453272125a4adf147206eac74Christian MaederisPredefDataProp = checkPredef makePredefDataProp
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakePredefRDFSAnnoProp :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakePredefRDFSAnnoProp = preDefMaps predefRDFSAnnoProps "rdfs"
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance
d850dba73b02f345f64a3546d0f0299c292f88d6Felix Gabriel ManceisPredefRDFSAnnoProp :: IRI -> Bool
e26bfed39ffa184453272125a4adf147206eac74Christian MaederisPredefRDFSAnnoProp = checkPredef makePredefRDFSAnnoProp
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakePredefOWLAnnoProp :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakePredefOWLAnnoProp = makeOWLPredefMaps predefOWLAnnoProps
d850dba73b02f345f64a3546d0f0299c292f88d6Felix Gabriel Mance
d850dba73b02f345f64a3546d0f0299c292f88d6Felix Gabriel ManceisPredefOWLAnnoProp :: IRI -> Bool
e26bfed39ffa184453272125a4adf147206eac74Christian MaederisPredefOWLAnnoProp = checkPredef makePredefOWLAnnoProp
d850dba73b02f345f64a3546d0f0299c292f88d6Felix Gabriel Mance
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel ManceisPredefAnnoProp :: IRI -> Bool
d850dba73b02f345f64a3546d0f0299c292f88d6Felix Gabriel ManceisPredefAnnoProp iri = isPredefOWLAnnoProp iri || isPredefRDFSAnnoProp iri
511be329b2e8f55d0c6b18bd92571a1776b15932Felix Gabriel Mance
6504b297e21d071d8fada2f732cabb6d8f7d38a2Felix Gabriel ManceisPredefPropOrClass :: IRI -> Bool
6504b297e21d071d8fada2f732cabb6d8f7d38a2Felix Gabriel ManceisPredefPropOrClass iri = isPredefAnnoProp iri || isPredefDataProp iri
6504b297e21d071d8fada2f732cabb6d8f7d38a2Felix Gabriel Mance || isPredefObjProp iri || isThing iri
6504b297e21d071d8fada2f732cabb6d8f7d38a2Felix Gabriel Mance
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian MaederpredefIRIs :: Set.Set IRI
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian MaederpredefIRIs = Set.map (setPrefix "xsd" . mkQName) xsdKeys
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian Maeder `Set.union` Set.map (setPrefix "owl" . mkQName) owlNumbers
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian Maeder `Set.union` Set.fromList
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian Maeder (map (setPrefix "rdf" . mkQName) [rdfsLiteral, stringS])
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian Maeder `Set.union` Set.fromList [setPrefix "rdfs" $ mkQName xmlLiteral]
4b7c9b9fec53befb553f2c9b11e30a4fe2235e03Felix Gabriel Mance
44985cbd4eb61dbc348617ebdd44a774e51dac07Christian MaederisDatatypeKey :: IRI -> Bool
1075744775ba70c9ef6cdd06523204751f544ed5Christian MaederisDatatypeKey = not . null . isDatatypeKeyAux
1075744775ba70c9ef6cdd06523204751f544ed5Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaederxsdMap :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaederxsdMap = makeXsdMap xsdKeys
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaederowlNumbersMap :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaederowlNumbersMap = makeOWLPredefMaps owlNumbers
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaederrdfMap :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaederrdfMap = preDefMaps (Set.fromList [xmlLiteral, stringS]) "rdf"
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaederrdfsMap :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaederrdfsMap = preDefMaps (Set.singleton rdfsLiteral) "rdfs"
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
1075744775ba70c9ef6cdd06523204751f544ed5Christian MaederisDatatypeKeyAux :: IRI -> [(String, String)]
e26bfed39ffa184453272125a4adf147206eac74Christian MaederisDatatypeKeyAux iri = mapMaybe (`checkPredefAux` iri)
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder [ xsdMap, owlNumbersMap, rdfMap, rdfsMap ]
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian Maeder
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maedertype PreDefMaps = (Set.Set String, String, String)
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaederpreDefMaps :: Set.Set String -> String -> PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaederpreDefMaps sl pref = let
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder Just puri = Map.lookup pref predefPrefixes
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder Just sp = stripPrefix "http://www.w3.org/" puri
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder in (sl, pref, sp)
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaedercheckPredefAux :: PreDefMaps -> IRI -> Maybe (String, String)
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian MaedercheckPredefAux (sl, pref, exPref) u = let lp = localPart u in
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder case namePrefix u of
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder "http" -> case stripPrefix "//www." lp of
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder Just q -> case stripPrefix "w3.org/" q of
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder Just r -> case stripPrefix exPref r of
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder Just s | Set.member s sl -> Just (pref, s)
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder _ -> Nothing
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder Nothing -> case stripPrefix (dnamedS ++ "#") q of
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder Just s | Set.member s sl -> Just (pref, s)
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder _ -> Nothing
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder Nothing -> Nothing
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder pu | elem pu ["", pref] && Set.member lp sl -> Just (pref, lp)
6856a07e36551ed6fadd7c01e7152a3a28878a6fChristian Maeder _ -> Nothing
f8c3d045dda224e92bf6bcb6288e1ee75ab54d1eChristian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaedercheckPredef :: PreDefMaps -> IRI -> Bool
e26bfed39ffa184453272125a4adf147206eac74Christian MaedercheckPredef ms = isJust . checkPredefAux ms
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakeOWLPredefMaps :: Set.Set String -> PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakeOWLPredefMaps sl = preDefMaps sl "owl"
44985cbd4eb61dbc348617ebdd44a774e51dac07Christian Maeder
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance-- | sets the correct prefix for the predefined datatypes
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel MancesetDatatypePrefix :: IRI -> IRI
1075744775ba70c9ef6cdd06523204751f544ed5Christian MaedersetDatatypePrefix iri = case isDatatypeKeyAux iri of
1075744775ba70c9ef6cdd06523204751f544ed5Christian Maeder (p, l) : _ -> setPrefix p $ mkQName l
1075744775ba70c9ef6cdd06523204751f544ed5Christian Maeder _ -> error $ showQU iri ++ " is not a predefined datatype"
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance-- | checks if the IRI is part of the built-in ones and puts the correct prefix
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel MancesetReservedPrefix :: IRI -> IRI
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel MancesetReservedPrefix iri
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance | isDatatypeKey iri && null (namePrefix iri) = setDatatypePrefix iri
d850dba73b02f345f64a3546d0f0299c292f88d6Felix Gabriel Mance | (isThing iri || isPredefDataProp iri || isPredefOWLAnnoProp iri
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance || isPredefObjProp iri) && null (namePrefix iri) = setPrefix "owl" iri
d850dba73b02f345f64a3546d0f0299c292f88d6Felix Gabriel Mance | isPredefRDFSAnnoProp iri = setPrefix "rdfs" iri
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance | otherwise = iri
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance
4b7c9b9fec53befb553f2c9b11e30a4fe2235e03Felix Gabriel MancestripReservedPrefix :: IRI -> IRI
4b7c9b9fec53befb553f2c9b11e30a4fe2235e03Felix Gabriel MancestripReservedPrefix = mkQName . getPredefName
4b7c9b9fec53befb553f2c9b11e30a4fe2235e03Felix Gabriel Mance
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance{- | returns the name of the predefined IRI (e.g <xsd:string> returns "string"
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance or <http://www.w3.org/2002/07/owl#real> returns "real") -}
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel MancegetPredefName :: IRI -> String
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel MancegetPredefName iri =
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance if namePrefix iri `elem` ["", "xsd", "rdf", "rdfs", "owl"]
0c3badd7ad83eb89f64ef5ed1122c4fa856fb45dFelix Gabriel Mance then localPart iri
771c32080c77497c6c023a3b1c422f7daf3773f7Felix Gabriel Mance else case mapMaybe (`stripPrefix` showQU iri)
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance $ Map.elems predefPrefixes of
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance [s] -> s
3980dee81f793b601da33adea1b55753bab868a9Felix Gabriel Mance _ -> showQN iri
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance
92ae4d5885ea837ffe3dae9b2de742f871229b94Christian Maeder-- | Extracts Token from IRI
92ae4d5885ea837ffe3dae9b2de742f871229b94Christian MaederuriToTok :: IRI -> Token
92ae4d5885ea837ffe3dae9b2de742f871229b94Christian MaederuriToTok urI = mkSimpleId $ getPredefName urI
92ae4d5885ea837ffe3dae9b2de742f871229b94Christian Maeder
92ae4d5885ea837ffe3dae9b2de742f871229b94Christian Maeder-- | Extracts Id from IRI
92ae4d5885ea837ffe3dae9b2de742f871229b94Christian MaederuriToId :: IRI -> Id
92ae4d5885ea837ffe3dae9b2de742f871229b94Christian MaederuriToId = simpleIdToId . uriToTok
92ae4d5885ea837ffe3dae9b2de742f871229b94Christian Maeder
92ae4d5885ea837ffe3dae9b2de742f871229b94Christian Maeder-- | Extracts Id from Entities
92ae4d5885ea837ffe3dae9b2de742f871229b94Christian MaederentityToId :: Entity -> Id
669b3375925f7a145d287fa89f3a815708dbe7a1Christian MaederentityToId = uriToId . cutIRI
92ae4d5885ea837ffe3dae9b2de742f871229b94Christian Maeder
a03c109eabfe250e4b57bdf44f37f53751a65df4Felix Gabriel ManceprintDatatype :: IRI -> String
a03c109eabfe250e4b57bdf44f37f53751a65df4Felix Gabriel ManceprintDatatype dt = showQU $
a03c109eabfe250e4b57bdf44f37f53751a65df4Felix Gabriel Mance if isDatatypeKey dt then stripReservedPrefix dt else dt
a03c109eabfe250e4b57bdf44f37f53751a65df4Felix Gabriel Mance
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mancedata DatatypeCat = OWL2Number | OWL2String | OWL2Bool | Other
83f5f3291f9b40fa688776b4da10b5fa102a5ff8Felix Gabriel Mance deriving (Show, Eq, Ord)
83f5f3291f9b40fa688776b4da10b5fa102a5ff8Felix Gabriel Mance
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel MancegetDatatypeCat :: IRI -> DatatypeCat
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel MancegetDatatypeCat iri = case isDatatypeKey iri of
fa544036407a8ec4be203ebd5e3bff225175e664Felix Gabriel Mance True
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder | checkPredef xsdBooleanMap iri -> OWL2Bool
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder | checkPredef xsdNumbersMap iri || checkPredef owlNumbersMap iri
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance -> OWL2Number
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder | checkPredef xsdStringsMap iri -> OWL2String
fa544036407a8ec4be203ebd5e3bff225175e664Felix Gabriel Mance | otherwise -> Other
fa544036407a8ec4be203ebd5e3bff225175e664Felix Gabriel Mance False -> Other
83f5f3291f9b40fa688776b4da10b5fa102a5ff8Felix Gabriel Mance
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakeXsdMap :: Set.Set String -> PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaedermakeXsdMap sl = preDefMaps sl "xsd"
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaederxsdBooleanMap :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaederxsdBooleanMap = makeXsdMap $ Set.singleton booleanS
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaederxsdNumbersMap :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaederxsdNumbersMap = makeXsdMap xsdNumbers
e26bfed39ffa184453272125a4adf147206eac74Christian Maeder
e26bfed39ffa184453272125a4adf147206eac74Christian MaederxsdStringsMap :: PreDefMaps
e26bfed39ffa184453272125a4adf147206eac74Christian MaederxsdStringsMap = makeXsdMap xsdStrings
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance
4b7c9b9fec53befb553f2c9b11e30a4fe2235e03Felix Gabriel MancefacetToIRI :: DatatypeFacet -> ConstrainingFacet
4b7c9b9fec53befb553f2c9b11e30a4fe2235e03Felix Gabriel MancefacetToIRI = setPrefix "xsd" . mkQName . showFacet
4b7c9b9fec53befb553f2c9b11e30a4fe2235e03Felix Gabriel Mance
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance-- * Cardinalities
863fa65ac095659c6da1cde7fe7b839f1e7f60f9Felix Gabriel Mance
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mancedata CardinalityType = MinCardinality | MaxCardinality | ExactCardinality
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance deriving (Show, Eq, Ord)
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel ManceshowCardinalityType :: CardinalityType -> String
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel ManceshowCardinalityType ty = case ty of
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance MinCardinality -> minS
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance MaxCardinality -> maxS
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance ExactCardinality -> exactlyS
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mancedata Cardinality a b = Cardinality CardinalityType Int a (Maybe b)
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance deriving (Show, Eq, Ord)
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mancedata JunctionType = UnionOf | IntersectionOf
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance deriving (Show, Eq, Ord)
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mancetype ConstrainingFacet = IRI
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mancetype RestrictionValue = Literal
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance-- * ENTITIES
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maederdata Entity = Entity
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder { entityKind :: EntityType
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder , cutIRI :: IRI }
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder deriving (Show, Eq, Ord)
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Manceinstance GetRange Entity where
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder getRange = iriPos . cutIRI
68de80eb2800338cbd16512106fcadab79325d8bChristian Maeder rangeSpan = qNameRange . cutIRI
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mancedata EntityType =
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance Datatype
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance | Class
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance | ObjectProperty
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance | DataProperty
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance | AnnotationProperty
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance | NamedIndividual
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance deriving (Enum, Bounded, Show, Read, Eq, Ord)
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel ManceshowEntityType :: EntityType -> String
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel ManceshowEntityType e = case e of
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance Datatype -> datatypeC
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance Class -> classC
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance ObjectProperty -> objectPropertyC
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance DataProperty -> dataPropertyC
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance AnnotationProperty -> annotationPropertyC
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance NamedIndividual -> individualC
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel ManceentityTypes :: [EntityType]
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel ManceentityTypes = [minBound .. maxBound]
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai CodescupairSymbols :: Entity -> Entity -> Result Entity -- TO DO: this needs improvements!
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai CodescupairSymbols (Entity k1 i1) (Entity k2 i2) =
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu if k1 /= k2 then
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu error "can't pair symbols of different kind"
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu else do
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu let
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu rest x = drop 1 $ dropWhile (/= '#') x
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu pairIRIs (QN p1 l1 t1 _e1 r1)
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu (QN _p2 l2 _t2 _e2 _r2) =
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu QN
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu { namePrefix = p1
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu , localPart = if rest l1 == rest l2 then l1 else l1 ++ "_" ++ (rest l2)
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu , iriType = t1
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu , expandedIRI = ""
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu , iriPos = r1
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu }
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu return $ Entity k1 $ pairIRIs i1 i2
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance-- * LITERALS
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mancedata TypedOrUntyped = Typed Datatype | Untyped (Maybe LanguageTag)
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance deriving (Show, Eq, Ord)
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maederdata Literal = Literal LexicalForm TypedOrUntyped | NumberLit FloatLit
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance deriving (Show, Eq, Ord)
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder-- | non-negative integers given by the sequence of digits
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maederdata NNInt = NNInt [Int] deriving (Eq, Ord)
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maederinstance Show NNInt where
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder show (NNInt l) = map intToDigit l
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederzeroNNInt :: NNInt
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederzeroNNInt = NNInt []
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederisZeroNNInt :: NNInt -> Bool
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederisZeroNNInt (NNInt l) = null l
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maederdata IntLit = IntLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder { absInt :: NNInt
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder , isNegInt :: Bool }
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder deriving (Eq, Ord)
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maederinstance Show IntLit where
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder show (IntLit n b) = (if b then ('-' :) else id) $ show n
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederzeroInt :: IntLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederzeroInt = IntLit zeroNNInt False
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederisZeroInt :: IntLit -> Bool
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederisZeroInt (IntLit n _) = isZeroNNInt n
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaedernegNNInt :: Bool -> NNInt -> IntLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaedernegNNInt b n = IntLit n b
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaedernegInt :: IntLit -> IntLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaedernegInt (IntLit n b) = IntLit n $ not b
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maederdata DecLit = DecLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder { truncDec :: IntLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder , fracDec :: NNInt }
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder deriving (Eq, Ord)
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maederinstance Show DecLit where
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder show (DecLit t f) = show t
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder ++ if isZeroNNInt f then "" else
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder '.' : show f
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederisDecInt :: DecLit -> Bool
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederisDecInt = isZeroNNInt . fracDec
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
cbb0a924599bcaea230e7dcd2892cc91c49319aeChristian MaedernegDec :: Bool -> DecLit -> DecLit
d66846429fcdd6882e62c7e5b911f98b3812ff09Felix Gabriel MancenegDec b (DecLit t f) = DecLit (if b then negInt t else t) f
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maederdata FloatLit = FloatLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder { floatBase :: DecLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder , floatExp :: IntLit }
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder deriving (Eq, Ord)
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maederinstance Show FloatLit where
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder show (FloatLit b e) = show b
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder ++ if isZeroInt e then "" else
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder 'E' : show e ++ "F"
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederisFloatDec :: FloatLit -> Bool
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederisFloatDec = isZeroInt . floatExp
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederisFloatInt :: FloatLit -> Bool
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederisFloatInt f = isFloatDec f && isDecInt (floatBase f)
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederfloatToInt :: FloatLit -> IntLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederfloatToInt = truncDec . floatBase
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederintToDec :: IntLit -> DecLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederintToDec i = DecLit i zeroNNInt
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederdecToFloat :: DecLit -> FloatLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederdecToFloat d = FloatLit d zeroInt
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederintToFloat :: IntLit -> FloatLit
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian MaederintToFloat = decToFloat . intToDec
b1162cc13e8371724e3382ae6d1cfdeb43891fbbChristian Maeder
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel ManceabInt :: IntLit -> IntLit
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel ManceabInt int = int {isNegInt = False}
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel Mance
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel ManceabDec :: DecLit -> DecLit
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel ManceabDec dec = dec {truncDec = abInt $ truncDec dec}
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel Mance
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel ManceabFloat :: FloatLit -> FloatLit
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel ManceabFloat f = f {floatBase = abDec $ floatBase f}
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel Mance
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel ManceisNegDec :: DecLit -> Bool
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel ManceisNegDec d = isNegInt $ truncDec d
c704da29ad5d9d00c07e75f9109442d178dd990bFelix Gabriel Mance
a4a1b0cfce938fc38d5924b8fb6a7e140602ec5cFelix Gabriel MancenumberName :: FloatLit -> String
cbb0a924599bcaea230e7dcd2892cc91c49319aeChristian MaedernumberName f
52991d9b46a98ad6a9020421a3244950b0f8a522Felix Gabriel Mance | isFloatInt f = integerS
52991d9b46a98ad6a9020421a3244950b0f8a522Felix Gabriel Mance | isFloatDec f = decimalS
52991d9b46a98ad6a9020421a3244950b0f8a522Felix Gabriel Mance | otherwise = floatS
a4a1b0cfce938fc38d5924b8fb6a7e140602ec5cFelix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel MancecTypeS :: String
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel MancecTypeS = "^^"
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance-- * PROPERTY EXPRESSIONS
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mancetype InverseObjectProperty = ObjectPropertyExpression
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mancedata ObjectPropertyExpression = ObjectProp ObjectProperty
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance | ObjectInverseOf InverseObjectProperty
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance deriving (Show, Eq, Ord)
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
707454ba169478cbf17b91b53f8f0aa2ff8a89beChristian MaederobjPropToIRI :: ObjectPropertyExpression -> Individual
707454ba169478cbf17b91b53f8f0aa2ff8a89beChristian MaederobjPropToIRI opExp = case opExp of
707454ba169478cbf17b91b53f8f0aa2ff8a89beChristian Maeder ObjectProp u -> u
707454ba169478cbf17b91b53f8f0aa2ff8a89beChristian Maeder ObjectInverseOf objProp -> objPropToIRI objProp
707454ba169478cbf17b91b53f8f0aa2ff8a89beChristian Maeder
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mancetype DataPropertyExpression = DataProperty
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance-- * DATA RANGES
c77c0efe19dc6556ac872828bfb4cfc5fbca5ac5Felix Gabriel Mance
fa544036407a8ec4be203ebd5e3bff225175e664Felix Gabriel Mancedata DataRange =
fa544036407a8ec4be203ebd5e3bff225175e664Felix Gabriel Mance DataType Datatype [(ConstrainingFacet, RestrictionValue)]
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance | DataJunction JunctionType [DataRange]
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance | DataComplementOf DataRange
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance | DataOneOf [Literal]
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance deriving (Show, Eq, Ord)
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance-- * CLASS EXPERSSIONS
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancedata ClassExpression =
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mance Expression Class
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance | ObjectJunction JunctionType [ClassExpression]
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mance | ObjectComplementOf ClassExpression
e99c3c1f572d0442872bba58f187ca520ef5d040Felix Gabriel Mance | ObjectOneOf [Individual]
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mance | ObjectValuesFrom QuantifierType ObjectPropertyExpression ClassExpression
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mance | ObjectHasValue ObjectPropertyExpression Individual
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mance | ObjectHasSelf ObjectPropertyExpression
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mance | ObjectCardinality (Cardinality ObjectPropertyExpression ClassExpression)
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance | DataValuesFrom QuantifierType DataPropertyExpression DataRange
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mance | DataHasValue DataPropertyExpression Literal
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance | DataCardinality (Cardinality DataPropertyExpression DataRange)
968930c7674ae3b63d308bf4fa651400aa263054Christian Maeder deriving (Show, Eq, Ord)
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
1435782fda52a2898ea74e99088351d4f5b450dcChristian Maeder-- * ANNOTATIONS
c298a419605037f5352b5ad0f67b3e06db094051Felix Gabriel Mance
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mancedata Annotation = Annotation [Annotation] AnnotationProperty AnnotationValue
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance deriving (Show, Eq, Ord)
8af00c8930672188ae80c8829428859160d329d0Felix Gabriel Mance
771c32080c77497c6c023a3b1c422f7daf3773f7Felix Gabriel Mancedata AnnotationValue = AnnValue IRI | AnnValLit Literal
ffa6044b04fa0e31242141ff56a5d80c4233b676Felix Gabriel Mance deriving (Show, Eq, Ord)