hsparql 0.2.2 → 0.2.3
raw patch · 3 files changed
+48/−50 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Database.HSparql.QueryGenerator: instance QueryShow RDFLiteral
- Database.HSparql.QueryGenerator: instance TermLike ([Char], IRIRef)
- Database.HSparql.QueryGenerator: instance TermLike ([Char], [Char])
- Database.HSparql.QueryGenerator: instance TermLike [Char]
+ Database.HSparql.QueryGenerator: instance QueryShow LValue
+ Database.HSparql.QueryGenerator: instance QueryShow Node
+ Database.HSparql.QueryGenerator: instance TermLike (Text, IRIRef)
+ Database.HSparql.QueryGenerator: instance TermLike (Text, Text)
+ Database.HSparql.QueryGenerator: instance TermLike Text
- Database.HSparql.QueryGenerator: (.:.) :: Prefix -> String -> IRIRef
+ Database.HSparql.QueryGenerator: (.:.) :: Prefix -> Text -> IRIRef
- Database.HSparql.QueryGenerator: iriRef :: String -> IRIRef
+ Database.HSparql.QueryGenerator: iriRef :: Text -> IRIRef
- Database.HSparql.QueryGenerator: prefix :: String -> IRIRef -> Query Prefix
+ Database.HSparql.QueryGenerator: prefix :: Text -> IRIRef -> Query Prefix
Files
- Database/HSparql/Connection.hs +1/−1
- Database/HSparql/QueryGenerator.hs +45/−47
- hsparql.cabal +2/−2
Database/HSparql/Connection.hs view
@@ -54,7 +54,7 @@ value :: Element -> BindingValue value e = case qName (elName e) of- "uri" -> Bound $ Data.RDF.unode $ T.pack $ strContent e+ "uri" -> Bound $ Data.RDF.unode $ (T.pack $ strContent e) "literal" -> case findAttr (unqual "datatype") e of Just dt -> Bound $ Data.RDF.lnode $ Data.RDF.typedL (T.pack $ strContent e) (T.pack dt) Nothing -> case findAttr langAttr e of
Database/HSparql/QueryGenerator.hs view
@@ -10,7 +10,7 @@ -- * Query Actions , prefix , var- , triple+ , Database.HSparql.QueryGenerator.triple , constructTriple , askTriple , describeIRI@@ -71,7 +71,8 @@ import Control.Monad.State import Data.List (intercalate)-import Data.String.Utils+import qualified Data.Text as T+import Data.RDF -- State monads@@ -118,10 +119,10 @@ -- Manipulate data within monad -- |Add a prefix to the query, given an IRI reference, and return it.-prefix :: String -> IRIRef -> Query Prefix-prefix pre ref = do -- n <- gets prefixIdx- let p = Prefix pre ref- modify $ \s -> s { {- prefixIdx = n + 1, -} prefixes = p : prefixes s }+prefix :: T.Text -> IRIRef -> Query Prefix+prefix pre (AbsoluteIRI node) = do+ let p = Prefix pre node+ modify $ \s -> s { prefixes = p : prefixes s } return p -- |Create and return a variable to the query, usable in later expressions.@@ -134,20 +135,20 @@ -- triple, or for which the variables can be bound. triple :: (TermLike a, TermLike b, TermLike c) => a -> b -> c -> Query Pattern triple a b c = do- let t = Triple (varOrTerm a) (varOrTerm b) (varOrTerm c)+ let t = QTriple (varOrTerm a) (varOrTerm b) (varOrTerm c) modify $ \s -> s { pattern = appendPattern t (pattern s) } return t constructTriple :: (TermLike a, TermLike b, TermLike c) => a -> b -> c -> Query Pattern constructTriple a b c = do- let t = Triple (varOrTerm a) (varOrTerm b) (varOrTerm c)+ let t = QTriple (varOrTerm a) (varOrTerm b) (varOrTerm c) modify $ \s -> s { constructTriples = appendTriple t (constructTriples s) } return t askTriple :: (TermLike a, TermLike b, TermLike c) => a -> b -> c -> Query Pattern askTriple a b c = do- let t = Triple (varOrTerm a) (varOrTerm b) (varOrTerm c)+ let t = QTriple (varOrTerm a) (varOrTerm b) (varOrTerm c) modify $ \s -> s { askTriples = appendTriple t (askTriples s) } return t @@ -187,15 +188,10 @@ -- Random auxiliary --- |Form a 'PrefixedName' 'IRIRef', with the 'Prefix' and reference name.-(.:.) :: Prefix -> String -> IRIRef+-- |Form a 'Node', with the 'Prefix' and reference name.+(.:.) :: Prefix -> T.Text -> IRIRef (.:.) = PrefixedName --- |Create an 'IRIRef' with an absolute reference to the address at which it is--- located.-iriRef :: String -> IRIRef-iriRef = IRIRef- -- Duplicate handling -- |Set duplicate handling to 'Distinct'. By default, there are no reductions.@@ -246,14 +242,14 @@ varOrTerm = Term . NumericLiteralTerm expr = NumericExpr . NumericLiteralExpr -instance TermLike [Char] where- varOrTerm = Term . RDFLiteralTerm . RDFLiteral+instance TermLike T.Text where+ varOrTerm = Term . RDFLiteralTerm . plainL -instance TermLike ([Char], [Char]) where- varOrTerm (s, lang') = Term . RDFLiteralTerm $ RDFLiteralLang s lang'+instance TermLike (T.Text, T.Text) where+ varOrTerm (s, lang') = Term . RDFLiteralTerm $ plainLL s lang' -instance TermLike ([Char], IRIRef) where- varOrTerm (s, ref) = Term . RDFLiteralTerm $ RDFLiteralIRIRef s ref+instance TermLike (T.Text, IRIRef) where+ varOrTerm (s, ref) = Term . RDFLiteralTerm $ typedL s (getFQN ref) instance TermLike Bool where varOrTerm = Term . BooleanLiteralTerm@@ -363,8 +359,7 @@ -- Default QueryData queryData :: QueryData queryData = QueryData- { {- prefixIdx = 0- , -} prefixes = []+ { prefixes = [] , varsIdx = 0 , vars = [] , queryType = TypeNotSet@@ -386,22 +381,23 @@ data Duplicates = NoLimits | Distinct | Reduced --- data Prefix = Prefix Int IRIRef-data Prefix = Prefix String IRIRef+data Prefix = Prefix T.Text Node data Variable = Variable Int +data IRIRef = AbsoluteIRI Node+ | PrefixedName Prefix T.Text -data IRIRef = IRIRef String- | PrefixedName Prefix String +iriRef :: T.Text -> IRIRef+iriRef uri = AbsoluteIRI $ unode uri -data RDFLiteral = RDFLiteral String- | RDFLiteralLang String String- | RDFLiteralIRIRef String IRIRef+getFQN :: IRIRef -> T.Text+getFQN (AbsoluteIRI (UNode n)) = n+getFQN (PrefixedName (Prefix _ (UNode n)) s) = T.append n s -- Should support numeric literals, too data GraphTerm = IRIRefTerm IRIRef- | RDFLiteralTerm RDFLiteral+ | RDFLiteralTerm LValue | NumericLiteralTerm Integer | BooleanLiteralTerm Bool @@ -427,7 +423,7 @@ | BuiltinCall Function [Expr] | VarOrTermExpr VarOrTerm -data Pattern = Triple VarOrTerm VarOrTerm VarOrTerm+data Pattern = QTriple VarOrTerm VarOrTerm VarOrTerm | Filter Expr | OptionalGraphPattern GroupGraphPattern | UnionGraphPattern GroupGraphPattern GroupGraphPattern@@ -450,7 +446,7 @@ , vars :: [Variable] , queryType :: QueryType , pattern :: GroupGraphPattern- , constructTriples :: [Pattern] -- Triple+ , constructTriples :: [Pattern] -- QTriple , askTriples :: [Pattern] , describeURI :: Maybe IRIRef , duplicates :: Duplicates@@ -484,24 +480,27 @@ qshow Distinct = "DISTINCT" qshow Reduced = "REDUCED" +instance QueryShow Node where+ qshow (UNode n) = "<" ++ T.unpack n ++ ">"+ instance QueryShow Prefix where- qshow (Prefix pre ref) = "PREFIX " ++ pre ++ ": " ++ qshow ref+ qshow (Prefix pre ref) = "PREFIX " ++ (T.unpack pre) ++ ": " ++ qshow ref instance QueryShow Variable where qshow (Variable v) = "?x" ++ show v instance QueryShow IRIRef where- qshow (IRIRef r) = "<" ++ r ++ ">"- qshow (PrefixedName (Prefix pre _) s) = pre ++ ":" ++ s+ qshow (AbsoluteIRI n) = qshow n+ qshow (PrefixedName (Prefix pre _) s) = (T.unpack pre) ++ ":" ++ (T.unpack s) instance QueryShow (Maybe IRIRef) where qshow (Just r) = qshow r qshow Nothing = "" -instance QueryShow RDFLiteral where- qshow (RDFLiteral s) = "\"" ++ escapeQuotes s ++ "\""- qshow (RDFLiteralLang s lang') = "\"" ++ escapeQuotes s ++ "\"@" ++ lang'- qshow (RDFLiteralIRIRef s ref) = "\"" ++ escapeQuotes s ++ "\"^^" ++ qshow ref+instance QueryShow LValue where+ qshow (PlainL s) = "\"" ++ (T.unpack $ escapeQuotes s) ++ "\""+ qshow (PlainLL s lang') = "\"" ++ (T.unpack $ escapeQuotes s) ++ "\"@" ++ (T.unpack lang')+ qshow (TypedL s ref) = "\"" ++ (T.unpack $ escapeQuotes s) ++ "\"^^" ++ (T.unpack ref) instance QueryShow GraphTerm where qshow (IRIRefTerm ref) = qshow ref@@ -550,13 +549,13 @@ qshow e = "(" ++ qshow' e ++ ")" where qshow' (OrExpr es) = intercalate " || " $ map qshow es qshow' (AndExpr es) = intercalate " && " $ map qshow es- qshow' (NegatedExpr e') = '!' : qshow e'+ qshow' (NegatedExpr e') = '!' : qshow e' qshow' (RelationalExpr rel e1 e2) = qshow e1 ++ qshow rel ++ qshow e2- qshow' (NumericExpr e') = qshow e'+ qshow' (NumericExpr e') = qshow e' qshow' (BuiltinCall f es) = qshow f ++ "(" ++ intercalate ", " (map qshow es) ++ ")" instance QueryShow Pattern where- qshow (Triple a b c) = qshow [a, b, c] ++ " ."+ qshow (QTriple a b c) = qshow [a, b, c] ++ " ." qshow (Filter e) = "FILTER " ++ qshow e ++ " ." qshow (OptionalGraphPattern p) = "OPTIONAL " ++ qshow p@@ -615,6 +614,5 @@ -- Internal utilities--escapeQuotes :: String -> String-escapeQuotes = replace "\"" "\\\""+escapeQuotes :: T.Text -> T.Text+escapeQuotes = T.replace "\"" "\\\""
hsparql.cabal view
@@ -1,6 +1,6 @@ Name: hsparql Homepage: https://github.com/robstewart57/hsparql-Version: 0.2.2+Version: 0.2.3 Synopsis: A SPARQL query generator and DSL, and a client to query a SPARQL server. Category: Database Description:@@ -32,7 +32,7 @@ , MissingH , network , text- extensions: RankNTypes FlexibleInstances+ extensions: RankNTypes FlexibleInstances OverloadedStrings test-suite test-hsparql type: exitcode-stdio-1.0