mcpField
S
sparql-university

sparql-university

github.com/letta-ai数据与数据库15242 次安装4 周前更新
代码仓库

关于 sparql-university

指导针对 RDF/Turtle 数据集编写 SPARQL 查询的技能,面向需要完整分析和核验查询结果的人员。它强调先理解数据结构,再逐步构建查询并手动交叉检查结果。

主要功能

  1. 01确认数据完整并统计实体
  2. 02梳理类型、属性与关系
  3. 03拆分筛选条件并逐项测试
  4. 04逐步构建并校验 SPARQL 查询
  5. 05检查结果、聚合值与边界条件

适用场景

  1. 01从 RDF 数据中筛选学术实体
  2. 02统计院系或跨实体关系
  3. 03核对聚合查询结果与筛选条件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/letta-ai/skills --skill sparql-university

安装后在 Claude Code 中输入/sparql-university确认已加载。

详细介绍

SPARQL 大学查询任务

概述

本技能提供了针对 RDF/Turtle 数据集编写 SPARQL 查询的指导,重点在于确保数据分析完整、查询构造正确并进行充分验证。

工作流

第 1 步:完整获取数据

编写任何查询之前,请确保能够完整查看源数据。

关键操作:

  • 完整读取 Turtle(.ttl)或 RDF 文件,不得截断
  • 如果数据似乎被截断,请请求补充内容或使用分页
  • 统计不同实体的数量,以验证数据是否完整
  • 记录观察到的所有实体类型、谓词和关系

**验证检查点:**继续之前,确认不同实体的数量符合预期。

第 2 步:理解架构

构造查询之前,先梳理数据结构。

需要识别的关键要素:

  • 数据集中的所有实体类型(类)
  • 使用的所有谓词/属性
  • 实体之间的关系(例如,教授 → 院系 → 学生)
  • 字面量的数据类型(字符串、日期、整数)
  • 命名约定和值格式

学术数据中的常见模式:

  • 角色/头衔通常使用特定前缀(例如,“Professor of”“Associate Professor”)
  • 日期可能需要通过比较逻辑判断“当前”状态
  • 地理代码可能采用 ISO 标准(国家代码)
  • 学生注册信息可能涉及多个院系
第 3 步:拆解条件

将筛选要求拆分为可独立测试的条件。

针对每个条件:

  1. 确定指向相关数据的确切谓词路径
  2. 确定比较类型(相等、前缀匹配、成员资格、数值比较)
  3. 考虑对条件的解释可能涉及的边缘情况
  4. 将每个条件分别测试后再组合

拆解示例:

  • “正教授” → 筛选角色以特定前缀开头的记录
  • “在欧盟国家工作” → 根据欧盟成员国列表筛选国家代码
  • “学生人数超过 10 人的院系” → 统计各院系的学生人数,并应用阈值
第 4 步:构造查询

逐步构建查询,并在每个阶段进行验证。

构造顺序:

  1. 从限制最严格的筛选条件开始,以缩小结果集
  2. 每次添加一个筛选条件,并验证中间结果
  3. 包含所有必要的 SELECT 变量
  4. 最后添加聚合(GROUP BY、GROUP_CONCAT)

语法验证:

  • 验证所有前缀均已声明
  • 确保 FILTER 表达式正确闭合
  • 检查字符串比较是否使用正确的函数(STRSTARTS、CONTAINS、regex)
  • 确认数值比较正确处理了数据类型

输出格式注意事项:

  • 确定结果是否需要聚合(例如,拼接多个值)
  • 指定拼接值的排序顺序和分隔符
  • 区分筛选条件和输出要求(例如,按欧盟国家筛选,但输出所有国家)
第 5 步:验证策略

根据已知预期测试查询。

验证方法:

  1. 运行查询并检查原始输出
  2. 手动追踪至少 2-3 个实体的数据,以验证正确性
  3. 同时检查是否包含预期实体,以及是否排除了非预期实体
  4. 通过手动计数验证聚合值

交叉核对清单:

  • 返回的实体是否与手动分析结果一致?
  • 结果中是否包含所有预期实体?
  • 是否错误地包含了非预期实体?
  • 聚合计数/值是否与手动验证结果一致?

常见问题

数据读取不完整
  • **问题:**使用截断的数据会导致遗漏实体
  • **预防措施:**务必确认文件内容完整;如果数据被截断,请重新读取
查询被截断
  • **问题:**较长的查询可能无法完整写入
  • **预防措施:**写入后重新读取查询文件,确认内容完整
对条件的误解
  • 问题: 混淆筛选条件与输出要求
  • 预防: 区分“按 X 筛选”和“输出 X”——两者可能不同
日期/时间边界情况
  • 问题: 未能正确处理边界日期
  • 预防: 明确比较是否包含边界;测试边界情况
聚合错误
  • 问题: 缺少 GROUP BY 子句或 GROUP_CONCAT 用法不正确
  • 预防: 确认聚合语法与查询结构相符
欧盟国家列表
  • 问题: 欧盟成员国代码列表不完整或已过时
  • 预防: 使用完整列表:AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IE, IT, LV, LT, LU, MT, NL, PL, PT, RO, SK, SI, ES, SE
跨实体关系
  • 问题: 统计关系中的实体数量有误(例如,院系中的学生)
  • 预防: 沿完整谓词路径追踪;核实联接条件

测试流程

  1. 语法检查: 确保查询能够解析且无错误
  2. 子集测试: 使用已知数据子集运行查询,并核对预期结果
  3. 完整测试: 在完整数据集上运行查询
  4. 人工核验: 根据源数据追踪 2-3 个结果
  5. 边界测试: 检查筛选条件中的边界情况(日期、计数、字符串匹配)

迭代方法

如果初始结果与预期不符:

  1. 找出导致差异的筛选条件
  2. 单独测试每个筛选条件
  3. 检查应当出现但未出现的实体(假阴性)
  4. 检查不应出现却出现的实体(假阳性)
  5. 根据发现调整筛选逻辑
  6. 每次调整后重新核验

评论

支持 Markdown