《语义网基础教程(原书第3版)》—— 3.3 过滤器
本节书摘来自华章出版社《语义网基础教程(原书第3版)》一 书中的第3章,第3.3节,作者:(希)Grigoris Antoniou(荷)Paul Groth(荷)Frank van Harmelen(荷)Rinke Hoekstra ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.3 过滤器
继续看公寓这个例子,让我们来找到所有拥有3间卧室的公寓。目前我们已经看到的例子中,在查询时只在图模式中使用过资源,还没使用过文字。事实上,文字可以直接包含在图模式中。这样的SPARQL查询如下:
注意,与Turtle类似,SPARQL也允许常见文字的缩写形式。在这个例子中,3是"3"^^xsd:integer的缩写表示。SPARQL和Turtle的各种语法缩写表示是一样的。
然而,这个查询有一点不自然。绝大多数情况下,我们想要找的是拥有大于或小于一个特定数量的卧室的那些公寓。我们可以使用SPARQL来问这个问题,并使用FILTER关键词:
结果是:
数值型数据类型(即整型数、小数)和日期/时间都支持小于、大于和等于运算。SPARQL也支持字符串的过滤。例如,假设我们的数据集包含如下三元组:
我们可能想要找所有在地址中包含"4 Baron Way"的资源。这可以使用SPARQL内置支持的正则表达式来实现。正则表达式是一种表述字符串搜索的有力方式。详细介绍正则表达式超出了本书的范畴,但作者鼓励读者去探索。用于找到字符串"4 Baron Way"出现在另一个字符串开头的正则表达式是"^4 Baron Way"。这可以如下表述:
这里,在FILTER关键词之后,引入了一个特殊的过滤函数名:regex。这个函数的参数在随后的括号中给出。SPARQL还包含一些其他类型的过滤器,在一些特定的场合中可能有用。然而,数值和字符串过滤器是最常使用的。最后一个常用的函数是str。它将资源和文字转换为可以在正则表达式中使用的字符串表示。例如,我们可以在资源的URL而不是标签中搜索Baron,如下所示:
过滤器为我们提供了一种获得灵活性的机制。SPARQL提供了更多的构造子来处理语义网上发现的往往是不一致的和不断变化的信息。