论文基本信息

  • 题目: Mapping by Example: Towards an RML Mapping Reverse Engineering Pipeline (通过实例映射:一种 RML 映射逆向工程管道)
  • 作者: Michael Freund, Rene Dorsch, Sebastian Schmid, Andreas Harth
  • 机构:
    • 弗劳恩霍夫集成电路研究所 (Fraunhofer Institute for Integrated Circuits IIS), 德国纽伦堡
    • 埃尔朗根-纽伦堡大学 (Friedrich-Alexander-Universität Erlangen-Nürnberg), 德国纽伦堡
  • 发表地点与年份: KGCW’25: 6th International Workshop on Knowledge Graph Construction, 2025年6月1日或2日,波尔托罗,斯洛文尼亚
  • 关键词术语与定义:
    • RDF Mapping Language (RML): 一种用于描述如何将异构数据(如 CSV, JSON)转换为 RDF (资源描述框架) 图谱的语言。
    • RML Mapping Generation: 自动或半自动创建 RML 映射文档的过程。
    • Knowledge Graph Construction: 构建知识图谱的过程,通常涉及从多种数据源中提取、转换和集成数据。

摘要(详细复述)

  • 背景: 论文针对从非 RDF 数据源生成 RML (RDF 映射语言) 映射文档的挑战,提出了一个逆向工程管道。手动创建 RML 映射文档是一个复杂且需要专业知识的过程。
  • 方案概述: 该研究设计并实现了一个名为 ReMap 的原型系统。该系统采用“通过实例映射 (mapping by example)”的范式,用户只需提供一个非 RDF 的输入数据(如 CSV 文件)和一个期望生成的 RDF 图谱样例。ReMap 管道能够自动分析这两者之间的转换关系,并逆向生成一个标准的 RML 映射文档。此方法不仅能从头创建映射,还能通过使用旧的非 RDF 数据和其生成的 RDF 数据,将既有的、基于旧版 RML 标准的映射文档升级到最新标准。
  • 主要结果/提升:
    • 一致性评估: 使用 RML 核心测试用例进行评估,ReMap 在所有适用的测试用例上均能生成等效的 RML 映射文档,表现出良好的规范一致性。
    • 与 LLM 对比: 与一个基于大型语言模型 (LLM) 的方法相比,ReMap 的成功率高出 31%。
    • 性能分析: ReMap 工具的时间复杂度为 O ( n ⋅ q ) O(n \cdot q) O(n⋅q),其中 n n n 是非 RDF 输入元素的数量, q q q 是目标 RDF 图谱中的 RDF 术语数量。
  • 结论与意义: 该工作通过自动化 RML 映射文档的生成,显著简化了将非 RDF 数据转换为 RDF 的流程,使得不熟悉 RML 语法的用户也能高效地完成知识图谱的构建任务。

研究背景与动机

  • 学术/应用场景与痛点:
    在构建知识图谱(KGs)时,一个核心任务是将结构化(如 CSV)或半结构化(如 JSON)数据集成到 RDF 数据模型中。RML 是实现这一转换的标准语言。然而,创建 RML 映射文档是一项挑战,它要求用户不仅要理解 RDF 图谱的建模方式,还要熟悉 RML 的本体术语和语法。尽管存在如 RMLEditor、YARRRML 等辅助工具,但映射创建过程仍需要大量手动干预和专业知识。该研究的动机就是为了解决这一痛点,通过逆向工程自动化生成 RML 映射,降低技术门槛。

  • 主流路线与局限:
    论文中提到的主流相关工作可分为以下几类:

方法分类优点不足之处代表工作
手动/辅助映射工具提供图形化界面或更易读的语法,简化编辑过程。仍需用户手动定义所有映射规则,学习成本高,效率有限。RMLEditor, YARRRML
基于本体的自动生成尝试自动匹配数据源列与目标本体中的概念。严重依赖一个预定义且质量高的目标本体;匹配准确性难以保证。
基于 LLM 的自动生成利用大型语言模型的自然语言处理能力,从提示中生成映射。结果不具有确定性,可能产生不正确或不符合规范的映射;对于复杂场景,可靠性较差。,
逆向 RML 转换尝试从 RDF 数据和 RML 映射反向生成非 RDF 数据。研究方向相反,不解决映射生成的问题,且有其局限性。

