文章目录
1. 简介
SPARQL(SPARQL Protocol and RDF Query Language),是为RDF开发的一种查询语言和数据获取协议。
对于从数据库读取数据的查询,SPARQL语言为不同目的指定了四种不同的查询变体。
-
SELECT查询:用于从SPARQL端点提取原始值,结果以表格格式返回。
-
CONSTRUCT查询:用于从SPARQL端点提取信息并将结果转换为有效的RDF。
-
ASK查询:用于为SPARQL端点上的查询提供简单的True / False结果。
-
DESCRIBE查询:用于从SPARQL端点提取RDF图,其内容留给端点根据维护者认为有用的信息来决定。
这些查询表单中的每一个都使用WHERE块来限制查询,但是,在DESCRIBE查询的情况下,WHERE是可选的。
2. 语法
2.1 Simple example
SPARQL中:
-
变量的前缀是
?
-
用类似N3的语法表达三元组
-
查询返回一个变量的绑定结果集
_:a foaf:name “Johnny Lee Outlaw” .
_:a foaf:mbox <mailto:jlow@example.com> .
_:b foaf:name “Peter Goodguy” .
_:b foaf:mbox <mailto:peter@example.org> .
_:c foaf:mbox <mailto:carol@example.org> .
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?mbox
WHERE {
?x foaf:name ?name .
?x foaf:mbox ?mbox .
}
?name | ?mbox |
---|---|
“Johnny Lee Outlaw” | mailto:jlow@example.com |
“Peter Goodguy” | mailto:peter@example.org |
2.2 约束条件
SPARQL中,限制条件可以应用于变量。
SELECT ?title
WHERE {
?x dc:title ?title .
FILTER regex(?title, "^SPARQL")
}
SELECT ?title ?price
WHERE {
?x ns:price ?price .
FILTER (?price < 30.5)
?x dc:title ?title .
}
2.3 Group Graph Patterns
Group Graph Patterns是用{ }括起来的一组模式,决定了FILTER操作符(和其他操作符)的作用范围。
2.3.1 Optional Graph Patterns
OPTIONAL允许我们说明,为了产生绑定,不需要匹配Group Graph Patterns。
_:a rdf:type foaf:Person .
_:a foaf:name “Alice” .
_:a foaf:mbox <mailto:alice@example.com> .
_:a foaf:mbox <mailto:alice@work.example.com> .
_:b rdf:type foaf:Person .
_:b foaf:name “Bob” .
SELECT ?name ?mbox
WHERE {
?x foaf:name ?name .
OPTIONAL {
?x foaf:mbox ?mbox .
}
}
?name | ?mbox |
---|---|
“Alice” | mailto:alice@example.com |
“Alice” | mailto:alice@work.example.com |
“Bob” |
2.3.2 Union Graph Patterns
UNION有效地给我们提供了一个二择一的查询:要么匹配这个,要么匹配那个。