hsparql-0.3.7: tests/DBPedia.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module DBPedia where
import Data.RDF hiding (Query, triple)
import Data.Text
import Database.HSparql.Connection
import Database.HSparql.QueryGenerator
selectExample :: IO ()
selectExample = do
(Just s) <- selectQuery "http://dbpedia.org/sparql" simpleSelect
print s
selectWithLiteralExample :: IO ()
selectWithLiteralExample = do
(Just s) <- selectQuery "http://dbpedia.org/sparql" simpleSelectWithLiteral
putStrLn . show $ s
askExample :: IO ()
askExample = do
res <- askQuery "http://dbpedia.org/sparql" simpleAsk
putStrLn $ "result: " ++ show (res :: Bool)
describeExample :: IO ()
describeExample = do
(rdfGraph :: RDF TList) <- describeQuery "http://dbpedia.org/sparql" simpleDescribe
mapM_ print (triplesOf rdfGraph)
constructExample :: IO ()
constructExample = do
(rdfGraph :: RDF TList) <- constructQuery "http://dbpedia.org/sparql" simpleConstruct
mapM_ print (triplesOf rdfGraph)
simpleSelect :: Query SelectQuery
simpleSelect = do
resource <- prefix "dbprop" (iriRef "http://dbpedia.org/resource/")
dbpprop <- prefix "dbpedia" (iriRef "http://dbpedia.org/property/")
foaf <- prefix "foaf" (iriRef "http://xmlns.com/foaf/0.1/")
x <- var
name <- var
triple x (dbpprop .:. "genre") (resource .:. "Web_browser")
triple x (foaf .:. "name") name
selectVars [name]
simpleSelectWithLiteral :: Query SelectQuery
simpleSelectWithLiteral = do
ontology <- prefix "dbpedia" (iriRef "http://dbpedia.org/ontology/")
rdf <- prefix "rdf" (iriRef "http://www.w3.org/1999/02/22-rdf-syntax-ns#")
rdfs <- prefix "rdfs" (iriRef "http://www.w3.org/2000/01/rdf-schema#")
l <- var
triple l (rdf .:. "type") (ontology .:. "ProgrammingLanguage")
triple l (rdfs .:. "label") (("D (programming language)", "en") :: (Text, Text))
selectVars [l]
simpleConstruct :: Query ConstructQuery
simpleConstruct = do
resource <- prefix "dbpedia" (iriRef "http://dbpedia.org/resource/")
dbpprop <- prefix "dbprop" (iriRef "http://dbpedia.org/property/")
foaf <- prefix "foaf" (iriRef "http://xmlns.com/foaf/0.1/")
example <- prefix "example" (iriRef "http://www.example.com/")
x <- var
name <- var
construct <- constructTriple x (example .:. "hasName") name
triple x (dbpprop .:. "genre") (resource .:. "Web_browser")
triple x (foaf .:. "name") name
return ConstructQuery {queryConstructs = [construct]}
simpleAsk :: Query AskQuery
simpleAsk = do
resource <- prefix "dbpedia" (iriRef "http://dbpedia.org/resource/")
dbprop <- prefix "dbprop" (iriRef "http://dbpedia.org/property/")
x <- var
ask <- askTriple x (dbprop .:. "genre") (resource .:. "Web_browser")
return AskQuery {queryAsk = [ask]}
simpleDescribe :: Query DescribeQuery
simpleDescribe = do
resource <- prefix "dbpedia" (iriRef "http://dbpedia.org/resource/")
uri <- describeIRI (resource .:. "Edinburgh")
return DescribeQuery {queryDescribe = uri}
trickySelect :: Query SelectQuery
trickySelect = do
resource <- prefix "dbpedia" (iriRef "http://dbpedia.org/resource/")
dbpprop <- prefix "dbprop" (iriRef "http://dbpedia.org/property/")
foaf <- prefix "foaf" (iriRef "http://xmlns.com/foaf/0.1/")
owl <- prefix "owl" (iriRef "http://www.w3.org/2002/07/owl#")
x <- var
name <- var
fbase <- var
-- Identify
triple x (dbpprop .:. "genre") (resource .:. "Web_browser")
-- Query
triple x (foaf .:. "name") name
optional $ do
triple x (owl .:. "sameAs") fbase
filterExpr $ regex fbase ("freebase" :: Text)
filterExpr $ notExpr $ bound fbase
distinct
orderNext name
orderNextDesc fbase
selectVars [x, name, fbase]
frenchFilmsSelect :: Query SelectQuery
frenchFilmsSelect = do
skos <- prefix "skos" (iriRef "http://www.w3.org/2004/02/skos/core#")
film <- var
triple film (skos .:. "subject") (iriRef "http://dbpedia.org/resource/Category:French_films")
selectVars [film]
-- return SelectQuery {queryExpr = [film]}
fpsSelect :: Query SelectQuery
fpsSelect = do
property <- var
hasValue <- var
isValueOf <- var
union
(triple (iriRef "http://dbpedia.org/resource/Category:First-person_shooters") property hasValue)
(triple isValueOf property (iriRef "http://dbpedia.org/resource/Category:First-person_shooters"))
selectVars [isValueOf]
berlinersSelect :: Query SelectQuery
berlinersSelect = do
xsd <- prefix "xsd" (iriRef "http://www.w3.org/2001/XMLSchema#")
prop <- prefix "prop" (iriRef "http://dbpedia.org/property/")
dbo <- prefix "dbo" (iriRef "http://dbpedia.org/ontology/")
foaf <- prefix "foaf" (iriRef "http://xmlns.com/foaf/0.1/")
resc <- prefix "resc" (iriRef "http://dbpedia.org/resource/")
name <- var
birth <- var
death <- var
person <- var
knownfor <- var
triple person (prop .:. "birthPlace") (resc .:. "Berlin")
triple person (dbo .:. "birthDate") birth
triple person (foaf .:. "name") name
triple person (dbo .:. "deathDate") death
filterExpr $ birth .<. ("1900-01-01" :: Text, xsd .:. "date")
optional $ triple person (prop .:. "KnownFor") knownfor
selectVars [name, birth, death, person, knownfor]