SPARQL现状及扩展思考
SPARQL Query Language for RDF(2006.10)和SPARQL 1.1 Query Language(2012.07)所含内容对比图:
SPARQL Query Language for RDF(2006.10)和SPARQL 1.1 Query Language(2012.07)所含内容对比图:
聚合函数 在SPARQL 1.1 Query Language中,SPARQL查 询语言新增了聚合函数功能,包括了常用的数学聚 合函数COUNT,SUM,MIN,MAX和AVG等,例 如: SELECT (SUM(?price) AS ?totalPrice) WHERE{……}。
GROUP BY和HAVING GROUP BY ?x表示按照?x进行分组。 HAVING ( SUM (?pirce)>10 )表示选择价格总和大 于10的数据。 需要注意的是,GROUP BY和HAVING函数并不属 于条件子句where{}中,它们通常写在where{}之后。
联合查询 基于图模式的联合查询,表示至少有一个图模式是 匹配的,如果超过一个以上的图模式能够匹配,那 么所有可能的结果都会被找到。 SELECT ?title ?author WHERE { { ?book dc10:title ?title . ?book dc10:creator ?author } UNION { ?book dc11:title ?title . ?book dc11:creator ?author } } 基于图模式的联合查询,表示至少有一个图模式是 匹配的,如果超过一个以上的图模式能够匹配,那 么所有可能的结果都会被找到。
子查询 在某些复杂的SPARQL查询语句中,会出现子查询,与 SQL一样,子查询即在where{}中嵌套另一个完整的查 询语句,例如: SELECT ?X,?Y WHERE { ?X …… SELECT ?Y WHERE{ ?Y …… }
否定语句——FILTER否定 FILTER NOT EXISTS { ?person foaf:name ?name } 表示查找不满足图模式的数据。
否定语句——MINUS否定 判断MINUS左边的图模式数据集与右边的图模式是 否匹配,如果与否定条件匹配,则过滤此结果。如: WHERE { ?s ?p ?o . MINUS { ?s foaf:givenName "Bob" } } 表示在满足{?s ?p ?o}条件的三元组中,过滤掉满足 {?S foaf:givenName “Bob”}条件的三元组。
否定语句——两种形式的区别 FILTER否定与它所在的位置无关,它只是检测一个 图模式是否存在于结果数据集中;MINUS将左右两 边的图模式进行评估,在左边的图模式中移除右边 图模式的数据集。 也就是说FILTER相当于查询结果的全局过滤,而 MINUS只是查询结果的局部过滤。
OPTIONAL OPTIONAL{}表示,括号中的图模式是可选的,不 是必须要满足匹配的条件。 如:OPTIONAL { ?x foaf:mbox ?mbox } OPTIONAL{}图模式里面可使用FILTER。 WHERE { ?x dc:title ?title OPTIONAL { ?x ns:price ?price . FILTER (?price < 30) } }
图模式 图模式大致可以分为Basic Graph Patterns和 Group Graph Patterns。 Group Graph Patterns是由一系列Basic Graph Patterns构成的,用{}来表示空的Group Graph Patterns。
图模式 例1: PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?mbox WHERE { ?x foaf:name ?name . ?x foaf:mbox ?mbox . } 这个查询是一个Group Graph Patterns,它包含 一个Basic Graph Patterns。
图模式 例2: PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?mbox WHERE { { ?x foaf:name ?name . } { ?x foaf:mbox ?mbox . } } 这个例子中,同样是一个Group Graph Patterns,却 被{}划分成了两个Basic Graph Patterns 将两个查询相比较,虽然两个查询的结构不一样,但是 其查询结果依然不变。
图模式 { ?x foaf:name ?name FILTER regex(?name, "Smith") { ?x foaf:name ?name FILTER regex(?name, "Smith") ?x foaf:mbox ?mbox . } FILTER并不会将此图模式拆分。 {} 上述语句描述了,两个只含有单独三元组的基本图模式,和一个 空的图模式。
SPARQL 1.1 Update SPARQL 1.1 Update(2012.07.05)中定义的 RDF图的更新语言,它的语法从SPARQL Query Language for RDF文档中衍化而来,包含了 SPARQL的INSERT,DELETE,UPDATE操作和对RDF 图的创建、更新、删除。
Graph Update—INSERT DATA 语法:INSERT DATA { GRAPH <g> {} } …… PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX ns: <http://example.org/ns#> INSERT DATA { GRAPH <http://example/bookStore> { <http://example/book1> ns:price 42 } } 如果只是在默认图中添加三元组,那么直接使用INSERT DATA { 主 语 谓语 宾语} 的形式;如果要在某命名图中添加三元组,那么我们 需要用图的IRI来指定目标图。
Graph Update—DELETE DATA 语法:DELETE DATA { GRAPH <g> {} } …… PREFIX dc: http://purl.org/dc/elements/1.1/ DELETE DATA { <http://example/book2> dc:title "David Copperfield" dc:creator "Edmund Wells" . }
Graph Update—INSERT/DELETE DATA 通过结合delete data和insert data,来达到更新 的目的。 原理是:使用delete data将需要更改的三元组删除, 然后用insert data插入新的三元组,这样就达到了 更新的目的。
Graph Update—INSERT/DELETE DATA PREFIX foaf: <http://xmlns.com/foaf/0.1/> WITH <http://example/addresses> DELETE { ?person foaf:givenName 'Bill' } INSERT { ?person foaf:givenName 'William' } WHERE { ?person foaf:givenName 'Bill' } 这个实例首先将givenName为Bill的三元组删除, 然后插入新的givenName为William的三元组,从 而实现了将所有givenName为Bill更新为William的 目的。
Graph Management——CREAT/DROP CREATE ( SILENT )? GRAPH IRIref DROP ( SILENT )? (GRAPH IRIref | DEFAULT | NAMED | ALL )
Graph Management——COPY,MOVE,ADD COPY/MOVE/ADD DEFAULT TO http://example.org/named COPY:copy操作会将目标图的数据全部覆盖掉, 源图中的数据保持不变。 MOVE:目标图会被源图的数据覆盖,源图中数据 会全部丢失。 ADD:add操作不会使任何图丢失它本身的信息, 只是在目标图中添加它没有的信息,相当于给两个 图做了一个并集操作。
SPARQL扩展思考 SPARQL语言本身并没有关于用户和用户组的定义 及相关内容。在关系数据库系统中,为了便于数据 库系统的安全管理,其对应的数据操作语言(如 SQL语言)都有关于用户和角色的定义说明。 随着语义Web的高速发展,必然也会对SPARQL语 言提出更高的要求,所以我们有必要提出SPARQL 语言的用户、角色的定义和管理。
用户和用户组 用户主要分为管理员和普通用户,管理员具有最高 操作权限,而普通用户需要在创建后对其进行授权, 方能获得相关权限。 用户组在创建后可对其权限进行初始化,可将某用 户组授权给某用户,此用户将会得到用户组的所有 权限。
图的创建 图可以被任何人创建,但是删除某张图只能由管理 员或图的创建者进行操作。 在图上的select、insert、delete、update权限可 以授权给某个用户或者某用户组。
图的创建——权限初始化 CREAT GRAPH IRIref (for public/private) “for public”表示此图是一个开放图,会将在图 上的select权限自动授予所有用户; “for private”表示创建了一个私有图,只有图的 创建者和管理员才有对于此图的操作权限。
图,用户,用户组授权关系
END