全程官方文档英文阅读理解。。 (有部分谷歌翻译辅助,不过大部分还是阅读理解,因为谷歌翻译的虽然很好,但是有些也会脱离本意)
标题写着 "SPARQL Query Language for RDF"
想必也是针对RDF设计的一种查询语言了

SPARQL官方文档地址

大多数形式的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.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议