全程官方文档英文阅读理解。。 (有部分谷歌翻译辅助,不过大部分还是阅读理解,因为谷歌翻译的虽然很好,但是有些也会脱离本意)
标题写着 "SPARQL Query Language for RDF"
想必也是针对RDF设计的一种查询语言了
大多数形式的SPARQL查询包含一组成为基本图形模式的三重模式(triple patterns
编写一条简单的查询语言
Data:
<http://example.org/book/book1> <http://purl.org/dc/elements/1.1/title> "SPARQL Tutorial" .
查询语句:
SELECT ?title
WHERE
{
<http://example.org/book/book1> <http://purl.org/dc/elements/1.1/title> ?title .
}
语句由两部分组成,一个是SELECT
部分,标识要在查询结果中进行显示的变量(在查询结果中将以第一行的形式出现),也就是说 ?title
是一个变量
另外一个是WHERE
部分,提供与数据图表匹配的基本图形模式(basic grapg pattern)
多个匹配
根据WHERE
部分的基本图形部分,匹配的结果可能是0个,1个或者多个
匹配RDF文本(literals)
在Turtle中
以下RDF文本
"cat"@en
意味着有着 词汇形式(lexical form):"cat"
以及语言(language):"en" (语言标签language tags)
以下RDF文本
"42"^^xsd:integer"
是一个http://www.w3.org/2001/XMLSchema#integer;
类型的文本
以下RDF文本
"abc"^^dt:specialDatatype"
是一个http://example.org/datatype#specialDatatype.
类型的文本
-
根据语言标签匹配文本
若要匹配"cat"@en
,执行下列查询语句将没有结果
SELECT ?v WHERE {?v ?p "cat"}
因为"cat"和"cat"@en在RDF文本层面并不相同,因此无法匹配
为此有另外一种解决方案
`SELECT ?v WHERE {?v ?p "cat"@en}
也就是将语言标签也添加上去进行匹配,即可获得结果 -
使用数字类型来匹配文本
匹配"42"^^xsd:integer"
可使用以下查询语句
SELECT ?v WHERE {?v ?p 42}
-
匹配具有任意数字类型的文本
SELECT ?v WHERE{?v ?p "abc"^^<http://example.org/datatype#specialDatatype>}
词法形式和数据类型都匹配,不管数据类型是什么(任意数据类型),都可以匹配成功
查询结果中可包含空白节点, 空白节点标签的范围限定为结果集
SPARQL具有多种查询形式
有SELECT
查询形式,返回变量绑定
也有CONSTRUUCT
查询形式,返回RDF图
----CONSTRUCT查询形式----
data:
@prefix org: <http://example.com/ns#> .
_:a org:employeeName "Alice" .
_:a org:employeeId 12345 .
_:b org:employeeName "Bob" .
_:b org:employeeId 67890 .
查询语句:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX org: <http://example.com/ns#>
CONSTRUCT { ?x foaf:name ?name }
WHERE { ?x org:employeeName ?name }
result:
@prefix org: <http://example.com/ns#> .
_:x foaf:name "Alice" .
_:y foaf:name "Bob" .
** ORDER BY 关键字**
该ORDER BY
字句之后是一系列顺序比较器,有表达式和可选的顺序修饰符组成,每个排序比较器是升序(由ASC()
修饰),降序(由DESC()
修饰)
SPARQL未定义所有可能的RDF术语的总排序
example:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE { ?x foaf:name ?name }
ORDER BY ?name
Q.E.D.
Comments | 0 条评论