background image

可以全部通过称为链接数据结果(

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

java

?编程语言或者一些其他服务器端语言才能执行数据源之间的检查。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://xmlns.com/foaf/0.1/

>  PREFIX  rdf:  <

http://www.w3.org/1999/02/22-rdf-

syntax-ns#>INSERT

  INTO  GRAPH  <

http://www.example.com/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" }