[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