可以全部通过称为链接数据结果(
linked data effect)的内容进行分发。此外,它允许拥有动
态模式,因为它拥有互相链接的面向对象的透视图,与严格的
SQL 关系透视图形成对照。
如果您想要把关系数据库表分隔为许多数据孤岛,则实际上使用的
SQL 代码行将比
SPARQL 多很多 — 更不必说 SQL 中会出现大量令人讨厌的 JOIN 描述符。
SPARQL 的前两行是 PREFIX 声明。根据语义 Web 理论,一切内容 — 无论是对象还是数据
图 来 源 ( 也 是 一 个 对 象 )
— 都 有 统 一 资 源 标 识 符 ( Uniform Resource
Identifier,URI)。PREFIX 行只是将临时标签应用到一些 URI 中 — 在本例中为 Friend of a
Friend 和 RDF 模式。其中的好处是您以后可以在查询中使用 PREFIX 声明而不必使用完整
的
URI。
SPARQL 代码的下一行描述了查询请求。这条语句在本质上与 SQL 语句相同,不同之处是
对
URI 的附加请求。注意问号的使用(?)是为了表示术语是变量。
FROM 语句描述了获取数据的位置。这在 SQL 和 SPARQL 中是相同的,只是在 SPARQL 中,
数据源名称是
URI,而非表示计算机或网络中某个物理位置的字符串。
两者的
WHERE 语句完全不同,因为使用 SPARQL,必须指定用于获取数据的模式。同样,
如果尝试过使用关系方法执行此操作,则需要花费的代价比普通
SQL 多得多:需要使用
PHP、
?编程语言或者一些其他服务器端语言才能执行数据源之间的检查。SPARQL 代码
行完成的操作比较明了,这包括确保正在检索的数据只属于
Person 类型。SPARQL 将获取
名称和位置,同时执行一些模式匹配以查找正确的
John Smith。
创建
SPARQL 中的 CRUD 操作通常比 read 操作更神秘。但是,可以完成这些操作。首先,create
操作将把新记录或对象插入到表或图表中。
INSERT INTO UserTable (realname, dob, location) VALUES ("John Smith", "1985-01-01",
"Bristol, UK");
现在,比较清单
3 中基于 SQL 的代码与清单 4 中基于 SPARQL 的代码中的 create 操作。
PREFIX foaf:<
http://www.w3.org/1999/02/22-rdf-
INTO GRAPH <
> (?realname, ?dob, ?
location) {<
http://www.example.org/graph/johnsmith#me
> rdf:Type foaf:Person ; foaf:name
"John Smith" ; foaf:birthday <1985-01-01T00:00:00> ; foaf:location "Bristol, UK" }