SPARQL查询实例(二)

GROUP BY 与HAVING的用法。

GROUP BY可以通过根据一个或多个表达式对查询的解决方案进行分组;

HAVING必须要配套GOURP BY来使用(在与GROUP BY中类似FILETER的作用)进行过滤。

下面一个例子将展示有若干本书,每本书都有作者,链接域名,和每本书的价格。我们通过GROUP BY以域名的方式进行分组,并计算每组下面的总价格

SPARQL查询实例(二)_第1张图片

SPARQL查询实例(二)_第2张图片

再举一个例子如果想对数据集中( {?x→2, ?y→3}, {?x→2, ?y→5}, {?x→6, ?y→7} )我们对x相同值得进行分组,并求出每组得y的平均值,我们可以采用以下方式:

SPARQL查询实例(二)_第3张图片

/**********************************************************************************************************************

                                                                SPARQL中嵌套的子查询 

子查询是在其他查询中内嵌SPARQL查询的一种方式,通常用于实现无法实现的结果,例如在限制的查询结果中查询出某些子图的信息。

*********************************************************************************************************************/

先看例子:

SPARQL查询实例(二)_第4张图片

结果:

SPARQL查询实例(二)_第5张图片

-----------------------------直接看结果不太明显。我们先看其中子查询语句的查询结果:-------------------------

SPARQL查询实例(二)_第6张图片

SPARQL查询实例(二)_第7张图片

通过子查询结果和最终查询结果可以看出,我们先通过子查询语句找到每个主语的最后的宾语。在输入每个主语对应的minNAME后,我们在子查询结果上,找到alice所认识的人名,当然输出的人名是我们子查询结果中minNAME的值

/***************************************************************************************************************

 SPARQL查询可以通过使用FROM子句和FROM NAMED子句来描述RDF数据集来指定要用于匹配的数据集。如果查询语句中提供了这样的数据集描述,那么如果查询没有提供数据集描述的情况下,它将用于替代查询服务而使用的任何数据集。 RDF数据集也可以在SPARQL协议请求中指定,在这种情况下,协议描述将覆盖查询本身中的任何描述。如果数据集描述不被服务接受,查询服务可以拒绝查询请求。

**************************************************************************************************************/

这是自己制定的数据集

SPARQL查询实例(二)_第8张图片

直接可以在sparql中通过from标签去指定我们数据集的描述

SPARQL查询实例(二)_第9张图片

输出结果


--------------------------------------如果一个查询语句中提供了多个FROM子句,并提供多个URI资源

来指定默认查询图,那么查询的资源就是这个FROM子句中所有资源的合并-------------------------

SPARQL查询实例(二)_第10张图片

/*************************************************************************************************************************

                                                FROM子句中的资源a.ttl如果调用其他URI(a_1.ttl) 那么可以通过FROM NAMED来实现

                                                                  对a_1.ttl中数据集的访问

***********************************************************************************************************************/

例子:FROM的数据集

SPARQL查询实例(二)_第11张图片

上面的数据集内置两个数据集,我们通过FROM NAME来描述

SPARQL查询实例(二)_第12张图片

注意FROM 和FROM NAMED

SPARQL查询实例(二)_第13张图片

本例中 通过FROM NAMED 来实现获取dtf.ttl中关联的两个数据集alice和bob

/*************************************************************************************************************

                数据集中GRAPH关键字用于指定图模型。GRAPH后面可以接URI或者一个变量,用变量的话

变量覆盖查询的RDF数据集中所有命名的URI(相当于给URI打了一个标签)。GRAPH的使用会改变部分查询的图模式,

在不适用GRAPH关键字的情况下,也可以使用默认图形进行匹配。

************************************************************************************************************/

看两个例子:

SPARQL查询实例(二)_第14张图片

SPARQL查询实例(二)_第15张图片

-------------下面的查询方式就是将图模式与数据集中的图模型加以匹配,用于输出能够与图模型绑定的URI------------

SPARQL查询实例(二)_第16张图片

这里 GRAPH后接着就是 变量,变量用于代替其图的URI,在图中找到email值是[email protected]的人

SPARQL查询实例(二)_第17张图片

--------------------------通过提供相应的URI值来实现GRAPH对于特定图模式的匹配---------------

还是同样的数据集,在查询中,我们这样定义:

SPARQL查询实例(二)_第18张图片

这样我们只查询URI路径中式bobFoaf的数据

输出:


--------------------------------再举一个难一点的例子,我们将GRAPH子句中使用的变量

也可以用在另一个GRAPH子句中用于两个图模式中数据的匹配来进行查询---------------------------

SPARQL查询实例(二)_第19张图片

我们通过GRAPH第一个子句第一行确定邮箱为alice的主语_a,并找到该主语认识的两个人Bob和Bobby他们的主语是_b

通过_b的mbox标签,我们确定mbox为

mailto:[email protected]

在通过ppd,我们找到下一个GRAPH所查询的URI为

http://example.org/foaf/bobFoaf

因为我们在上一行的uri图中找到mbox为mailto:[email protected]的主语的相关信息


通过一个GRAPH的变量作为另一个GRAPH的变量来使用,达到了第二个GRAPH子句中的模式找到与在第一个GRAPH子句(变量who)具有相同邮箱的人(由变量mbox给定)。

--------------------------------------下面的GRAPH 中src变量就匹配了所有图-----------------------------

SPARQL查询实例(二)_第20张图片

SPARQL查询实例(二)_第21张图片

-----------------在下面的例子中展示出RDF数据集由两个命名图表和关于它们的信息组成---------------

SPARQL查询实例(二)_第22张图片

SPARQL查询实例(二)_第23张图片

在查询中保证GRAPH的?name与外面的?name匹配 所以查询结果为:

SPARQL查询实例(二)_第24张图片

/************************************************************************************************************

                                    一些关于常量的术语示例

**************************************************************************************************************/

“a”一个简单文字                          “a”@en_gb带有语言标签的文字(英文)

"1"^^xsd:integer 一个支持整型数据类型的文字

"1"^^my:integer  一个不支持整形数据类型的文字

/*************************************************************************************************************

                           CONSTRUCT关键字用于定义查询形式,使得返回得结果是一个指定得RDF图

************************************************************************************************************/

SPARQL查询实例(二)_第25张图片

在SPARQL中加入CONSTRUCT关键字用于 指定范围得格式形式

SPARQL查询实例(二)_第26张图片

返回得结果跟上面红框是一样得,只是因为用了vacard谓语标签,所以需要引入相应得URI

------------------------------另外一种指定格式的例子-------------------------------------

SPARQL查询实例(二)_第27张图片

/************************************************************************************************************

       ASK关键字用于来测试查询模式是否有解决方案,返回的结果没有解决方案的信息,只有是否存在两个结果

**************************************************************************************************************/

SPARQL查询实例(二)_第28张图片

同样的数据集 返回不存在的结果

SPARQL查询实例(二)_第29张图片

/**************************************************************************************************************

        DESCRIBE关键字用于返回关于目标资源的单个结果的RDF图。这个返回数据格式不是由RDF查询

        规定的,查询客户端需要知道数据源中RDF的结构,然后由SPARQL查询处理器决定,其查询的结果

        可以用于创建结果集,

*************************************************************************************************************/


查询 employees资源中 ID为1234的单RDF图

可能会返回该员工的一些描述以及其他一些有用的详细信息:

SPARQL查询实例(二)_第30张图片


你可能感兴趣的:(SPARQL查询实例(二))