[Fencommits] fenfire-hs: code for relativizing and absolutizing uris in RDF
Benja Fallenstein
benja.fallenstein at gmail.com
Sun Mar 18 17:53:20 EET 2007
Sun Mar 18 17:52:07 EET 2007 Benja Fallenstein <benja.fallenstein at gmail.com>
* code for relativizing and absolutizing uris in RDF
diff -rN -u old-fenfire-hs/Fenfire/RDF.hs new-fenfire-hs/Fenfire/RDF.hs
--- old-fenfire-hs/Fenfire/RDF.hs 2007-03-18 17:53:20.000000000 +0200
+++ new-fenfire-hs/Fenfire/RDF.hs 2007-03-18 17:53:20.000000000 +0200
@@ -188,11 +188,32 @@
mergeGraphs :: Op Graph
mergeGraphs real virtual = foldr insertVirtual real (graphToList virtual)
+relativizeURI :: String -> Endo String
+relativizeURI baseURI s = fromMaybe s $ do
+ u <- Network.URI.parseURIReference s; bu <- Network.URI.parseURI baseURI
+ return $ show $ Network.URI.relativeFrom u bu
+
+absolutizeURI :: String -> Endo String
+absolutizeURI baseURI s = fromMaybe s $ do
+ u <- Network.URI.parseURIReference s; bu <- Network.URI.parseURI baseURI
+ u' <- Network.URI.relativeTo u bu; return $ show u'
+
+relativizeNode :: String -> Endo Node
+relativizeNode baseURI (IRI s) = IRI $ relativizeURI baseURI s
+relativizeNode baseURI (BNode gid s) = BNode (relativizeURI baseURI gid) s
+relativizeNode _ node = node
+
+absolutizeNode :: String -> Endo Node
+absolutizeNode baseURI (IRI s) = IRI $ absolutizeURI baseURI s
+absolutizeNode baseURI (BNode gid s) = BNode (absolutizeURI baseURI gid) s
+absolutizeNode _ node = node
+
+changeBaseURI :: String -> String -> Endo Node
+changeBaseURI oldBase newBase = absolutizeNode newBase . relativizeNode oldBase
+
setGraphURI :: String -> Endo Graph
-setGraphURI uri g = everywhere (mkT f) $ g { graphURI = uri } where
- f :: Endo Node
- f (BNode gid n) | gid == graphURI g = BNode uri n
- f n = n
+setGraphURI uri g = everywhere (mkT $ changeBaseURI (graphURI g) uri) $
+ g { graphURI = uri }
insert :: Triple -> Endo Graph
insert t graph@(Graph { graphRealTriples=ts }) =
More information about the Fencommits
mailing list