本文提出的方法旨在结合自动化与确定性,通过用户提供的具体实例来确保生成映射的准确性,避免了本体匹配的不确定性和 LLM 的不可靠性。

问题定义(形式化)

该研究的核心任务是逆向工程 RML 映射文档。

  • 输入:

    • 一个非 RDF 输入数据集 I = { i 1 , i 2 , … , i n } I = \{i_1, i_2, \dots, i_n\} I={i1​,i2​,…,in​},例如一个或多个 CSV 文件。
    • 一个期望生成的目标 RDF 图谱 G G G。
  • 输出:

    • 一个 最小化 的 RML 映射文档 M ′ M' M′。
  • 符号与约束:

    • 标准 RML 映射过程可以形式化为一个函数 f f f,即 f ( M , I ) = G f(M, I) = G f(M,I)=G,其中 M M M 是一个给定的 RML 映射文档。
    • 本研究的目标是求解该函数的“逆问题”:给定 I I I 和 G G G,找到一个映射文档 M ′ M' M′,使得 f ( M ′ , I ) = G f(M', I) = G f(M′,I)=G。
    • 在所有能产生等效 RDF 输出的映射文档集合 V V V 中(即对于任意 M v ∈ V M_v \in V Mv​∈V 都有 f ( M v , I ) = G f(M_v, I) = G f(Mv​,I)=G),目标是找到一个 M ′ ∈ V M' \in V M′∈V,使得 M ′ M' M′ 包含的 RML 三元组映射 (triple maps) 数量最少。这被称为“最小化”映射文档。
  • 评测目标:

    1. 一致性 (Conformance): 验证生成的映射文档 M ′ M' M′ 在 RML 解释器上执行后,其输出是否与目标 RDF 图谱 G G G 完全等价。
    2. 性能 (Performance): 评估生成 M ′ M' M′ 过程中的执行时间和内存消耗。

创新点

  1. “通过实例映射”的新范式: 提出并实现了一种“mapping by example”的工作流。用户不再需要手动编写复杂的 RML 规则,而是通过提供一个具体的输入数据和一个期望的输出 RDF 样例来驱动映射的生成。这极大地降低了用户的使用门槛,使流程更直观。
  2. 确定性的逆向工程管道: 设计了一个完全基于确定性操作(如字符串比较和替换)的多阶段管道。与基于机器学习或 LLM 的概率性方法不同,该管道保证了结果的可复现性和透明性。每次给定相同的输入,都会生成完全相同的 RML 映射。
  3. 最小化映射文档生成: 管道的最后阶段专门设计了过滤器,用于识别并移除生成冗余或子集 RDF 三元组的 RML 映射规则。这确保了最终输出的 RML 文档是“最小且全面的”,避免了不必要的复杂性,提高了后续 RML 解释器执行的效率。

方法与核心思路

整体框架

该论文提出的 RML 逆向工程管道 (ReMap) 由三个核心组件串联而成:三元组映射生成器 (Triple Map Generator)、连接检测器 (Join Detector) 和 三元组映射过滤器 (Triple Map Filter)。

其核心工作流程如下:

最优解选择
搜索空间扩展
初始搜索空间生成
Triple Map Filter
Join Detector
Triple Map Generator
非 RDF 数据 I
目标 RDF 图谱 G
初始三元组映射集合 S
包含连接的三元组映射集合 S'
最小化的 RML 映射文档 M'
  1. Triple Map Generator: 接收非 RDF 数据 I I I 和目标 RDF 图谱 G G G 作为输入,通过一系列算法分析每个 RDF 三元组的生成方式,生成一个包含所有潜在 RML 三元组映射 (triple maps) 的初始搜索空间 S S S。
  2. Join Detector: 对初始集合 S S S 中的三元组映射进行分析,识别出那些可以通过连接 (join) 操作合并的映射对,从而生成更复杂、更具表现力的连接三元组映射,并将它们添加到集合中,形成扩展后的搜索空间 S ′ S' S′。
  3. Triple Map Filter: 处理扩展后的集合 S ′ S' S′,首先过滤掉那些生成冗余 RDF 三元组的映射(即其生成的 RDF 是另一个映射所生成 RDF 的子集),然后验证剩余的映射能够完整地生成目标 RDF 图谱 G G G。最终,将通过验证的、最小化的映射组合成最终的 RML 映射文档 M ′ M' M′。
步骤分解与模块详解
1. 三元组映射生成器 (Triple Map Generator)

