StaticAnalysis.hs revision 80875f917d741946a39d0ec0b5721e46ba609823
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian MaederCopyright : Felix Gabriel Mance
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian MaederLicense : GPLv2 or higher, see LICENSE.txt
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederMaintainer : f.mance@jacobs-university.de
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederStability : provisional
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederPortability : portable
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederStatic analysis for RDF
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maederimport RDF.Parse (predefinedPrefixes)
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maederimport qualified Data.Map as Map
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maederimport qualified Data.Set as Set
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maederimport Text.ParserCombinators.Parsec hiding (State)
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maederimport Common.AS_Annotation hiding (Annotation)
8410667510a76409aca9bb24ff0eda0420088274Christian Maeder-- * URI Resolution
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederresolveFullIRI :: IRI -> IRI -> IRI
8410667510a76409aca9bb24ff0eda0420088274Christian MaederresolveFullIRI _absol rel = rel
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich {-if isAbsoluteIRI rel then rel else
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich let r = fromJust $ parseIRIReference $ fromJust $ expandCurie Map.empty rel
3474624438293363cada4e49225aae1e292fa597Christian Maeder a = fromJust $ parseIRI $ fromJust $ expandCurie Map.empty absol
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder Right new = parse uriQ "" $ "<" ++ resolved ++ ">"
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder in rel {expandedIRI = expandedIRI new}
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian MaederresolveAbbreviatedIRI :: RDFPrefixMap -> IRI -> IRI
6e049108aa87dc46bcff96fae50a4625df1d9648Klaus LuettichresolveAbbreviatedIRI pm new = fromJust $ expandCurie pm new
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder {-case Map.lookup (namePrefix new) pm of
5d44c8cecd07b47ce537c7e14bf7b41a39f08507Christian Maeder Nothing -> error $ namePrefix new ++ ": prefix not declared"
a2d6702f18737cc5fff8e8631c08f221f8375c4bChristian Maeder Just iri -> let new2 = if null (namePrefix new)
a2d6702f18737cc5fff8e8631c08f221f8375c4bChristian Maeder {- FIXME: If null (localPart new)
c6fcd42c6d6d9dae8c7835c24fcb7ce8531a9050Christian Maeder then head will fail! -}
31c49f2fa23d4ac089f35145d80a224deb6ea7e4Till Mossakowski && null (localPart new)
c55a0f77be7e88d3620b419ec8961f4379a586e3Klaus Luettich && head (localPart new) == ':'
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder then new {localPart = tail $ localPart new}
8cacad2a09782249243b80985f28e9387019fe40Christian Maeder in new2 {expandedIRI = expandedIRI iri ++ localPart new2}
d3ae0072823e2ef0d41d4431fcc768e66489c20eChristian MaederresolveIRI :: Base -> RDFPrefixMap -> IRI -> IRI
9e748851c150e1022fb952bab3315e869aaf0214Christian MaederresolveIRI (Base current) pm new
f4505a64a089693012a3f5c3b1f12a82cd7a2a5aKlaus Luettich | hasFullIRI new = resolveFullIRI current new
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder | isBlankNode new = new
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder | otherwise = resolveAbbreviatedIRI pm new
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederresolveBase :: Base -> RDFPrefixMap -> Base -> Base
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederresolveBase b pm (Base new) = Base $ resolveIRI b pm new
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederresolvePrefix :: Base -> RDFPrefixMap -> Prefix -> (Prefix, RDFPrefixMap)
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederresolvePrefix b pm (PrefixR s new) = let res = resolveIRI b pm new
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder in (PrefixR s res, Map.insert s res pm)
9e748851c150e1022fb952bab3315e869aaf0214Christian MaederresolvePredicate :: Base -> RDFPrefixMap -> Predicate -> Predicate
61fa0ac06ede811c7aad54ec4c4202346727368eChristian MaederresolvePredicate b pm (Predicate p) = Predicate $
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder if null (prefixName p) && show (iriPath p) == "a" then
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder p { iriScheme = "http",
fd09d0eee026d0db12542af37fd0fbd0790f0eeaChristian Maeder iriPath = stringToId "//www.w3.org/1999/02/22-rdf-syntax-ns#type"
fd09d0eee026d0db12542af37fd0fbd0790f0eeaChristian Maeder else resolveIRI b pm p
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederresolveSubject :: Base -> RDFPrefixMap -> Subject -> Subject
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederresolveSubject b pm s = case s of
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder Subject iri -> Subject $ resolveIRI b pm iri
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder SubjectList ls -> SubjectList $ map (resolvePOList b pm) ls
549b97cfbe3a6687db74440a550b68b2fc19a272Christian Maeder SubjectCollection ls -> SubjectCollection $ map (resolveObject b pm) ls
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederresolvePOList :: Base -> RDFPrefixMap -> PredicateObjectList
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder -> PredicateObjectList
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederresolvePOList b pm (PredicateObjectList p ol) =
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder PredicateObjectList (resolvePredicate b pm p) $ map (resolveObject b pm) ol
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederresolveObject :: Base -> RDFPrefixMap -> Object -> Object
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederresolveObject b pm o = case o of
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder Object s -> Object $ resolveSubject b pm s
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder ObjectLiteral lit -> case lit of
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder RDFLiteral bool lf (Typed dt) ->
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder ObjectLiteral $ RDFLiteral bool lf $ Typed $ resolveIRI b pm dt
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederresolveTriples :: Base -> RDFPrefixMap -> Triples -> Triples
a3c6d8e0670bf2aa71bc8e2a3b1f45d56dd65e4cChristian MaederresolveTriples b pm (Triples s ls) =
f2f9df2e17e70674f0bf426ed1763c973ee4cde0Christian Maeder Triples (resolveSubject b pm s) $ map (resolvePOList b pm) ls
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederresolveStatements :: Base -> RDFPrefixMap -> [Statement] -> [Statement]
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederresolveStatements b pm ls = case ls of
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder BaseStatement base : t -> let newBase = resolveBase b pm base
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder in BaseStatement newBase : resolveStatements newBase pm t
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder PrefixStatement pref : t -> let (newPref, newPrefMap) = resolvePrefix b pm pref
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder in PrefixStatement newPref : resolveStatements b newPrefMap t
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder Statement triples : t ->
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder Statement (resolveTriples b pm triples) : resolveStatements b pm t
f2f9df2e17e70674f0bf426ed1763c973ee4cde0Christian MaederextractPrefixMap :: RDFPrefixMap -> [Statement] -> RDFPrefixMap
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederextractPrefixMap pm ls = case ls of
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder h : t -> case h of
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder PrefixStatement (PrefixR p iri) -> extractPrefixMap (Map.insert p iri pm) t
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder _ -> extractPrefixMap pm t
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederresolveDocument :: TurtleDocument -> TurtleDocument
ca074a78b8dcccbb8c419586787882f98d0c6163Christian MaederresolveDocument doc = let newStatements = resolveStatements
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder (Base $ documentName doc) predefinedPrefixes $ statements doc
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder in doc { statements = newStatements
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder , prefixMap = Map.union predefinedPrefixes $
f2f9df2e17e70674f0bf426ed1763c973ee4cde0Christian Maeder extractPrefixMap Map.empty newStatements }
f2f9df2e17e70674f0bf426ed1763c973ee4cde0Christian Maeder-- * Axiom extraction
afa6ceaf4359ae437aaa6830949583143ace2752Christian MaedergenerateBNode :: Int -> IRI
c0c2380bced8159ff0297ece14eba948bd236471Christian MaedergenerateBNode i = nullIRI { iriPath = stringToId ("bnode" ++ show i)
f4505a64a089693012a3f5c3b1f12a82cd7a2a5aKlaus Luettich , isAbbrev = True
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder , isBlankNode = True}
f4505a64a089693012a3f5c3b1f12a82cd7a2a5aKlaus LuettichcollectionToPOList :: [Object] -> [PredicateObjectList]
f4505a64a089693012a3f5c3b1f12a82cd7a2a5aKlaus LuettichcollectionToPOList objs = case objs of
5d4038657f6a63e131f5804af2f7957b69e15a43Klaus Luettich h : t -> [ PredicateObjectList (Predicate rdfFirst) [h]
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder , PredicateObjectList (Predicate rdfRest) [Object $ if null t
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder then Subject rdfNil else SubjectList $ collectionToPOList t]]
77a65251ee036c6aaf09c2775315a4ee24259fbdJorina Freya GerkenexpandPOList1 :: Triples -> [Triples]
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederexpandPOList1 (Triples s pols) = map (\ pol -> Triples s [pol]) pols
afa6ceaf4359ae437aaa6830949583143ace2752Christian Maeder-- | this assumes exactly one subject and one predicate
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederexpandPOList2 :: Triples -> [Triples]
97812b7ce9860bf514a8822a63503451795dbc65Klaus LuettichexpandPOList2 (Triples s pols) = case pols of
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder [PredicateObjectList p objs] ->
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder map (\ obj -> Triples s [PredicateObjectList p [obj]]) objs
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder _ -> error "unexpected ; abbreviated triple"
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder-- | converts a triple to a list of triples with one predicate and one object
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederexpandPOList :: Triples -> [Triples]
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederexpandPOList = concatMap expandPOList2 . expandPOList1
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder-- | this assumes exactly one subject, one predicate and one object
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederexpandObject1 :: Int -> Triples -> (Int, [Triples])
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaederexpandObject1 i t@(Triples s ls) = case ls of
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder [PredicateObjectList p [obj]] -> case obj of
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder ObjectLiteral _ -> (i, [t])
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder Object (Subject _) -> (i, [t])
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder Object (SubjectList pol) ->
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder let bnode = Subject $ generateBNode i
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder newTriple = Triples s [PredicateObjectList p [Object bnode]]
9df11f85fd7f8c4745d64464876e84ec4e263692Christian Maeder connectedTriples = expandPOList $ Triples bnode pol
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers (j, expandedTriples) = expandObject2 (i + 1) connectedTriples
9df11f85fd7f8c4745d64464876e84ec4e263692Christian Maeder in (j, newTriple : expandedTriples)
5b818f10e11fc79def1fdd5c8a080d64a6438d87Christian Maeder Object (SubjectCollection col) -> let pol = collectionToPOList col
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers in if null pol then
5d4038657f6a63e131f5804af2f7957b69e15a43Klaus Luettich (i, [Triples s [PredicateObjectList p [Object $ Subject rdfNil]]])
5d4038657f6a63e131f5804af2f7957b69e15a43Klaus Luettich else expandObject1 i $ Triples s [PredicateObjectList p [Object $ SubjectList pol]]
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder _ -> error "unexpected , or ; abbreviated triple"
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder-- | this assumes each triple has one subject, one predicate and one object
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian MaederexpandObject2 :: Int -> [Triples] -> (Int, [Triples])
8659594bb40eb5f3da5439692f0908300947191eSonja GröningexpandObject2 i tl = case tl of
eeb419aa20c97b4af973e97ee6ae77a8eed29e15Till Mossakowski h : t -> let (j, triples1) = expandObject1 i h
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers (k, triples2) = expandObject2 j t
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder in (k, triples1 ++ triples2)
61fa0ac06ede811c7aad54ec4c4202346727368eChristian MaederexpandObject :: Int -> Triples -> (Int, [Triples])
61fa0ac06ede811c7aad54ec4c4202346727368eChristian MaederexpandObject i t = expandObject2 i $ expandPOList t
61fa0ac06ede811c7aad54ec4c4202346727368eChristian MaederexpandSubject :: Int -> Triples -> (Int, [Triples])
61fa0ac06ede811c7aad54ec4c4202346727368eChristian MaederexpandSubject i t@(Triples s ls) = case s of
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder Subject _ -> (i, [t])
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder SubjectList pol -> let bnode = Subject $ generateBNode i
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder in (i + 1, map (Triples bnode) [ls, pol])
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder SubjectCollection col -> let pol = collectionToPOList col
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder in if null col then (i, [Triples (Subject rdfNil) ls])
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder else expandSubject i $ Triples (SubjectList pol) ls
afa6ceaf4359ae437aaa6830949583143ace2752Christian MaederexpandTriple :: Int -> Triples -> (Int, [Triples])
afa6ceaf4359ae437aaa6830949583143ace2752Christian MaederexpandTriple i t = let (j, sst) = expandSubject i t in case sst of
afa6ceaf4359ae437aaa6830949583143ace2752Christian Maeder [triple] -> expandObject j triple
8cacad2a09782249243b80985f28e9387019fe40Christian Maeder [triple, connectedTriple] ->
afa6ceaf4359ae437aaa6830949583143ace2752Christian Maeder let (k, tl1) = expandObject j triple
8cacad2a09782249243b80985f28e9387019fe40Christian Maeder (l, tl2) = expandObject k connectedTriple
afa6ceaf4359ae437aaa6830949583143ace2752Christian Maeder in (l, tl1 ++ tl2)
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder _ -> error "expanding triple before expanding subject"
61fa0ac06ede811c7aad54ec4c4202346727368eChristian MaederexpandTripleList :: Int -> [Triples] -> (Int, [Triples])
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix ReckersexpandTripleList i tl = case tl of
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder [] -> (i, [])
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder h : t -> let (j, tl1) = expandTriple i h
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder (k, tl2) = expandTripleList j t
a02a4eb2a2029d27a11fff2ebcc6c460574a74fcKlaus Luettich in (k, tl1 ++ tl2)
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till MossakowskisimpleTripleToAxiom :: Triples -> Axiom
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till MossakowskisimpleTripleToAxiom (Triples s pol) = case (s, pol) of
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder (Subject sub, [PredicateObjectList (Predicate pr) [o]]) ->
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder Axiom (SubjectTerm sub) (PredicateTerm pr) $ ObjectTerm $ case o of
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder ObjectLiteral lit -> Right lit
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder Object (Subject obj) -> Left obj
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder _ -> error "object should be an URI"
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder _ -> error "subject should be an URI or triple should not be abbreviated"
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaedercreateAxioms :: TurtleDocument -> [Axiom]
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaedercreateAxioms doc = map simpleTripleToAxiom $ snd $ expandTripleList 1
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder $ triplesOfDocument $ resolveDocument doc
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder-- | takes an entity and modifies the sign according to the given function
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaedermodEntity :: (Term -> Set.Set Term -> Set.Set Term) -> RDFEntity -> State Sign ()
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian MaedermodEntity f (RDFEntity ty u) = do
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder let chg = f u
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder put $ case ty of
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder SubjectEntity -> s { subjects = chg $ subjects s }
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder PredicateEntity -> s { predicates = chg $ predicates s }
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder ObjectEntity -> s { objects = chg $ objects s }
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder-- | adding entities to the signature
dbe752ee940baae7f9f231f29c62284bb0f90a25Christian MaederaddEntity :: RDFEntity -> State Sign ()
53818ced114da21321063fff307aa41c1ab31dd3Achim MahnkeaddEntity = modEntity Set.insert
53818ced114da21321063fff307aa41c1ab31dd3Achim MahnkecollectEntities :: Axiom -> State Sign ()
53818ced114da21321063fff307aa41c1ab31dd3Achim MahnkecollectEntities (Axiom sub pre obj) = do
53818ced114da21321063fff307aa41c1ab31dd3Achim Mahnke addEntity (RDFEntity SubjectEntity sub)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder addEntity (RDFEntity PredicateEntity pre)
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder addEntity (RDFEntity ObjectEntity obj)
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder-- | collects all entites from the axioms
23ab8855c58adfbd03a0730584b917b24c603901Christian MaedercreateSign :: TurtleDocument -> State Sign ()
dd7b93bd69a40191907af1739db375ecc7e6cf18Christian MaedercreateSign = mapM_ collectEntities . createAxioms
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian MaederanaAxiom :: Axiom -> Named Axiom
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till MossakowskianaAxiom = makeNamed ""
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder-- | static analysis of document with incoming sign.
61fa0ac06ede811c7aad54ec4c4202346727368eChristian MaederbasicRDFAnalysis :: (TurtleDocument, Sign, GlobalAnnos)
ed9207cf24e96b0d6f59985822054ae28cb69b2eChristian Maeder -> Result (TurtleDocument, ExtSign Sign RDFEntity, [Named Axiom])
b49276c9f50038e0bd499ad49f7bd6444566a834Christian MaederbasicRDFAnalysis (doc, inSign, _) = do
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder let syms = Set.difference (symOf accSign) $ symOf inSign
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder accSign = execState (createSign doc) inSign
33d042fe6a9eb27a4c48f840b80838f3e7d98e34Christian Maeder axioms = map anaAxiom $ createAxioms doc
b10267ae0a6523b73113fc2dee9ea628266fce60Christian Maeder return (doc, ExtSign accSign syms, axioms)