查看查询结果戳DBPedia sparql endpoint
PREFIX
定义如下:
PREFIX prop: <http://dbpedia.org/property/>
PREFIX ont: <http://dbpedia.org/ontology/>
PREFIX res: <http://dbpedia.org/resource/>
查询所有谓词
SELECT DISTINCT ?p
WHERE {
?s ?p ?o. #WHERE中只有一句条件的时候.可省略
}
一个类似的需求是查询所有属性
SELECT COUNT DISTINCT ?prop
WHERE {
?prop a rdf:Property #a是rdf:type的简写
}
ORDER BY ?prop #可选,只是为了展示ORDER BY的语法
查询一个类的所有子类
select ?p { #WHERE在sparql中可省略
?p rdfs:subClassOf* ont:Person . #加*表示此步操作需要迭代进行,不仅查找Person的子类还查找子类的子类;去掉*则只查找Person的子类
}
类似的查询一个类的所有超类
select ?p {
ont:Actor rdfs:subClassOf* ?p .
}
类似的语法还可以用于查询一个属性的子属性
select ?p {
?p rdfs:subPropoertyOf* prop:height .
}
列出一个类的所有属性
select distinct ?property where {
?property rdfs:domain ont:Actor.
}
子查询(列出所有有生卒年份记载的声优的相关事实)
SELECT DISTINCT ?birth ?death ?actor ?p ?o
WHERE{
?actor ?p ?o.
{
SELECT DISTINCT ?actor ?birth ?death
WHERE {
?actor rdf:type ont:VoiceActor .
?actor prop:birthDate ?birth.
?actor prop:deathDate ?death.
}
}
}
使用FILTER正则匹配
SELECT DISTINCT ?p
WHERE {
?p a rdf:Property.
?s ?p ?o.
FILTER (REGEX(str(?p), "date", "i")) # "i"代表大小写不敏感,匹配?p中出现date
}
显示所有的named graph
SELECT DISTINCT ?g {
GRAPH ?g {}
}
MINUS只显示一些有用的predicate
select *
{
{
term: ?p ?o.
MINUS {term: owl:sameAs ?o}
MINUS {term: rdf:type ?o}
MINUS {term: rdfs:label ?o}
MINUS {term: rdfs:comment ?o}
MINUS {term: ont:abstract ?o}
MINUS {term: dct:subject ?o}
}
UNION
{
?s ?p term:
MINUS {?s ont:wikiPageRedirects term:}
}
}
聚合语句的写法(显示配偶信息大于1条的演员)
SELECT ?s, (COUNT(?s) AS ?cnt)
{
?s a ont:Actor.
?s prop:spouse ?o.
FILTER(isLiteral(?o))
}
GROUP BY ?s
HAVING (COUNT(?s) > 1)
使用VALUES关键词一次给一个变量赋多个值(返回wikidata对应的dbpedia实体的信息)
PREFIX wd: <http://www.wikidata.org/entity/>
select DISTINCT * {
VALUES ?x {wd:Q309486 wd:Q4653 wd:Q76}
?s owl:sameAs ?x .
?s ?p ?o .
FILTER(STRSTARTS(STR(?p), "http://dbpedia.org/") )
}
网友评论