该模块是管道的第一步,其目标是为目标 RDF 图谱中的每一个三元组生成所有可能的 RML 映射规则。这个过程分为三个子步骤:

  • 1.1 识别术语类型 (Identifying Term Types)
    该步骤分析 RDF 图谱中每个三元组的主语 (subject)、谓语 (predicate)、宾语 (object) 的类型。假设 RDF 序列化格式为 N-Triples,算法通过简单的字符串匹配来判断:

    • 被 <...> 包围的为 IRI。
    • 以 _: 开头的为 blank node。
    • 被 "…" 包围的为 literal。

    伪代码 1: 术语类型识别

    Input: RDF term T (string)
    Output: Identified RDF term type (string)
    
    1: if '^^' in T then T = T.split('^^')[0];
    2: else if '@' in T then T = T.split('@')[0];
    3: if T[0] == '<' and T[-1] == '>' then return "iri";
    4: else if T[0] == '_' and T[1] == ':' then return "blanknode";
    5: else if T[0] == '"' and T[-1] == '"' then return "literal";
    6: else return "error";
    

    这段伪代码首先移除字面量可能带有的数据类型或语言标签,然后通过检查字符串的开头和结尾字符来确定其类型。

  • 1.2 识别术语映射类型 (Identifying Term Map Types)
    此步骤判断一个 RDF 术语是由 RML 映射中的哪种方式生成的:

    • constant: RDF 术语是一个硬编码的常量,不包含任何来自非 RDF 源数据的值。
    • reference: RDF 术语完全等同于非 RDF 源数据中的某个值。
    • template: RDF 术语是一个模板字符串,其中部分内容被非 RDF 源数据中的值替换。

    为了避免错误地将 RDF/RDFS 等标准词汇中的数字识别为模板的一部分,算法引入了一个“受保护 IRI 列表 (protected IRIs)”,该列表中的 IRI 不会进行模板匹配。

    伪代码 2: 术语映射类型识别

    Input: RDF term T, non-RDF input element E, protected IRIs A
    Output: Identified term map type (string)
    
    1: T = decode(T); // Remove percent encoded chars
    2: for iri in A do
    3:   if iri in T then T = T.remove(iri); // Remove protected IRI part
    4: if E not in T then return "constant";
    5: else if E == T then return "reference";
    6: else return "template";
    

    该算法首先对 IRI 进行解码并移除受保护部分。然后,它检查非 RDF 数据元素 E E E 是否出现在 RDF 术语 T T T 中。如果完全不出现,则为常量;如果完全相等,则为引用;如果部分出现,则为模板。

    示例: 对于 RDF 术语 T = http://ex.com/user_10 T = \text{http://ex.com/user\_10} T=http://ex.com/user_10 和来自 CSV 的数据 E = 10 E = 10 E=10,由于 10 是 T T T 的一部分但 T T T 不完全等于 10,因此术语映射类型被识别为 template。

  • 1.3 识别术语映射 (Identifying Term Maps)
    最后一步是根据上一步识别的类型,生成具体的 RML 术语映射字符串。

    • constant: 直接返回原始的 RDF 术语字符串。
    • reference: 返回非 RDF 数据源中的列名或引用标识符。
    • template: 将 RDF 术语中与非 RDF 数据值匹配的部分替换为列名占位符,如 {ID}。

    伪代码 3: 术语映射识别

    Input: RDF term T, non-RDF input element E, RDF term type P
    Output: Identified term map (string)
    
    1: T = decode(T);
    2: if P == 'constant' then return T;
    3: else if P == 'reference' then return E; // Here E should be the column name
    4: else if P == 'template' then
    5:   E_Header = attributeNameOf(E);
    6:   T = T.replace(E, '{' + E_Header + '}');
    7:   return T;
    

    示例: 对于输入 T = http://ex.com/user_10 T = \text{http://ex.com/user\_10} T=http://ex.com/user_10, E = 10 E=10 E=10 (其列名为 ID), P = template P = \text{template} P=template,此算法将生成术语映射字符串 http://ex.com/user_{ID}。

2. 连接检测器 (Join Detector)

