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>);

