Page 167 - 《软件学报》2026年第3期
P. 167

1130                                                       软件学报  2026  年第  37  卷第  3  期



                                          确定关键实体         实体槽位
                             查询类型                                      查询组合       结构化语言模型
                                          选择运算符          语法规则
                                                 图 3 结构化语言模型的构造

                    (1) query <value expression>;
                    该命令计算给定的值表达式 (value expression), 并将结果显示给用户.
                    (2) let <identifier> = <value expression>;
                    该命令也计算给定的值表达式, 但不同于第              1  个命令, 该命令并不直接显示值表达式的计算结果, 而是存储到
                 名为  identifier 的对象中.
                    (3) delete <identifier>;
                    该命令从当前数据库中删除名为            identifier 的对象, 通常配合第  2  个命令使用.
                    SECONDO   系统中用于处理空间数据的运算符的用法和含义如表                   2  所示. 不同查询类型的结构化语言用到
                 的实体信息不同. 使用<k>表示待定的最近邻居数, <d>表示待定的距离阈值, <relation>表示待定的空间关系,
                 <location>表示待定的查询地点. 基于数据库可执行语言的语法规则, 组合实体槽位和运算符, 可以得到基于
                 SECONDO  系统的结构化语言模型. 当查询地点存储于一个空间关系中时, 要将模型中的<location>替换为如下语
                 句, 其中, <tmp_relation>表示该空间关系, <name>表示该查询地点的名称:
                    (<tmp_relation> feed filter [.Name = “<name>”] extract[GeoData])

                                                 表 2 处理空间数据的运算符

                     运算符                            语法                                   含义
                     distance        {point, line, region} × {point, line, region} → real  计算两个对象之间的距离
                    direction                  point × point → real                计算两点之间的方向
                      size                        line → real                        计算line的长度
                      area                       region → real                      计算region的面积
                    intersects           {line, region} × {line, region} → bool    判断两个对象是否相交
                               {point, line, region} × {point, line, region} → T, 如果point是参数,
                    intersection                                                  计算两个对象的相交部分
                               T为point, 否则T为维度较小的参数
                   distancescan         rtree × relation × object × int k → stream  计算对象的k个最近邻居
                     sortby             stream × attribute × asc / desc → stream  按给定的属性列表对元组流排序
                      head                    stream × int n → stream              从流中获取前n个元素
                      filter              stream × filter condition → stream      通过谓词过滤流中的元素

                    基础空间查询包括如下典型应用场景.
                    (1) 距离查询, 计算两个空间对象之间的欧几里得距离, 需要的实体信息为查询地点, 运算符为                           distance, 结合
                 可执行语言和运算符的语法规则, 可得结构化语言模型为:
                    query distance (<location1>, <location2>);
                    (2) 方向查询, 基于方位角, 返回两个空间对象之间的相对方向, 需要的实体信息为查询地点, 运算符为
                 direction, 结构化语言模型为:
                    query direction (<location1>, <location2>);
                    (3) 几何查询, 针对单个空间对象, 计算其长度或面积, 需要的实体信息为查询地点, 运算符为                         size 或  area, 结
                 构化语言模型为:
                    query size (<location>);
                    query area (<location>);
   162   163   164   165   166   167   168   169   170   171   172