该模块负责识别不同三元组映射之间的连接关系。

  • 2.1 识别连接三元组映射 (Identifying Join Triple Maps)
    算法通过检查两个三元组映射 tm1 和 tm2 是否满足一系列严格的条件来判断它们是否可以合并为一个连接映射。

    • tm1 的主语不能是 constant,宾语必须是 constant。
    • tm2 的主语必须是 constant,宾语不能是 constant。
    • tm1 和 tm2 必须具有完全相同的谓语。
    • tm1 主语的“不变量”(即模板中固定的前缀部分)必须被包含在 tm2 的主语中。
    • tm2 宾语的“不变量”必须被包含在 tm1 的宾语中。
  • 2.2 识别连接属性 (Identifying Join Attributes)
    一旦确定两个映射可以连接,就需要找到用于连接的属性(即 rml:child 和 rml:parent)。该方法采用一种启发式策略:计算两个数据源中所有可能属性对的 重叠系数 (overlap coefficient)。
    o v e r l a p ( A , B ) = ∣ A ∩ B ∣ m i n ( ∣ A ∣ , ∣ B ∣ ) overlap(A, B) = \frac{|A \cap B|}{min(|A|, |B|)} overlap(A,B)=min(∣A∣,∣B∣)∣A∩B∣​
    其中 A A A 和 B B B 是两个属性列中的值的集合。重叠系数衡量了一个集合在多大程度上是另一个集合的子集。得分最高的属性对被选为连接键。
    示例: 在论文的 Figure 1 中,file1.csv 的 Department 列和 file2.csv 的 ID 列的值有很高的重叠,因此它们被选为连接属性。

3. 三元组映射过滤器 (Triple Map Filter)

这是管道的最后一步,旨在生成一个最小化且正确的 RML 映射文档。

  • 3.1 过滤生成公共子集的三元组映射 (Filter Triple Maps Generating Common Subsets)
    此步骤的目的是消除冗余。对于搜索空间中的任意两个三元组映射,系统会分别用它们生成 RDF 三元组。如果一个映射(如基于 constant 的)生成的 RDF 三元组集合是另一个更通用的映射(如基于 template 的)所生成集合的子集,那么这个生成子集的映射将被过滤掉。
    示例: 一个术语映射 T 1 = http://ex.com/user_{ID} T_1 = \text{http://ex.com/user\_\{ID\}} T1​=http://ex.com/user_{ID} (模板) 可以生成多个 RDF 术语,而另一个映射 T 2 = http://ex.com/user_10 T_2 = \text{http://ex.com/user\_10} T2​=http://ex.com/user_10 (常量) 只生成一个。由于 T 2 T_2 T2​ 的输出是 T 1 T_1 T1​ 输出的子集,因此 T 2 T_2 T2​ 会被移除,只保留更通用的 T 1 T_1 T1​。

  • 3.2 验证生成的 RDF 术语 (Validating Generated RDF Terms)
    在过滤之后,剩余的三元组映射集合被用于生成最终的 RDF 图谱。系统会验证这个生成的图谱是否与用户提供的目标图谱 G G G 完全一致。只有那些其产生的所有 RDF 三元组都存在于 G G G 中的映射才会被保留并写入最终的 RML 映射文档。

复杂度分析
  • Triple Map Generator: 时间复杂度为 O ( r ⋅ n ⋅ m ⋅ q ⋅ p ) O(r \cdot n \cdot m \cdot q \cdot p) O(r⋅n⋅m⋅q⋅p),其中 r r r 是非 RDF 文件数, n n n 是每个文件中的条目数(行数), m m m 是每个条目中的元素数(列数), q q q 是目标 RDF 图谱中的三元组数, p p p 是受保护 IRI 的数量。由于 r , m , p r, m, p r,m,p 通常很小,可以简化为 O ( n ⋅ q ) O(n \cdot q) O(n⋅q)。
  • Join Detector: 时间复杂度为 O ( s i z e ( S ) 2 ) O(size(S)^2) O(size(S)2),其中 s i z e ( S ) size(S) size(S) 是初始三元组映射集合的大小。这是一个二次方复杂度的步骤。
  • Triple Map Filter: 时间复杂度为 O ( t ⋅ r ⋅ n ) O(t \cdot r \cdot n) O(t⋅r⋅n),其中 t t t 是过滤前的三元组映射数量。

