#gStore-weekly | gStore新版本0.9.1之Filter算术及逻辑运算

2022-04-20 00:00:00 示例 运算 年龄 姓名 算术

gStore内核版本v0.9.1中,新增了Filter语句中对算术及逻辑运算的支持,我们来详细介绍下如何运用在SPARQL查询中。


1.     示例数据

为了更好的演示Filter语句中对算术及逻辑运算的支持功能,使用以下的数据作为示例数据:

<Alice><姓名>"Alice" .
<Alice> <年龄>"24"^^<http://www.w3.org/2001/XMLSchema#integer> .
<Alice> <资产分>"30.2"^^<http://www.w3.org/2001/XMLSchema#float> .
<Alice> <行为分>"90.5"^^<http://www.w3.org/2001/XMLSchema#float> .
<Alice> <身份分>"98.0"^^<http://www.w3.org/2001/XMLSchema#float> .
<Alice> <申请次数>"0"^^<http://www.w3.org/2001/XMLSchema#integer> .
<Bob> <姓名> "Bob" .
<Bob> <年龄>"28"^^<http://www.w3.org/2001/XMLSchema#integer> .
<Bob> <资产分>"81.8"^^<http://www.w3.org/2001/XMLSchema#float> .
<Bob> <行为分> "60.5"^^<http://www.w3.org/2001/XMLSchema#float>.
<Bob> <身份分>"68.0"^^<http://www.w3.org/2001/XMLSchema#float> .
<Bob> <申请次数>"3"^^<http://www.w3.org/2001/XMLSchema#integer> .
<Eve> <姓名> "Eve" .
<Eve> <年龄>"20"^^<http://www.w3.org/2001/XMLSchema#integer> .
<Eve> <资产分> "10.0"^^<http://www.w3.org/2001/XMLSchema#float>.
<Eve> <行为分>"10.0"^^<http://www.w3.org/2001/XMLSchema#float> .
<Eve> <身份分>"60.0"^^<http://www.w3.org/2001/XMLSchema#float> .
<Eve> <申请次数>"5"^^<http://www.w3.org/2001/XMLSchema#integer> .
<Francis> <姓名> "Francis" .
<Francis> <年龄>"35"^^<http://www.w3.org/2001/XMLSchema#integer> .
<Francis> <资产分>"94.6"^^<http://www.w3.org/2001/XMLSchema#float> .
<Francis> <行为分>"10.0"^^<http://www.w3.org/2001/XMLSchema#float> .
<Francis> <身份分> "75.6"^^<http://www.w3.org/2001/XMLSchema#float>.
<Francis> <申请次数>"10"^^<http://www.w3.org/2001/XMLSchema#integer> .

2.     算术运算

算术运算即Filter语句中支持加、减、乘、除运算

示例:查询评估总分(资产分+行为分+身份分)小于100的用户姓名和年龄

SELECT?name ?age
WHERE
{
?person <姓名>?name .
?person <年龄>?age .
?person <资产分>?x .
?person <行为分>?y .
?person <身份分>?z .
FILTER(?x+?y+?z <"100"^^<http://www.w3.org/2001/XMLSchema#float>)
}

结果:根据示例数据,我们查询到的结果为Eve

{ 
"results": {
"bindings": [
{
"name": {
"type": "literal",
            "value""Eve" 
},
          "age": { 
"type": "typed-literal",
             "datatype""http://www.w3.org/2001/XMLSchema#integer"
"value": "20"
       } 
     } 
   ] 
 } 
}


3.     逻辑运算

逻辑运算即Filter语句中支持与(&&)或(||)运算

示例:查询年龄小于30,且申请次数小于5次的用户姓名和年龄

SELECT ?name ?age 
WHERE
{
?person <姓名>?name .
?person <年龄>?age .
?person <申请次数>?total .
FILTER(?age <"30"^^<http://www.w3.org/2001/XMLSchema#integer> &&?total < "5"^^<http://www.w3.org/2001/XMLSchema#integer>)
}

结果:根据示例数据,我们查询到的结果为Alice和Bob

{
"results": {
"bindings": [
     {
"name": {
"type":"literal",
          "value""Alice"
},
"age": {
"type":"typed-literal",
             "datatype":"http://www.w3.org/2001/XMLSchema#integer",
             "value":"24"
}
},
{
        "name": {
"type":"literal",
           "value""Bob"
},
"age": {
"type":"typed-literal",
"datatype":"http://www.w3.org/2001/XMLSchema#integer",
"value":"28"
}
}
]
}
}

以上仅为简单的查询示例,在实际业务场景中会有更多复杂的运算条件,我们通过Filter的算术及逻辑运算,进一步丰富了组图模式的范围过滤方式。

相关文章