1、工具下载
1.1 Protege 的安装
版本说明:Protégé-5.5.0
了解其基本使用。
1.2 Neo4j 的安装
2、Neo4j 导入 Protege 文件
2.1 启动 Neo4j
版本:JDK11
Win+R 输入 cmd,执行以下命令:
neo4j.bat console


2.2 Protege 导出 OWL 文件转 Turtle 文件
在配置 Protege 生成 Turtle 文件时,若遇到无法生成或文件为 0KB 的情况,需检查 JDK 版本。Neo4j 启动与 Protege 转换可能依赖不同版本的 Java。
JDK 版本切换:
从官网下载所需的两个 Java 版本,分别配置系统变量。主要通过修改 JAVA_HOME 变量的值来实现切换(例如 %JDK1.8% 或 %JDK11%)。
转换指令: 在包含 OWL 文件的文件夹中,Shift + 鼠标右键打开 PowerShell,输入以下指令(替换源文件和输出文件名):
java -jar rdf2rdf-1.0.1-2.3.1.jar creature.owl creature.turtle
转换完成后,检查文件大小是否大于 0KB。





2.3 导入 Neo4j
1. 清除数据库中的所有数据
MATCH (n) DETACH DELETE n;
2. 初始化 RDF 导入配置
CALL n10s.graphconfig.init();
3. 导入 RDF 数据
CALL n10s.rdf.import.fetch("file:///E:/BaiduNetdiskDownload/owl 导入 neo4j/第一单元_test.turtle", "RDF/XML", {handleVocabUris: "IGNORE"})
注意修改你自己的文件地址。

4. 查询所有(部分)数据
MATCH (n) WHERE n:`节点名称 1` OR n:`节点名称 2` OR n:`节点名称 3` RETURN n LIMIT 500;
5. 查询边关系
MATCH ()-[r]->() RETURN DISTINCT type(r) AS relationshipType
6. 一些细节
节点信息的 URI 通常有很长的前缀,可使用以下指令清理:
MATCH (n) SET n.uri = REPLACE(n.uri, 'http://www.semanticweb.org/florence/ontologies/2025/1/untitled-ontology-9#', '') RETURN n
注意更换你自己的 URI 前缀。


3、Neo4j 导出 JSON 文件
导出 JSON 的目的是方便后续利用 Echarts 进行可视化。需要借助 APOC 库。请先下载并安装 APOC 库。
验证安装:
RETURN apoc.version()
导出文件:
CALL apoc.export.json.query(
"MATCH (n) WHERE n:`节点名称 1` OR n:`节点名称 2` OR n:`节点名称 3` OPTIONAL MATCH (n)-[r]->(m) RETURN n, r, m LIMIT 500",
"file:///E:/neo4j/neo4j-community-4.4.41/import/output_3.0.json",
{format: 'PLAIN'}
)
代码说明:
- 第一行:查询所有节点 + 匹配关系 + 返回所有信息。
- 第二行:导出文件路径及文件名称。
- 第三行:指定导出的格式为
PLAIN,即简单的 JSON 格式。
至此,原始数据已获取。下面将进行数据处理,然后利用 Echarts 和 Vue 实现前端可视化。
4、可视化前的操作
4.1 利用 Python 对数据进行处理
从 Neo4j 导出的 JSON 文件并不符合 Echarts 的数据格式,需要利用 Python 进行处理。
原始 JSON 数据示例:
{
"n": {
"type": "node",
"id": "2",
"labels": ["Resource", "课名称", "owl__NamedIndividual"],
"properties": {
"描述": "算法的多分支结构,判断闰年的规则",
"编号": 3.3,
"名称": "闰年平年我知道(1)"
}
},
"r": {
"id": "69",
"type": "relationship",
"label": "父子",
"start": { "id":
...
Python 处理代码:
import json
def convert_to_echarts_data(file_path):
# 加载 Neo4j 导出的 JSON 数据
with open(file_path, 'r', encoding='utf-8') as f:
neo4j_data = json.load(f)
# 初始化 ECharts 数据
echarts_data = {"nodes": [], "links": []}
node_map = {}
# 节点处理
for item in neo4j_data:
node = item.get("n", None)
if node:
node_id = node.get("id")
node_labels = node.get("labels", [])
node_properties = node.get("properties", {})
node_name = node_properties.get("名称", node_properties.get("name", node_id))
node_uri = node_properties.get("uri", node_id)
if node_id not in node_map:
echarts_node = {
"id": node_id,
"name": node_name,
"category": node_labels[1] if len(node_labels) > 1 else "其他",
"value": node_uri,
"properties": node_properties
}
echarts_data["nodes"].append(echarts_node)
node_map[node_id] = echarts_node
m_node = item.get("m", None)
if m_node:
node_id = m_node.get()
node_labels = m_node.get(, [])
node_properties = m_node.get(, {})
node_name = node_properties.get(, node_properties.get(, node_id))
node_uri = node_properties.get(, node_id)
node_id node_map:
echarts_node = {
: node_id,
: node_name,
: node_labels[] (node_labels) > ,
: node_uri,
: node_properties
}
echarts_data[].append(echarts_node)
node_map[node_id] = echarts_node
item neo4j_data:
relationship = item.get(, )
relationship:
start_node = relationship.get()
end_node = relationship.get()
start_id = start_node.get()
end_id = end_node.get()
relationship_label = relationship.get()
echarts_link = {
: start_id,
: end_id,
: relationship_label,
}
echarts_data[].append(echarts_link)
echarts_data
__name__ == :
input_file =
output_file =
echarts_data = convert_to_echarts_data(input_file)
(output_file, , encoding=) f:
json.dump(echarts_data, f, ensure_ascii=, indent=)
()
转换后的 JSON 数据示例:
{
"nodes": [
{
"id": "2",
"name": "闰年平年我知道(1)",
"category": "课名称",
"value": "闰年平年我知道(1)",
"properties": {
"描述": "算法的多分支结构,判断闰年的规则",
"编号": 3.3,
"名称": "闰年平年我知道(1)"
}
}
],
"links": [
{
"source": "2",
"target": "101",
"value": "父子"
}
]
}
4.2 学习 Vue & Echarts
完成上述步骤后,可结合 Vue 框架与 Echarts 库实现前端可视化展示。


