module Database.HaSparqlClient.Values(
languageValue, datatypeValue, uriValue, literalValue, bnodeValue, value,
showsparql) where
import Database.HaSparqlClient.Types
class ShowQuery a where
showsparql :: a -> String
instance ShowQuery BindingValue where
showsparql (URI uri) = "<uri>" ++ uri ++ "</uri>"
showsparql (Literal str) = "<literal>"++ str ++ "</literal>"
showsparql (TypedLiteral str tp) = "<literal datatype=\"" ++ tp ++ "\">" ++ str ++ "</literal>"
showsparql (BNode str) = "<bnode>" ++ str ++ "</bnode>"
showsparql (LangLiteral str lan) = "<literal xml:lang=\"" ++ lan ++ "\">" ++ str ++ "</literal>"
showsparql _ = ""
languageValue :: BindingValue -> Maybe String
languageValue (LangLiteral str lan) = Just lan
languageValue _ = Nothing
datatypeValue :: BindingValue -> Maybe String
datatypeValue (TypedLiteral str tp) = Just tp
datatypeValue _ = Nothing
uriValue :: BindingValue -> Maybe String
uriValue (URI str) = Just str
uriValue _ = Nothing
literalValue :: BindingValue -> Maybe String
literalValue (Literal str) = Just str
literalValue (TypedLiteral str tp) = Just str
literalValue (LangLiteral str lan) = Just str
literalValue _ = Nothing
bnodeValue :: BindingValue -> Maybe String
bnodeValue (BNode bno) = Just bno
bnodeValue _ = Nothing
value :: BindingValue -> Maybe String
value res = case (uriValue res) of
Nothing -> case (literalValue res) of
Nothing -> case (bnodeValue res) of
Nothing -> Nothing
Just bno -> Just bno
Just lit -> Just lit
Just uri -> Just uri