实验设置

  • 数据集:
    • 一致性评估: 使用 RML Core test cases 数据集中的 35 个 CSV 相关测试用例。每个用例包含 CSV 输入、标准的 RML 映射和预期的 N-Triples 输出。
    • 性能评估: 使用 KGCW Challenge 2024 中的 duplicated values dataset。该数据集被缩减为 5, 10, 20, 30 个唯一行,分别对应 100, 200, 400, 600 个 N-Triples 输出。
  • 对比基线:
    • 一个基于 大型语言模型 (LLM) 的方法,具体模型为 o3-mini-high,知识截止日期为 2023 年 10 月。通过简单的提示词让 LLM 生成 RML 映射。
  • 评价指标:
    • 一致性: 成功率,即生成的 RML 映射能够正确产生预期 RDF 图谱的测试用例百分比。
    • 性能: 执行时间(秒)和峰值内存消耗(MB)。
  • 实现细节:
    • ReMap 工具: 使用 Python 3.12.3 开发,依赖 pandas 库处理 CSV,rdflib 库处理 RDF。
    • 验证工具:
      • ReMap 生成的映射使用 BURP v0.1.1 执行和验证。
      • LLM 生成的映射使用 RMLMapper v7.3.1 执行和验证。
    • 硬件环境: Intel Xeon Gold 6154 CPU (8核 @ 3.0 GHz),64 GB RAM,Ubuntu 24.04.1 LTS。

实验结果与分析

  • 一致性评估结果:

    • ReMap: 在全部 35 个适用的测试用例上均成功生成了等效的 RML 映射文档,成功率为 100%。
    • LLM: 在 35 个测试用例中成功了 22 个,失败了 13 个,成功率为 63%,比 ReMap 低 31%。LLM 在处理更复杂的测试用例时容易失败。
  • 性能评估结果:
    性能测试结果显示,随着输入数据规模(CSV行数 n n n 和 RDF 三元组数 q q q)的增加,ReMap 的执行时间和内存消耗呈 指数级增长,这与复杂度分析的预期一致。
    该工具的性能瓶颈在于其单核执行模式以及 Python 中字符串操作的不可变性(每次修改字符串都需要创建新对象),导致大量字符串替换和操作非常耗时。

    性能数据表 (根据 Figure 4)

CSV 行数 (n)RDF 三元组数 (q)平均执行时间 (s)峰值内存 (MB)
5100~100~200
10200~250~400
20400~800~1000
30600~2400~800
*注意:图表中 `n=30` 的峰值内存(约 800MB)低于 `n=20`(约 1000MB),这可能是一个测量异常或图表绘制上的微小偏差,但总体趋势是急剧增长。*
  • 结果分析:
    • 实验结果表明,ReMap 在可靠性方面远优于 LLM 方法,证明了确定性算法在 RML 映射生成任务中的优势。
    • 性能分析表明,当前的 ReMap 原型实现虽然功能可行,但不适合处理大规模数据集,更适用于为中小型数据集生成映射模板的场景。
    • 实验还证明了 ReMap 的一个重要应用场景:更新旧版 RML 映射。用户可以运行旧的映射流程,将其输出的 RDF 图谱和原始的非 RDF 数据一同输入 ReMap,从而生成一个使用最新 RML 标准的新映射文档。

复现性清单

  • 代码/数据:
    • ReMap 工具代码已在 GitHub 开源:https://github.com/FreuMi/remap
    • 用于 LLM 评估的提示和生成结果也已在上述仓库中公开:tree/main/llm_test_cases
  • 环境与依赖:
    • Python 3.12.3, pandas, rdflib
    • 验证工具: BURP v0.1.1, RMLMapper v7.3.1
  • 许可证: 论文中提到“open-source license”,但未指明具体类型(如 MIT, Apache 2.0 等)。

结论与未来工作

  • 结论:
    本文成功提出并实现了一种 RML 映射的逆向工程方法 ReMap,它通过“实例映射”范式,能够根据非 RDF 输入数据和期望的 RDF 输出图谱,自动、确定性地生成最小化的 RML 映射文档。实验证明,该方法在规范一致性上表现完美,且在可靠性上显著优于基于 LLM 的方法。

  • 未来工作:

    1. 理论层面: 计划使用集合论对 RML 映射逆向工程方法进行更严格的理论形式化。
    2. 应用层面: 计划将该逆向工程管道集成到一个用户友好的 图形用户界面 (GUI) 应用 中。这将进一步简化“通过实例映射”和更新旧版 RML 映射的流程,让用户无需编写任何代码即可完成映射任务。

更多推荐