Query DBpedia using Natural Language

通过自然语言查询 DBpedia 知识图谱,生成结构化结果与可视化 HTML 页面。

已扫描
适合谁
研究人员、内容创作者
不适合谁
需要实时更新数据的用户、需修改数据库内容的用户
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @kidehen/query-dbpedia

Skill 说明

命令、参数、文件名以原文为准

DBpedia 查询技能

何时使用此技能

当用户希望:

  • 使用自然语言查询 DBpedia
  • 询问关于人物、地点、电影、书籍、组织等的信息
  • 通过 DBpedia 从维基百科获取结构化数据
  • 创建 DBpedia 查询结果的可视化图表
  • 生成基于 SPARQL 查询的 HTML 报告

核心功能

自然语言转 SPARQL:将用户问题转换为有效的 SPARQL 查询

查询执行:向 DBpedia 端点发送查询请求

HTML 生成:创建美观且可交互的 HTML 结果页面

多种输出格式:支持 JSON、Markdown 表格或 HTML

错误处理:对语法错误或无结果的情况进行优雅处理

DBpedia 端点

SPARQL 端点https://dbpedia.org/sparql

返回格式:JSON 结果(format=json

请求方式:HTTP GET,查询参数需 URL 编码

常用 DBpedia 前缀

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dct: <http://purl.org/dc/terms/>

查询转换流程

当用户提供自然语言提示时:

1. 分析问题

  • 识别 主体(被询问的对象是谁/什么)
  • 识别 谓词(需要获取哪类信息)
  • 判断是否需要过滤、排序或限制数量

2. 映射到 DBpedia 属性

常见映射关系:

  • “由……执导” → dbo:director
  • “上映日期” → dbp:datedbo:releaseDate
  • “预算” → dbo:budget
  • “出生地” → dbo:birthPlace
  • “人口” → dbo:populationTotal
  • “首都是” → dbo:capital
  • “作者是” → dbo:author
  • “主演” → dbo:starring

3. 构造 SPARQL 查询

通用模板:

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?variable ?label
WHERE {
  ?variable <predicate> <object> ;
           rdfs:label ?label .
  FILTER(LANG(?label) = 'en')
}
ORDER BY <sort_criteria>
LIMIT <number>

4. 执行查询

使用 curl 向 DBpedia 发送请求:

curl -s -G "https://dbpedia.org/sparql" \
  --data-urlencode "query=<SPARQL_QUERY>" \
  --data-urlencode "format=json"

5. 生成输出

可选输出格式:

  • JSON:原始查询结果
  • Markdown 表格:适合终端显示
  • HTML 页面:交互式、样式化的结果展示

示例查询模式

模式 1:导演相关的电影

用户:“请展示克里斯托弗·诺兰执导的电影”

SPARQL

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?film ?title ?releaseDate
WHERE {
  ?film dbo:director dbr:Christopher_Nolan ;
        a dbo:Film ;
        rdfs:label ?title .
  OPTIONAL { ?film dbo:releaseDate ?releaseDate }
  FILTER(LANG(?title) = 'en')
}
ORDER BY DESC(?releaseDate)

模式 2:人口统计查询

用户:“法国人口最多的前 10 个城市有哪些?”

SPARQL

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?city ?name ?population
WHERE {
  ?city dbo:country dbr:France ;
        a dbo:City ;
        rdfs:label ?name ;
        dbo:populationTotal ?population .
  FILTER(LANG(?name) = 'en')
}
ORDER BY DESC(?population)
LIMIT 10

模式 3:人物信息查询

用户:“介绍一下阿尔伯特·爱因斯坦——他什么时候出生,出生在哪里?”

SPARQL

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?birthDate ?birthPlace ?placeLabel
WHERE {
  dbr:Albert_Einstein dbo:birthDate ?birthDate ;
                      dbo:birthPlace ?birthPlace .
  ?birthPlace rdfs:label ?placeLabel .
  FILTER(LANG(?placeLabel) = 'en')
}

HTML 模板生成

生成 HTML 结果时需包含以下元素:

必需内容

  1. 标题:问题描述或查询说明
  2. 统计信息:结果数量、查询耗时
  3. 表格:包含可点击的 DBpedia 资源链接
  4. SPARQL 查询展示:显示实际执行的查询语句
  5. 页脚:DBpedia 链接及数据来源标注

样式规范

  • 使用渐变背景
  • 响应式设计(适配移动端)
  • 表格行悬停效果
  • 所有 DBpedia 资源均添加超链接
  • 不同数据类型使用不同颜色标识
  • 添加图标以增强视觉表现力

HTML 模板结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>[查询描述] - DBpedia</title>
    <style>
        /* 现代化、响应式样式 */
        /* 渐变背景 */
        /* 悬停效果 */
        /* 移动端优先设计 */
    </style>
</head>
<body>
    <div class="container">
        <h1>[问题/标题]</h1>
        <div class="stats">[结果数量]</div>
        <table>[结果内容]</table>
        <div class="sparql-query">[查询代码]</div>
        <div class="footer">[署名信息]</div>
    </div>
</body>
</html>

错误处理

无结果

如果查询返回 0 条记录:

  • 向用户清晰说明
  • 建议更换表达方式
  • 检查实体名称是否存在拼写错误

查询错误

如果 SPARQL 语法出错:

  • 显示错误信息
  • 展示尝试执行的查询
  • 提供重新表述建议

超时

如果查询超时:

  • 添加 LIMIT 子句
  • 简化查询复杂度
  • 建议缩小筛选条件

输出偏好

始终向用户确认:

"您希望结果以以下哪种形式返回:
1. JSON(原始数据)
2. Markdown 表格(适合终端查看)
3. HTML 页面(交互式可视化)"

最佳实践

  1. 始终使用 DISTINCT:避免重复结果
  2. 按语言过滤:使用 FILTER(LANG(?label) = 'en')
  3. 添加 LIMIT:默认使用 LIMIT 100,除非另有指定
  4. 使用 OPTIONAL:针对可能不存在的属性
  5. 对结果排序:通过 ORDER BY 使结果更具意义
  6. HTML 中的超链接:所有 DBpedia URI 应为可点击链接

示例会话

用户: "列出 J.K. 罗琳撰写的所有书籍及其出版日期"

助手

"我将查询 DBpedia 以获取 J.K. 罗琳撰写的书籍信息。

正在向 DBpedia 端点执行 SPARQL 查询..."

[构建并执行查询]

"共找到 15 本书!您希望以以下哪种格式查看结果?

  1. JSON
  2. Markdown 表格
  3. HTML 页面"

用户: "HTML 页面"

助手

[生成美观的 HTML 页面并输出结果]

"✓ HTML 页面已生成并保存至:./jk_rowling_books.html

✓ 共找到 15 本带有出版日期的书籍"

适用范围

此技能支持:

  • 对 DBpedia 中实体的查询
  • 结构化数据提取
  • 结果格式化与可视化

此技能不支持:

  • 文本搜索(请使用 DBpedia Lookup API)
  • 数据修改(仅支持只读查询)
  • 实时数据(DBpedia 数据定期更新)

版本:1.0.0

端点:https://dbpedia.org/sparql

数据源:DBpedia(维基百科结构化数据)

K
@kidehen

已收录 1 个 Skill

相关推荐