[Fencommits] fenfire-hs: move raptor interfacing code to Fenfire.RDF

Benja Fallenstein benja.fallenstein at gmail.com
Fri Mar 16 11:30:25 EET 2007


Fri Mar 16 11:29:52 EET 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * move raptor interfacing code to Fenfire.RDF
diff -rN -u old-fenfire-hs-1/Fenfire/RDF.hs new-fenfire-hs-1/Fenfire/RDF.hs
--- old-fenfire-hs-1/Fenfire/RDF.hs	2007-03-16 11:30:25.000000000 +0200
+++ new-fenfire-hs-1/Fenfire/RDF.hs	2007-03-16 11:30:25.000000000 +0200
@@ -21,17 +21,19 @@
 
 import Fenfire.Cache
 import Fenfire.Utils
+import qualified Fenfire.Raptor as Raptor
 
 import Control.Monad.Writer (MonadWriter, tell, forM_)
 
 import Data.List (intersperse)
 import Data.Map (Map)
 import qualified Data.Map as Map
-import Data.Maybe (fromMaybe, isJust)
+import Data.Maybe (fromMaybe, fromJust, isJust)
 import qualified Numeric
 import Data.Set (Set)
 import qualified Data.Set as Set
 
+import Network.URI
 
 data Node = IRI { nodeStr :: String }
           | BNode { bnodeGraph :: String, nodeStr :: String } 
@@ -218,6 +220,33 @@
 
 
 --------------------------------------------------------------------------
+-- Raptor interface
+--------------------------------------------------------------------------
+
+raptorToGraph :: [Raptor.Triple] -> [(String, String)] -> String -> Graph
+raptorToGraph raptorTriples namespaces graphURI =
+        foldr (uncurry addNamespace) (listToGraph triples) namespaces where
+    triples = map convert raptorTriples
+    convert (s,p,o) = (f s, f p, f o)
+    f (Raptor.Uri s) = IRI s
+    f (Raptor.Literal s) = Literal s Plain
+    f (Raptor.Blank s) = BNode graphURI s
+    
+graphToRaptor :: Graph -> String -> ([Raptor.Triple], [(String, String)])
+graphToRaptor graph graphURI = (map convert triples, namespaces) where
+    graphURI' = fromJust $ Network.URI.parseURI graphURI
+    convert (s,p,o) = (f s, f p, f o)
+    f (IRI s) = Raptor.Uri $ fromMaybe s $ do
+                    u <- Network.URI.parseURI s
+                    return $ show $ Network.URI.relativeFrom u graphURI'
+    f (Literal s _) = Raptor.Literal s
+    f (BNode g s) = if g == graphURI then Raptor.Blank s
+                    else error "XXX Cannot save bnode from different graph"
+    triples = graphToList graph
+    namespaces = Map.toAscList $ graphNamespaces graph
+
+
+--------------------------------------------------------------------------
 -- Writing Turtle
 --------------------------------------------------------------------------
 
diff -rN -u old-fenfire-hs-1/Fenfire.fhs new-fenfire-hs-1/Fenfire.fhs
--- old-fenfire-hs-1/Fenfire.fhs	2007-03-16 11:30:25.000000000 +0200
+++ new-fenfire-hs-1/Fenfire.fhs	2007-03-16 11:30:25.000000000 +0200
@@ -235,31 +235,18 @@
 loadGraph fileName = do
     --file <- readFile fileName
     --graph <- fromNTriples file >>= return . reverse-}
-    let convert (s,p,o) = (f s, f p, f o)
-        f (Raptor.Uri s) = IRI s
-        f (Raptor.Literal s) = Literal s Plain
-        f (Raptor.Blank s) = BNode fileName s
+    uri <- Raptor.filenameToURI fileName
     (raptorTriples, namespaces) <- if List.isPrefixOf "http:" fileName
         then Raptor.uriToTriples fileName Nothing
         else Raptor.filenameToTriples fileName Nothing
-    triples <- return $ map convert raptorTriples
-    return $ foldr (uncurry addNamespace) (listToGraph triples) namespaces
+    return $ raptorToGraph raptorTriples namespaces uri
 
 saveGraph :: Graph -> FilePath -> IO ()
 saveGraph graph fileName = do
     --writeFile fileName $ toNTriples $ reverse graph
-    uri <- liftM (fromJust . Network.URI.parseURI)
-                 (Raptor.filenameToURI fileName)
-    let convert (s,p,o) = (f s, f p, f o)
-        f (IRI s) = Raptor.Uri $ fromMaybe s $ do
-                        u <- Network.URI.parseURI s
-                        return $ show $ Network.URI.relativeFrom u uri
-        f (Literal s _) = Raptor.Literal s
-        f (BNode g s) = if g == fileName then Raptor.Blank s
-                        else error "XXX Cannot save bnode from different graph"
-        triples = graphToList graph
-        namespaces = Map.toAscList $ graphNamespaces graph
-    Raptor.triplesToFilename (map convert triples) namespaces fileName
+    uri <- Raptor.filenameToURI fileName
+    let (raptorTriples, namespaces) = graphToRaptor graph uri
+    Raptor.triplesToFilename raptorTriples namespaces fileName
     putStrLn $ "Saved: " ++ fileName
 
 newState :: Graph -> Path -> FilePath -> Bool -> FenState




More information about the Fencommits mailing list