Sparql查询语言学习(二)之Filter函数,空白节点与三重模式

2019-07-30   82 次阅读


FILTER函数

个人理解:当FILTER括号中的表达式为true时匹配,否则不匹配(相当于只有满足FILTER括号中的内容才能匹配)
regex

  • 用来测试RDF文字,仅匹配没有语言标签(见上一篇博文中的language tag)的普通文字,regex可以使用str函数来匹配其他文字的词法形式
    example:
    FILTER regex("title,"^SPARQL")
    正则表达式匹配可以使用"i"标志(不区分大小写)
    example:
    FILTER regex(?title,"web","i")

  • 用来匹配数值相关的表达式
    example:
    如果要匹配的内容的类型是数字,可以有以下表达式
    FILTER(?price < 23.4)
    结果只会匹配那些价格低于23.4的内容

除了数字类型(numeric types),SPARQL还支持xsd:string,xsd:boolean,xsd:dateTime类型

Sparql语法

变量

查询语句中的变量以$或者?开头,这两个符号并不是变量的一部分,而是用来表示这是一个变量,在查询中,$abc?abc标识相同的变量

空节点

空白节点由标签形式表示,例如_:abc与缩写形式[]
在查询语法中,仅在唯一一个位置使用的可以被视作[]
相同的空白节点标签不能在同一查询中的两个不同的基本图形模式中使用
example:
两种形式 [: p"v"].[]: p"v". 分配了唯一一个空白节点标签
假设分配的节点标签是b57,那就相当于这样:
_: b57: p"v".
该分配的空白节点可以作为其他三重模式的主体或对象,作为主题
[: p"v"]: q"w".
相当于两个三元组 _: b57: p"v"._: b57: q"w".
作为对象
: x: q [: p"v"].
相当于两个三元组: x: q_: b57._: b57: p"v"

三重模式的写法

可以编写具有共同主题的三重模式,使得目标变量只用声明一次可以运用到多个三重模式,使用;来分隔
example:

?x foaf:name ?name ;
   foaf:mbox ?mbox.

等同于

?x foaf:name ?name .
?x foaf:mbox ?mbox .

如果三重模式享有多个项目变量或谓语,之间,分隔
example:
?x foaf:name ?name ; foaf:nick "Alice", "Alice_" .
等同于

 ?x  foaf:name  ?name .
 ?x  foaf:nick  "Alice" .
 ?x  foaf:nick  "Alice_" .  
 

End at 5 Graph Patterns,to be continued...

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议