rdf4h 1.3.2 → 1.3.3
raw patch · 15 files changed
+106/−120 lines, 15 filesdep ~fgldep ~textPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: fgl, text
API changes (from Hackage documentation)
- Data.RDF.MGraph: instance NFData MGraph
- Data.RDF.MGraph: instance RDF MGraph
- Data.RDF.MGraph: instance Show MGraph
- Data.RDF.PatriciaTreeGraph: idxPtr :: AutoIncrMap -> !Int
- Data.RDF.PatriciaTreeGraph: instance NFData (Gr Node Node)
- Data.RDF.PatriciaTreeGraph: instance NFData PatriciaTreeGraph
- Data.RDF.PatriciaTreeGraph: instance RDF PatriciaTreeGraph
- Data.RDF.PatriciaTreeGraph: instance Show PatriciaTreeGraph
- Data.RDF.PatriciaTreeGraph: theMap :: AutoIncrMap -> Map Node (Int, Node)
- Data.RDF.TriplesGraph: instance Binary TriplesGraph
- Data.RDF.TriplesGraph: instance Constructor C1_0TriplesGraph
- Data.RDF.TriplesGraph: instance Datatype D1TriplesGraph
- Data.RDF.TriplesGraph: instance Generic TriplesGraph
- Data.RDF.TriplesGraph: instance NFData TriplesGraph
- Data.RDF.TriplesGraph: instance RDF TriplesGraph
- Data.RDF.TriplesGraph: instance Show TriplesGraph
- Data.RDF.Types: instance Binary BaseUrl
- Data.RDF.Types: instance Binary LValue
- Data.RDF.Types: instance Binary Node
- Data.RDF.Types: instance Binary PrefixMappings
- Data.RDF.Types: instance Binary Triple
- Data.RDF.Types: instance Constructor C1_0BaseUrl
- Data.RDF.Types: instance Constructor C1_0LValue
- Data.RDF.Types: instance Constructor C1_0Node
- Data.RDF.Types: instance Constructor C1_0PrefixMappings
- Data.RDF.Types: instance Constructor C1_0Triple
- Data.RDF.Types: instance Constructor C1_1LValue
- Data.RDF.Types: instance Constructor C1_1Node
- Data.RDF.Types: instance Constructor C1_2LValue
- Data.RDF.Types: instance Constructor C1_2Node
- Data.RDF.Types: instance Constructor C1_3Node
- Data.RDF.Types: instance Datatype D1BaseUrl
- Data.RDF.Types: instance Datatype D1LValue
- Data.RDF.Types: instance Datatype D1Node
- Data.RDF.Types: instance Datatype D1PrefixMappings
- Data.RDF.Types: instance Datatype D1Triple
- Data.RDF.Types: instance Eq BaseUrl
- Data.RDF.Types: instance Eq LValue
- Data.RDF.Types: instance Eq Namespace
- Data.RDF.Types: instance Eq Node
- Data.RDF.Types: instance Eq ParseFailure
- Data.RDF.Types: instance Eq PrefixMapping
- Data.RDF.Types: instance Eq PrefixMappings
- Data.RDF.Types: instance Eq Triple
- Data.RDF.Types: instance Generic BaseUrl
- Data.RDF.Types: instance Generic LValue
- Data.RDF.Types: instance Generic Node
- Data.RDF.Types: instance Generic PrefixMappings
- Data.RDF.Types: instance Generic Triple
- Data.RDF.Types: instance Hashable LValue
- Data.RDF.Types: instance Hashable Node
- Data.RDF.Types: instance NFData BaseUrl
- Data.RDF.Types: instance NFData LValue
- Data.RDF.Types: instance NFData Node
- Data.RDF.Types: instance NFData PrefixMappings
- Data.RDF.Types: instance NFData Triple
- Data.RDF.Types: instance Ord BaseUrl
- Data.RDF.Types: instance Ord LValue
- Data.RDF.Types: instance Ord Node
- Data.RDF.Types: instance Ord PrefixMapping
- Data.RDF.Types: instance Ord PrefixMappings
- Data.RDF.Types: instance Ord Triple
- Data.RDF.Types: instance Show BaseUrl
- Data.RDF.Types: instance Show LValue
- Data.RDF.Types: instance Show Namespace
- Data.RDF.Types: instance Show Node
- Data.RDF.Types: instance Show ParseFailure
- Data.RDF.Types: instance Show PrefixMapping
- Data.RDF.Types: instance Show PrefixMappings
- Data.RDF.Types: instance Show Triple
- Text.RDF.RDF4H.NTriplesParser: instance RdfParser NTriplesParser
- Text.RDF.RDF4H.NTriplesSerializer: instance RdfSerializer NTriplesSerializer
- Text.RDF.RDF4H.TurtleParser: instance RdfParser TurtleParser
- Text.RDF.RDF4H.TurtleSerializer: instance RdfSerializer TurtleSerializer
- Text.RDF.RDF4H.XmlParser: instance RdfParser XmlParser
- Text.RDF.RDF4H.XmlParser: instance Show GParseState
- Text.RDF.RDF4H.XmlParser: instance Show LParseState
+ Data.RDF.MGraph: instance Control.DeepSeq.NFData Data.RDF.MGraph.MGraph
+ Data.RDF.MGraph: instance Data.RDF.Types.RDF Data.RDF.MGraph.MGraph
+ Data.RDF.MGraph: instance GHC.Show.Show Data.RDF.MGraph.MGraph
+ Data.RDF.PatriciaTreeGraph: [idxPtr] :: AutoIncrMap -> !Int
+ Data.RDF.PatriciaTreeGraph: [theMap] :: AutoIncrMap -> Map Node (Int, Node)
+ Data.RDF.PatriciaTreeGraph: instance Control.DeepSeq.NFData (Data.Graph.Inductive.PatriciaTree.Gr Data.RDF.Types.Node Data.RDF.Types.Node)
+ Data.RDF.PatriciaTreeGraph: instance Data.RDF.Types.RDF Data.RDF.PatriciaTreeGraph.PatriciaTreeGraph
+ Data.RDF.PatriciaTreeGraph: instance GHC.Show.Show Data.RDF.PatriciaTreeGraph.PatriciaTreeGraph
+ Data.RDF.TriplesGraph: instance Control.DeepSeq.NFData Data.RDF.TriplesGraph.TriplesGraph
+ Data.RDF.TriplesGraph: instance Data.Binary.Class.Binary Data.RDF.TriplesGraph.TriplesGraph
+ Data.RDF.TriplesGraph: instance Data.RDF.Types.RDF Data.RDF.TriplesGraph.TriplesGraph
+ Data.RDF.TriplesGraph: instance GHC.Generics.Constructor Data.RDF.TriplesGraph.C1_0TriplesGraph
+ Data.RDF.TriplesGraph: instance GHC.Generics.Datatype Data.RDF.TriplesGraph.D1TriplesGraph
+ Data.RDF.TriplesGraph: instance GHC.Generics.Generic Data.RDF.TriplesGraph.TriplesGraph
+ Data.RDF.TriplesGraph: instance GHC.Show.Show Data.RDF.TriplesGraph.TriplesGraph
+ Data.RDF.Types: instance Control.DeepSeq.NFData Data.RDF.Types.BaseUrl
+ Data.RDF.Types: instance Control.DeepSeq.NFData Data.RDF.Types.LValue
+ Data.RDF.Types: instance Control.DeepSeq.NFData Data.RDF.Types.Node
+ Data.RDF.Types: instance Control.DeepSeq.NFData Data.RDF.Types.PrefixMappings
+ Data.RDF.Types: instance Control.DeepSeq.NFData Data.RDF.Types.Triple
+ Data.RDF.Types: instance Data.Binary.Class.Binary Data.RDF.Types.BaseUrl
+ Data.RDF.Types: instance Data.Binary.Class.Binary Data.RDF.Types.LValue
+ Data.RDF.Types: instance Data.Binary.Class.Binary Data.RDF.Types.Node
+ Data.RDF.Types: instance Data.Binary.Class.Binary Data.RDF.Types.PrefixMappings
+ Data.RDF.Types: instance Data.Binary.Class.Binary Data.RDF.Types.Triple
+ Data.RDF.Types: instance Data.Hashable.Class.Hashable Data.RDF.Types.LValue
+ Data.RDF.Types: instance Data.Hashable.Class.Hashable Data.RDF.Types.Node
+ Data.RDF.Types: instance GHC.Classes.Eq Data.RDF.Types.BaseUrl
+ Data.RDF.Types: instance GHC.Classes.Eq Data.RDF.Types.LValue
+ Data.RDF.Types: instance GHC.Classes.Eq Data.RDF.Types.Namespace
+ Data.RDF.Types: instance GHC.Classes.Eq Data.RDF.Types.Node
+ Data.RDF.Types: instance GHC.Classes.Eq Data.RDF.Types.ParseFailure
+ Data.RDF.Types: instance GHC.Classes.Eq Data.RDF.Types.PrefixMapping
+ Data.RDF.Types: instance GHC.Classes.Eq Data.RDF.Types.PrefixMappings
+ Data.RDF.Types: instance GHC.Classes.Eq Data.RDF.Types.Triple
+ Data.RDF.Types: instance GHC.Classes.Ord Data.RDF.Types.BaseUrl
+ Data.RDF.Types: instance GHC.Classes.Ord Data.RDF.Types.LValue
+ Data.RDF.Types: instance GHC.Classes.Ord Data.RDF.Types.Node
+ Data.RDF.Types: instance GHC.Classes.Ord Data.RDF.Types.PrefixMapping
+ Data.RDF.Types: instance GHC.Classes.Ord Data.RDF.Types.PrefixMappings
+ Data.RDF.Types: instance GHC.Classes.Ord Data.RDF.Types.Triple
+ Data.RDF.Types: instance GHC.Generics.Constructor Data.RDF.Types.C1_0BaseUrl
+ Data.RDF.Types: instance GHC.Generics.Constructor Data.RDF.Types.C1_0LValue
+ Data.RDF.Types: instance GHC.Generics.Constructor Data.RDF.Types.C1_0Node
+ Data.RDF.Types: instance GHC.Generics.Constructor Data.RDF.Types.C1_0PrefixMappings
+ Data.RDF.Types: instance GHC.Generics.Constructor Data.RDF.Types.C1_0Triple
+ Data.RDF.Types: instance GHC.Generics.Constructor Data.RDF.Types.C1_1LValue
+ Data.RDF.Types: instance GHC.Generics.Constructor Data.RDF.Types.C1_1Node
+ Data.RDF.Types: instance GHC.Generics.Constructor Data.RDF.Types.C1_2LValue
+ Data.RDF.Types: instance GHC.Generics.Constructor Data.RDF.Types.C1_2Node
+ Data.RDF.Types: instance GHC.Generics.Constructor Data.RDF.Types.C1_3Node
+ Data.RDF.Types: instance GHC.Generics.Datatype Data.RDF.Types.D1BaseUrl
+ Data.RDF.Types: instance GHC.Generics.Datatype Data.RDF.Types.D1LValue
+ Data.RDF.Types: instance GHC.Generics.Datatype Data.RDF.Types.D1Node
+ Data.RDF.Types: instance GHC.Generics.Datatype Data.RDF.Types.D1PrefixMappings
+ Data.RDF.Types: instance GHC.Generics.Datatype Data.RDF.Types.D1Triple
+ Data.RDF.Types: instance GHC.Generics.Generic Data.RDF.Types.BaseUrl
+ Data.RDF.Types: instance GHC.Generics.Generic Data.RDF.Types.LValue
+ Data.RDF.Types: instance GHC.Generics.Generic Data.RDF.Types.Node
+ Data.RDF.Types: instance GHC.Generics.Generic Data.RDF.Types.PrefixMappings
+ Data.RDF.Types: instance GHC.Generics.Generic Data.RDF.Types.Triple
+ Data.RDF.Types: instance GHC.Show.Show Data.RDF.Types.BaseUrl
+ Data.RDF.Types: instance GHC.Show.Show Data.RDF.Types.LValue
+ Data.RDF.Types: instance GHC.Show.Show Data.RDF.Types.Namespace
+ Data.RDF.Types: instance GHC.Show.Show Data.RDF.Types.Node
+ Data.RDF.Types: instance GHC.Show.Show Data.RDF.Types.ParseFailure
+ Data.RDF.Types: instance GHC.Show.Show Data.RDF.Types.PrefixMapping
+ Data.RDF.Types: instance GHC.Show.Show Data.RDF.Types.PrefixMappings
+ Data.RDF.Types: instance GHC.Show.Show Data.RDF.Types.Triple
+ Text.RDF.RDF4H.NTriplesParser: instance Data.RDF.Types.RdfParser Text.RDF.RDF4H.NTriplesParser.NTriplesParser
+ Text.RDF.RDF4H.NTriplesSerializer: instance Data.RDF.Types.RdfSerializer Text.RDF.RDF4H.NTriplesSerializer.NTriplesSerializer
+ Text.RDF.RDF4H.TurtleParser: instance Data.RDF.Types.RdfParser Text.RDF.RDF4H.TurtleParser.TurtleParser
+ Text.RDF.RDF4H.TurtleSerializer: instance Data.RDF.Types.RdfSerializer Text.RDF.RDF4H.TurtleSerializer.TurtleSerializer
+ Text.RDF.RDF4H.XmlParser: instance Data.RDF.Types.RdfParser Text.RDF.RDF4H.XmlParser.XmlParser
+ Text.RDF.RDF4H.XmlParser: instance GHC.Show.Show Text.RDF.RDF4H.XmlParser.GParseState
+ Text.RDF.RDF4H.XmlParser: instance GHC.Show.Show Text.RDF.RDF4H.XmlParser.LParseState
- Data.RDF.Query: expandTriples :: RDF rdf => rdf -> Triples
+ Data.RDF.Query: expandTriples :: (RDF rdf) => rdf -> Triples
- Data.RDF.Query: rdfContainsNode :: RDF rdf => rdf -> Node -> Bool
+ Data.RDF.Query: rdfContainsNode :: (RDF rdf) => rdf -> Node -> Bool
Files
- bench/MainCriterion.hs +46/−47
- rdf4h.cabal +12/−37
- src/Data/RDF/Namespace.hs +1/−1
- src/Data/RDF/PatriciaTreeGraph.hs +2/−8
- src/Data/RDF/Query.hs +21/−4
- src/Data/RDF/Types.hs +1/−2
- src/Rdf4hParseMain.hs +2/−2
- src/Text/RDF/RDF4H/Interact.hs +1/−1
- src/Text/RDF/RDF4H/NTriplesParser.hs +3/−3
- src/Text/RDF/RDF4H/NTriplesSerializer.hs +4/−3
- src/Text/RDF/RDF4H/ParserUtils.hs +3/−3
- src/Text/RDF/RDF4H/TurtleParser.hs +3/−3
- src/Text/RDF/RDF4H/TurtleSerializer.hs +2/−2
- src/Text/RDF/RDF4H/XmlParser.hs +4/−3
- testsuite/tests/W3C/TurtleTest.hs +1/−1
bench/MainCriterion.hs view
@@ -1,15 +1,16 @@-{-# LANGUAGE OverloadedStrings, LambdaCase #-}+{-# LANGUAGE OverloadedStrings, LambdaCase, RankNTypes #-} module Main where import Criterion import Criterion.Main import Data.RDF-import qualified Data.Text as T+import qualified Data.Text.Lazy as T --- The `countries.ttl` Turtle file is needed to run this benchmark suite+-- The `bills.102.rdf` XML file is needed to run this benchmark suite ----- $ wget http://telegraphis.net/data/countries/countries.ttl+-- $ wget https://www.govtrack.us/data/rdf/bills.102.rdf.gz+-- $ gzip -d bills.102.rdf.gz parseTurtle :: RDF rdf => String -> rdf parseTurtle s =@@ -24,7 +25,7 @@ main :: IO () main = defaultMain [- env (readFile "countries.ttl") $ \ ~(ttl_countries) ->+ env (readFile "bills.102.ttl") $ \ ~(ttl_countries) -> bgroup "parse" [ bench "TriplesGraph" $ nf (parseTurtle :: String -> TriplesGraph) ttl_countries@@ -35,58 +36,56 @@ ] ,- env (do ttl_countries <- readFile "countries.ttl"+ env (do ttl_countries <- readFile "bills.102.ttl" let (Right rdf1) = parseString (TurtleParser Nothing Nothing) (T.pack ttl_countries) let (Right rdf2) = parseString (TurtleParser Nothing Nothing) (T.pack ttl_countries) let (Right rdf3) = parseString (TurtleParser Nothing Nothing) (T.pack ttl_countries) return (rdf1 :: PatriciaTreeGraph,rdf2 :: TriplesGraph,rdf3 :: MGraph) ) $ \ ~(patriciaTreeCountries,triplesGraph,mGraph) ->- bgroup "query" [- bench "TriplesGraph" $- nf (queryGr :: (Maybe Node,Maybe Node,Maybe Node,TriplesGraph) -> [Triple])- (Just (UNode "http://telegraphis.net/data/countries/AF#AF"),- Just (UNode "geographis:capital"),- Just (UNode "http://telegraphis.net/data/capitals/AF/Kabul#Kabul"),- triplesGraph)- , bench "MGraph" $- nf (queryGr :: (Maybe Node,Maybe Node,Maybe Node,MGraph) -> [Triple])- (Just (UNode "http://telegraphis.net/data/countries/AF#AF"),- Just (UNode "geographis:capital"),- Just (UNode "http://telegraphis.net/data/capitals/AF/Kabul#Kabul"),- mGraph)- , bench "PatriciaTreeGraph" $- nf (queryGr :: (Maybe Node,Maybe Node,Maybe Node,PatriciaTreeGraph) -> [Triple])- (Just (UNode "http://telegraphis.net/data/countries/AF#AF"),- Just (UNode "geographis:capital"),- Just (UNode "http://telegraphis.net/data/capitals/AF/Kabul#Kabul"),- patriciaTreeCountries)- ]+ bgroup "query"+ (queryBench "TriplesGraph" triplesGraph+ ++ queryBench "MGraph" mGraph+ ++ queryBench "PatriciaTreeGraph" patriciaTreeCountries) ,- env (do ttl_countries <- readFile "countries.ttl"+ env (do ttl_countries <- readFile "bills.102.ttl" let (Right rdf1) = parseString (TurtleParser Nothing Nothing) (T.pack ttl_countries) let (Right rdf2) = parseString (TurtleParser Nothing Nothing) (T.pack ttl_countries) let (Right rdf3) = parseString (TurtleParser Nothing Nothing) (T.pack ttl_countries) return (rdf1 :: PatriciaTreeGraph,rdf2 :: TriplesGraph,rdf3 :: MGraph) ) $ \ ~(patriciaTreeCountries,triplesGraph,mGraph) ->- bgroup "select" [- bench "TriplesGraph" $- nf (selectGr :: (NodeSelector,NodeSelector,NodeSelector,TriplesGraph) -> [Triple])- (Just (\case { (UNode n) -> T.length n > 12 ; _ -> False } ),- Just (\case { (UNode n) -> T.length n > 12 ; _ -> False } ),- Just (\case { (UNode n) -> T.length n > 12 ; _ -> False } ),- triplesGraph)- , bench "MGraph" $- nf (selectGr :: (NodeSelector,NodeSelector,NodeSelector,MGraph) -> [Triple])- (Just (\case { (UNode n) -> T.length n > 12 ; _ -> False } ),- Just (\case { (UNode n) -> T.length n > 12 ; _ -> False } ),- Just (\case { (UNode n) -> T.length n > 12 ; _ -> False } ),- mGraph)- , bench "PatriciaTreeGraph" $- nf (selectGr :: (NodeSelector,NodeSelector,NodeSelector,PatriciaTreeGraph) -> [Triple])- (Just (\case { (UNode n) -> T.length n > 12 ; _ -> False } ),- Just (\case { (UNode n) -> T.length n > 12 ; _ -> False } ),- Just (\case { (UNode n) -> T.length n > 12 ; _ -> False } ),- patriciaTreeCountries)- ]+ bgroup "select"+ (selectBench "TriplesGraph" triplesGraph+ ++ selectBench "MGraph" mGraph+ ++ selectBench "PatriciaTreeGraph" patriciaTreeCountries) ]++selectBench :: forall rdf. RDF rdf => String -> rdf -> [Benchmark]+selectBench label gr =+ [ bench (label ++ " SPO") $ nf selectGr (subjSelect,predSelect,objSelect,gr)+ , bench (label ++ " SP") $ nf selectGr (subjSelect,predSelect,selectNothing,gr)+ , bench (label ++ " S") $ nf selectGr (subjSelect,selectNothing,selectNothing,gr)+ , bench (label ++ " PO") $ nf selectGr (selectNothing,predSelect,objSelect,gr)+ , bench (label ++ " O") $ nf selectGr (selectNothing,selectNothing,objSelect,gr)+ ]++subjSelect, predSelect, objSelect, selectNothing :: Maybe (Node -> Bool)+subjSelect = Just (\case { (UNode n) -> T.length n > 12 ; _ -> False })+predSelect = Just (\case { (UNode n) -> T.length n > 12 ; _ -> False })+objSelect = Just (\case { (UNode n) -> T.length n > 12 ; _ -> False })+selectNothing = Nothing++subjQuery, predQuery, objQuery, queryNothing :: Maybe Node+subjQuery = Just (UNode "http://www.rdfabout.com/rdf/usgov/congress/102/bills/h5694")+predQuery = Just (UNode "bill:congress")+objQuery = Just (LNode (PlainL (T.pack "102")))+queryNothing = Nothing++queryBench :: forall rdf. RDF rdf => String -> rdf -> [Benchmark]+queryBench label gr =+ [ bench (label ++ " SPO") $ nf queryGr (subjQuery,predQuery,objQuery,gr)+ , bench (label ++ " SP") $ nf queryGr (subjQuery,predQuery,queryNothing,gr)+ , bench (label ++ " S") $ nf queryGr (subjQuery,queryNothing,queryNothing,gr)+ , bench (label ++ " PO") $ nf queryGr (queryNothing,predQuery,objQuery,gr)+ , bench (label ++ " O") $ nf queryGr (queryNothing,queryNothing,objQuery,gr)+ ]
rdf4h.cabal view
@@ -1,7 +1,7 @@ name: rdf4h-version: 1.3.2+version: 1.3.3 synopsis: A library for RDF processing in Haskell-description: +description: 'RDF for Haskell' is a library for working with RDF in Haskell. At present it includes parsers and serializers for RDF in the N-Triples and Turtle, and parsing support for RDF/XML. It provides abilities such as querying@@ -49,10 +49,10 @@ else build-depends: base < 3 build-depends: parsec >= 3- , fgl+ , fgl >= 5.5.2.0 , HTTP >= 4000.0.0 , hxt >= 9.3.1.2- , text+ , text >= 1.2.1.0 , unordered-containers , hashable , deepseq@@ -73,20 +73,14 @@ ghc-options: -Wall -fno-warn-unused-do-bind -funbox-strict-fields -O2 executable rdf4h- main-is: Rdf4hParseMain.hs + main-is: src/Rdf4hParseMain.hs if flag(small_base) build-depends: base >= 3, bytestring else build-depends: base >= 4 && < 6- build-depends: parsec >= 3- , HTTP >= 4000.0.0- , hxt >= 9.3.1.2+ build-depends: rdf4h , containers- , text- , hashable- , deepseq- , binary- , text-binary+ , text >= 1.2.1.0 if impl(ghc < 7.6) build-depends: ghc-prim@@ -96,7 +90,6 @@ else build-depends: network-uri < 2.6, network < 2.6 - hs-source-dirs: src extensions: BangPatterns RankNTypes ScopedTypeVariables MultiParamTypeClasses OverloadedStrings ghc-options: -Wall -fno-warn-unused-do-bind -funbox-strict-fields @@ -106,24 +99,16 @@ ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-orphans -fno-warn-name-shadowing -funbox-strict-fields extensions: RankNTypes MultiParamTypeClasses Arrows FlexibleContexts OverloadedStrings build-depends: base >= 4 && < 6- , parsec >= 3+ , rdf4h , test-framework >= 0.2.3 , test-framework-quickcheck2 , test-framework-hunit >= 0.2.7- , HTTP >= 4000.0.0 , QuickCheck >= 1.2.0.0 , HUnit >= 1.2.2.1 , bytestring- , hxt >= 9.3.1.2 , containers- , text+ , text >= 1.2.1.0 , knob- , unordered-containers- , hashable- , fgl- , deepseq- , binary- , text-binary if impl(ghc < 7.6) build-depends: ghc-prim@@ -133,18 +118,8 @@ else build-depends: network-uri < 2.6, network < 2.6 - other-modules: Data.RDF- , Data.RDF.Namespace- , Data.RDF.MGraph- , Data.RDF.PatriciaTreeGraph- , Data.RDF.TriplesGraph- , Text.RDF.RDF4H.NTriplesParser- , Text.RDF.RDF4H.NTriplesSerializer- , Text.RDF.RDF4H.TurtleParser- , Text.RDF.RDF4H.TurtleSerializer- , Text.RDF.RDF4H.XmlParser- , W3C.TurtleTest- hs-source-dirs: src, testsuite/tests+ other-modules: W3C.TurtleTest+ hs-source-dirs: testsuite/tests benchmark rdf4h-bench type: exitcode-stdio-1.0@@ -153,7 +128,7 @@ build-depends: base, criterion, rdf4h,- text+ text >= 1.2.1.0 ghc-options: -Wall -O2
src/Data/RDF/Namespace.hs view
@@ -14,7 +14,7 @@ standard_ns_mappings, ns_mappings ) where -import qualified Data.Text as T+import qualified Data.Text.Lazy as T import Data.RDF.Types import qualified Data.Map as Map
src/Data/RDF/PatriciaTreeGraph.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleInstances, BangPatterns, CPP #-}+{-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleInstances, BangPatterns #-} module Data.RDF.PatriciaTreeGraph where @@ -16,16 +16,10 @@ import Data.Maybe newtype PatriciaTreeGraph = PatriciaTreeGraph (PT.Gr Node Node,IntMap.IntMap Node, Maybe BaseUrl, PrefixMappings)- deriving (Show,NFData)+ deriving (Show) -#if MIN_VERSION_fgl(5,5,2)--- fgl 7616e7135c9401e98f4c7350c9f60108ea73e456--- adds those instances but they are not released yet-#else--- fgl-5.5.1.0 and older don't have that instance instance NFData (PT.Gr Node Node) where rnf x = seq x ()-#endif instance RDF PatriciaTreeGraph where baseUrl = baseUrl'
src/Data/RDF/Query.hs view
@@ -20,9 +20,10 @@ import Data.List import Data.RDF.Types import qualified Data.RDF.Namespace as NS (toPMList, uriOf, rdf)-import qualified Data.Text as T+import qualified Data.Text.Lazy as T import Data.Maybe (catMaybes) + -- |Answer the subject node of the triple. {-# INLINE subjectOf #-} subjectOf :: Triple -> Node@@ -101,9 +102,25 @@ -- node names, triple order and prefixes. In math terms, this is the \simeq -- latex operator, or ~= isIsomorphic :: forall rdf1 rdf2. (RDF rdf1, RDF rdf2) => rdf1 -> rdf2 -> Bool-isIsomorphic g1 g2 = normalize g1 == normalize g2- where normalize :: forall rdf. (RDF rdf) => rdf -> Triples- normalize = sort . nub . expandTriples+isIsomorphic g1 g2 = and $ zipWith compareTripleUnlessBlank (normalize g1) (normalize g2)+ where+ compareNodeUnlessBlank :: Node -> Node -> Bool+ compareNodeUnlessBlank (BNode _) (BNode _) = True+ compareNodeUnlessBlank (UNode n1) (UNode n2) = n1 == n2+ compareNodeUnlessBlank (BNodeGen i1) (BNodeGen i2) = i1 == i2+ compareNodeUnlessBlank (LNode l1) (LNode l2) = l1 == l2+ compareNodeUnlessBlank (BNodeGen _) (BNode _) = True+ compareNodeUnlessBlank (BNode _) (BNodeGen _) = True+ compareNodeUnlessBlank _ _ = False++ compareTripleUnlessBlank :: Triple -> Triple -> Bool+ compareTripleUnlessBlank (Triple s1 p1 o1) (Triple s2 p2 o2) =+ compareNodeUnlessBlank s1 s2 &&+ compareNodeUnlessBlank p1 p2 &&+ compareNodeUnlessBlank o1 o2++ normalize :: forall rdf. (RDF rdf) => rdf -> Triples+ normalize = sort . nub . expandTriples -- |Expand the triples in a graph with the prefix map and base URL for that -- graph.
src/Data/RDF/Types.hs view
@@ -36,7 +36,7 @@ ) where import Prelude hiding (pred)-import qualified Data.Text as T+import qualified Data.Text.Lazy as T import System.IO import Text.Printf import Data.Binary@@ -45,7 +45,6 @@ import Data.Hashable(Hashable) import qualified Data.List as List import qualified Data.Map as Map-import Data.Text.Binary () import qualified Network.URI as Network (isURI) import Control.DeepSeq (NFData,rnf) import GHC.Generics ()
src/Rdf4hParseMain.hs view
@@ -12,8 +12,8 @@ import Text.RDF.RDF4H.TurtleParser import Text.RDF.RDF4H.TurtleSerializer -import qualified Data.Text as T-import qualified Data.Text.IO as TIO+import qualified Data.Text.Lazy as T+import qualified Data.Text.Lazy.IO as TIO import System.Environment import System.IO
src/Text/RDF/RDF4H/Interact.hs view
@@ -14,7 +14,7 @@ module Text.RDF.RDF4H.Interact where -import qualified Data.Text as T+import qualified Data.Text.Lazy as T import Data.RDF.Types hiding (baseUrl) import Data.RDF.TriplesGraph()
src/Text/RDF/RDF4H/NTriplesParser.hs view
@@ -11,9 +11,9 @@ import Data.Char(isLetter, isDigit, isLower) import qualified Data.Map as Map import Text.Parsec-import Text.Parsec.Text-import qualified Data.Text as T-import qualified Data.Text.IO as TIO+import Text.Parsec.Text.Lazy+import qualified Data.Text.Lazy as T+import qualified Data.Text.Lazy.IO as TIO import Control.Monad (liftM,void) -- |NTriplesParser is an 'RdfParser' implementation for parsing RDF in the
src/Text/RDF/RDF4H/NTriplesSerializer.hs view
@@ -7,8 +7,9 @@ import Control.Monad (void) import Data.RDF.Types-import qualified Data.Text as T-import qualified Data.Text.IO as T+import Data.RDF.Query (expandTriples)+import qualified Data.Text.Lazy as T+import qualified Data.Text.Lazy.IO as T import System.IO data NTriplesSerializer = NTriplesSerializer@@ -26,7 +27,7 @@ writeN _ = _writeNode stdout _writeRdf :: RDF rdf => Handle -> rdf -> IO ()-_writeRdf h = _writeTriples h . triplesOf+_writeRdf h = _writeTriples h . expandTriples _writeTriples :: Handle -> Triples -> IO () _writeTriples h = mapM_ (_writeTriple h)
src/Text/RDF/RDF4H/ParserUtils.hs view
@@ -7,9 +7,9 @@ import Network.URI import Network.HTTP import Data.Char (intToDigit)-import Data.Text.Encoding (decodeUtf8)-import qualified Data.ByteString.Char8 as B-import qualified Data.Text as T+import Data.Text.Lazy.Encoding (decodeUtf8)+import qualified Data.ByteString.Lazy.Char8 as B+import qualified Data.Text.Lazy as T -- import qualified Data.Map as Map import Data.Maybe (fromMaybe)
src/Text/RDF/RDF4H/TurtleParser.hs view
@@ -12,10 +12,10 @@ import Data.RDF.Namespace import Text.RDF.RDF4H.ParserUtils import Text.Parsec-import Text.Parsec.Text+import Text.Parsec.Text.Lazy import qualified Data.Map as Map-import qualified Data.Text as T-import qualified Data.Text.IO as TIO+import qualified Data.Text.Lazy as T+import qualified Data.Text.Lazy.IO as TIO import Data.Sequence(Seq, (|>)) import qualified Data.Sequence as Seq import qualified Data.Foldable as F
src/Text/RDF/RDF4H/TurtleSerializer.hs view
@@ -10,8 +10,8 @@ import Data.RDF.Types import Data.RDF.Query import Data.RDF.Namespace hiding (rdf)-import qualified Data.Text as T-import qualified Data.Text.IO as T+import qualified Data.Text.Lazy as T+import qualified Data.Text.Lazy.IO as T import Data.Map(Map) import qualified Data.Map as Map import Data.List
src/Text/RDF/RDF4H/XmlParser.hs view
@@ -13,8 +13,8 @@ import qualified Data.Map as Map (fromList) import Text.RDF.RDF4H.ParserUtils import Data.RDF.Types (RDF,RdfParser(..),Node(BNodeGen),BaseUrl(..),Triple(..),Triples,Subject,Predicate,Object,PrefixMappings(..),ParseFailure(ParseFailure),mkRdf,lnode,plainL,plainLL,typedL,unode,bnode)-import qualified Data.Text as T (Text,pack,unpack)-import qualified Data.Text.IO as TIO+import qualified Data.Text.Lazy as T (Text,pack,unpack)+import qualified Data.Text.Lazy.IO as TIO import Text.XML.HXT.Core (ArrowXml,XmlTree,IfThen((:->)),(>.),(>>.),first,neg,(<+>),expandURI,getName,getAttrValue,getAttrValue0,getAttrl,hasAttrValue,hasAttr,constA,choiceA,getChildren,ifA,arr2A,second,hasName,isElem,isWhiteSpace,xshow,listA,isA,isText,getText,this,unlistA,orElse,sattr,mkelem,xreadDoc,runSLA) -- TODO: write QuickCheck tests for XmlParser instance for RdfParser.@@ -116,7 +116,7 @@ parseDescription' :: forall a. (ArrowXml a, ArrowState GParseState a) => a (BaseUrl, XmlTree) Triple parseDescription' = proc (bUrl, rdf) -> do desc <- isElem <<< getChildren -< rdf- state <- arr (\(s, o) -> s { stateSubject = o }) <<< arr fst &&& arr2A mkNode -< (LParseState bUrl Nothing undefined, desc)+ state <- arr (\(s, o) -> s { stateSubject = o }) <<< arr fst &&& arr2A mkNode <<< updateState -< (LParseState bUrl Nothing undefined, desc) triple <- parseDescription -< (state, desc) returnA -< triple @@ -154,6 +154,7 @@ <+> isA (== "rdf:ID") <+> isA (== "xml:lang") <+> isA (== "rdf:parseType")+ <+> isA (== "xml:base") -- |Read a children of an rdf:Description element. These correspond to the Predicate portion of the Triple parsePredicatesFromChildren :: forall a. (ArrowXml a, ArrowState GParseState a)
testsuite/tests/W3C/TurtleTest.hs view
@@ -3,7 +3,7 @@ import Test.Framework.Providers.API import Test.Framework.Providers.HUnit import qualified Test.HUnit as TU-import qualified Data.Text as T+import qualified Data.Text.Lazy as T import W3C.Manifest