2025 ESWC An Algebraic Foundation for Knowledge Graph
论文公式解析:知识图谱构建的代数基础
1. 引言
本文提出了一种用于知识图谱(KG)构建的声明式映射语言的代数基础。当前映射语言(如RML)缺乏形式化定义,导致实现不一致且无法进行正确性证明的优化。本文贡献包括:
- 一种语言无关的代数,用于捕获映射定义。
- 将RML转换为该代数的算法(从而提供RML的形式语义)。
- 代数重写规则,用于优化映射计划。
2. 数据模型(Data Model)
核心思想
数据模型基于关系模型,但专门设计用于处理RDF术语(IRI、空白节点、字面量)和错误值(ϵ)。中间结果称为“映射关系”(mapping relations),最终转换为RDF数据集。
符号解释
- SSS:无限字符串集合。
- I⊂SI \subset SI⊂S:有效IRI集合。
- LLL:字面量集合,每个字面量是二元组 (lex,dt)∈S×I(\text{lex}, \text{dt}) \in S \times I(lex,dt)∈S×I,其中lex是词法形式,dt是数据类型IRI。
- BBB:空白节点集合,与SSS和LLL互斥。
- T=I∪B∪LT = I \cup B \cup LT=I∪B∪L:所有RDF术语的集合。
- Tˉ\bar{T}Tˉ:TTT中元素的序列集合。
- RDF三元组:(s,p,o)∈(I∪B)×I×T(s, p, o) \in (I \cup B) \times I \times T(s,p,o)∈(I∪B)×I×T。
- RDF数据集:{Gdflt,(n1,G1),…,(nm,Gm)}\{G_{\text{dflt}}, (n_1, G_1), \dots, (n_m, G_m)\}{Gdflt,(n1,G1),…,(nm,Gm)},其中GiG_iGi是RDF图,ni∈I∪Bn_i \in I \cup Bni∈I∪B。
- AAA:无限属性集合。
- ϵ\epsilonϵ:错误值(非RDF术语)。
映射元组(Mapping Tuple)
定义1:映射元组是部分函数 t:A→T∪{ϵ}t: A \to T \cup \{\epsilon\}t:A→T∪{ϵ}。
- 两个元组ttt和t′t't′兼容:当且仅当对于所有a∈dom(t)∩dom(t′)a \in \text{dom}(t) \cap \text{dom}(t')a∈dom(t)∩dom(t′),有t(a)=t′(a)t(a) = t'(a)t(a)=t′(a)。
- 合并:t∪t′t \cup t't∪t′ 是合并后的元组,定义域为dom(t)∪dom(t′)\text{dom}(t) \cup \text{dom}(t')dom(t)∪dom(t′)。
映射关系(Mapping Relation)
定义2:映射关系rrr是二元组(A,I)(A, I)(A,I),其中:
- A⊂AA \subset AA⊂A:有限非空属性集(模式)。
- III:映射元组集合,且每个元组t∈It \in It∈I满足dom(t)=A\text{dom}(t) = Adom(t)=A。
转换为RDF数据集
定义3:假设四个特殊属性:asa_sas(主语)、apa_pap(谓语)、aoa_oao(宾语)、aga_gag(图)。映射关系r=(A,I)r = (A, I)r=(A,I)转换为RDF数据集:
- Ivalid={t∈I∣(t(as),t(ap),t(ao))是有效RDF三元组且t(ag)∈I∪B}I_{\text{valid}} = \{ t \in I \mid (t(a_s), t(a_p), t(a_o)) \text{是有效RDF三元组且} t(a_g) \in I \cup B \}Ivalid={t∈I∣(t(as),t(ap),t(ao))是有效RDF三元组且t(ag)∈I∪B}。
- N={t(ag)∣t∈Ivalid且t(ag)≠rr:defaultGraph}N = \{ t(a_g) \mid t \in I_{\text{valid}} \text{且} t(a_g) \neq \text{rr:defaultGraph} \}N={t(ag)∣t∈Ivalid且t(ag)=rr:defaultGraph}。
- 默认图GdfltG_{\text{dflt}}Gdflt包含所有t(ag)=rr:defaultGrapht(a_g) = \text{rr:defaultGraph}t(ag)=rr:defaultGraph的三元组。
- 命名图(n,Gn)(n, G_n)(n,Gn)包含所有t(ag)=nt(a_g) = nt(ag)=n的三元组。
示例(表1):
- t(ax)=("12",xsd:integer)t(a_x) = ("12", \text{xsd:integer})t(ax)=("12",xsd:integer)(字面量),t′(ax)=ex:alicet'(a_x) = \text{ex:alice}t′(ax)=ex:alice(IRI),t′′(ax)=ϵt''(a_x) = \epsilont′′(ax)=ϵ(错误)。
- Ivalid={t,t′′}I_{\text{valid}} = \{t, t''\}Ivalid={t,t′′}(因为t′t't′的谓语是字面量,无效)。
- 结果RDF数据集:默认图包含(ex:alice,foaf:knows,ex:bob)(\text{ex:alice}, \text{foaf:knows}, \text{ex:bob})(ex:alice,foaf:knows,ex:bob),命名图ex:g2\text{ex:g2}ex:g2包含(ex:bob,foaf:name,("Bob",xsd:string))(\text{ex:bob}, \text{foaf:name}, ("Bob", \text{xsd:string}))(ex:bob,foaf:name,("Bob",xsd:string))。
3. 映射代数(Mapping Algebra)
代数包含五类运算符,可组合成复杂表达式,定义从异构数据源到RDF数据集的映射。
4.1 源运算符(Source Operator)
目的:从数据源(如CSV、JSON)提取数据并转换为映射关系。
符号解释:
- DDD:数据对象集合(如CSV文件、JSON文档)。
- QQQ:查询语言集合(如JSONPath、CSV列名)。
- 源类型(Definition 4):元组(Dds,Dc1,Dc2,L,L′,eval,eval′,cast)(D_{\text{ds}}, D_{c1}, D_{c2}, L, L', \text{eval}, \text{eval}', \text{cast})(Dds,Dc1,Dc2,L,L′,eval,eval′,cast),其中:
- DdsD_{\text{ds}}Dds:数据源类型(如所有CSV文件)。
- Dc1,Dc2D_{c1}, D_{c2}Dc1,Dc2:上下文对象和值对象的集合。
- L,L′L, L'L,L′:查询语言(LLL用于选择上下文,L′L'L′用于提取值)。
- eval:Dds×L→Dc1\text{eval}: D_{\text{ds}} \times L \to D_{c1}eval:Dds×L→Dc1:从数据源选择上下文对象。
- eval′:Dds×Dc1×L′→Dc2\text{eval}': D_{\text{ds}} \times D_{c1} \times L' \to D_{c2}eval′:Dds×Dc1×L′→Dc2:从上下文对象提取值。
- cast:Dc2→L\text{cast}: D_{c2} \to Lcast:Dc2→L:将值转换为RDF字面量。
- 数据源(Definition 5):s=(type,D)s = (\text{type}, D)s=(type,D),其中D∈DdsD \in D_{\text{ds}}D∈Dds。
源运算符(Definition 6):
-
输入:数据源sss,查询q∈Lq \in Lq∈L,部分函数P:A→L′P: A \to L'P:A→L′(属性到查询的映射)。
-
输出:映射关系r=(A,I)r = (A, I)r=(A,I),其中A=dom(P)A = \text{dom}(P)A=dom(P),且:
I={{a1→cast(v1),…,an→cast(vn)}∣d∈eval(D,q), ∀ai∈dom(P):vi∈eval′(D,d,P(ai))} I = \left\{ \{a_1 \to \text{cast}(v_1), \dots, a_n \to \text{cast}(v_n)\} \mid d \in \text{eval}(D, q),\, \forall a_i \in \text{dom}(P): v_i \in \text{eval}'(D, d, P(a_i)) \right\} I={{a1→cast(v1),…,an→cast(vn)}∣d∈eval(D,q),∀ai∈dom(P):vi∈eval′(D,d,P(ai))}即:对每个上下文对象ddd,生成一个元组,其属性值通过PPP中的查询提取并转换。
示例(CSV源):
- sex=(typecsv,Dex)s_{\text{ex}} = (\text{type}_{\text{csv}}, D_{\text{ex}})sex=(typecsv,Dex),其中DexD_{\text{ex}}Dex是CSV文件。
- q=ϵq = \epsilonq=ϵ(选择所有行)。
- P={a1→id,a2→firstname,a3→age}P = \{a_1 \to \text{id}, a_2 \to \text{firstname}, a_3 \to \text{age}\}P={a1→id,a2→firstname,a3→age}。
- 结果:两个元组,如t1={a1→("1",xsd:string),a2→("Alice",xsd:string),a3→("23",xsd:string)}t_1 = \{a_1 \to ("1", \text{xsd:string}), a_2 \to ("Alice", \text{xsd:string}), a_3 \to ("23", \text{xsd:string})\}t1={a1→("1",xsd:string),a2→("Alice",xsd:string),a3→("23",xsd:string)}。
4.2 扩展运算符(Extend Operator)
目的:向映射关系添加新属性,值由扩展表达式计算。
符号解释:
- 扩展函数(Definition 7):函数f:(T∪{ϵ})n→(T∪{ϵ})f: (T \cup \{\epsilon\})^n \to (T \cup \{\epsilon\})f:(T∪{ϵ})n→(T∪{ϵ})。
- 示例:toInt(v)\text{toInt}(v)toInt(v)将字符串字面量转换为整数字面量(若可能),否则返回ϵ\epsilonϵ。
- 扩展表达式(Definition 8):
- RDF术语(如ex:alice\text{ex:alice}ex:alice)。
- 属性(如a1a_1a1)。
- 函数应用:(f,ϕ1,…,ϕn)(f, \phi_1, \dots, \phi_n)(f,ϕ1,…,ϕn),其中ϕi\phi_iϕi是扩展表达式。
- attrs(ϕ)\text{attrs}(\phi)attrs(ϕ):表达式ϕ\phiϕ中提到的属性集合。
- 评估(Definition 9):eval(ϕ,t)\text{eval}(\phi, t)eval(ϕ,t)在元组ttt上计算ϕ\phiϕ的值。
扩展运算符(Definition 10):
- 输入:映射关系r=(A,I)r = (A, I)r=(A,I),属性a∉Aa \notin Aa∈/A,扩展表达式ϕ\phiϕ。
- 输出:r′=(A∪{a},I′)r' = (A \cup \{a\}, I')r′=(A∪{a},I′),其中I′={t∪{a→eval(ϕ,t)}∣t∈I}I' = \{ t \cup \{a \to \text{eval}(\phi, t)\} \mid t \in I \}I′={t∪{a→eval(ϕ,t)}∣t∈I}。
示例:
- ϕ=(toInt,a3)\phi = (\text{toInt}, a_3)ϕ=(toInt,a3):将a3a_3a3的值转换为整数。
- 应用Extenda4ϕ(r)\text{Extend}_{a_4}^{\phi}(r)Extenda4ϕ(r):新属性a4a_4a4包含转换后的值(无效值则为ϵ\epsilonϵ)。
4.3 关系代数运算符
投影(Projection, Definition 11):
- ProjectP(r)\text{Project}_P(r)ProjectP(r):保留属性集PPP,删除其他属性。
等值连接(Equijoin, Definition 12):
- EqJoinJ(r1,r2)\text{EqJoin}_J(r_1, r_2)EqJoinJ(r1,r2):基于属性对集合J⊆A1×A2J \subseteq A_1 \times A_2J⊆A1×A2连接两个关系(要求A1∩A2=∅A_1 \cap A_2 = \emptysetA1∩A2=∅)。
并集(Union, Definition 13):
- Union(r1,r2)\text{Union}(r_1, r_2)Union(r1,r2):要求r1r_1r1和r2r_2r2模式相同。
4. RML到代数的转换(Algorithm 1)
核心思想:将RML映射(RDF图描述)转换为代数表达式,从而形式化RML语义。
步骤:
- 规范化:应用SPARQL更新查询(附录A),将RML映射转换为标准形式(如扩展快捷属性、确保每个三元组映射只有一个谓语-对象映射等)。
- 迭代每个三元组映射:
- 源运算符:使用SrcAndRootQuery\text{SrcAndRootQuery}SrcAndRootQuery(Definition 14)获取数据源和根查询,使用ExtractQueries\text{ExtractQueries}ExtractQueries(Algorithm 2)从术语映射中提取查询表达式(生成属性-查询映射PPP)。
- 扩展主语和谓语:使用CreateExtExpr\text{CreateExtExpr}CreateExtExpr(Algorithm 3)创建扩展表达式,生成asa_sas和apa_pap。
- 处理对象映射:
- 如果是引用对象映射(join),创建另一个源运算符并执行等值连接。
- 否则,直接扩展生成aoa_oao。
- 处理图映射:扩展生成aga_gag(若未指定,使用默认图IRI)。
- 合并:所有三元组映射的结果通过并集合并。
Algorithm 2(ExtractQueries):从术语映射中提取查询表达式(包括引用、模板中的占位符、join条件中的子查询)。
Algorithm 3(CreateExtExpr):根据术语映射类型(常量、引用、模板)创建扩展表达式,使用扩展函数(如toIRI\text{toIRI}toIRI、toLiteral\text{toLiteral}toLiteral、concat\text{concat}concat)。
5. 代数等价规则(用于优化)
6.1 投影下推(Projection Pushing)
-
Proposition 1:如果attrs(ϕ)∩A⊆P\text{attrs}(\phi) \cap A \subseteq Pattrs(ϕ)∩A⊆P,则:
ProjectP∪{a}(Extendaϕ(r))=Extendaϕ(ProjectP(r)) \text{Project}_{P \cup \{a\}} \left( \text{Extend}_a^{\phi}(r) \right) = \text{Extend}_a^{\phi} \left( \text{Project}_P(r) \right) ProjectP∪{a}(Extendaϕ(r))=Extendaϕ(ProjectP(r))即:投影可下推到扩展之前,减少中间结果大小。
-
Proposition 3:源运算符上的投影可消除(直接调整PPP):
ProjectP(Source(s,q,P))=Source(s,q,P′) \text{Project}_P \left( \text{Source}(s, q, P) \right) = \text{Source}(s, q, P') ProjectP(Source(s,q,P))=Source(s,q,P′)其中P′P'P′是PPP到PPP的限制。
6.2 扩展运算符的推拉(Pushing/Pulling Extend)
-
Proposition 5:如果attrs(ϕ)∩A2=∅\text{attrs}(\phi) \cap A_2 = \emptysetattrs(ϕ)∩A2=∅,则:
Extendaϕ(EqJoinJ(r1,r2))=EqJoinJ(Extendaϕ(r1),r2) \text{Extend}_a^{\phi} \left( \text{EqJoin}_J(r_1, r_2) \right) = \text{EqJoin}_J \left( \text{Extend}_a^{\phi}(r_1), r_2 \right) Extendaϕ(EqJoinJ(r1,r2))=EqJoinJ(Extendaϕ(r1),r2)即:扩展可下推到连接之前(若依赖关系允许),减少连接后处理的数据量。
-
Proposition 6:两个扩展运算符可交换(如果互不依赖)。
6. 直观解释与应用场景
- 直观解释:代数类似于关系代数,但专门针对RDF生成,处理异构数据源和R术语转换。源运算符像“扫描”,扩展运算符像“计算列”,连接和投影用于整合和筛选数据。
- 应用场景:
- 优化映射计划:通过代数等价规则重写计划,减少内存使用和执行时间(例如提前投影)。
- 形式化语义:为RML等语言提供精确语义,确保实现一致性。
- 语言无关基础:可支持多种映射语言(如R2RML、SPARQL-Generate)。
7. 示例说明
假设CSV数据:
id,firstname,age
1,Alice,23
2,Bob,unknown
RML映射片段:
ex:tm rml:logicalSource [ rml:source "data.csv"; rml:referenceFormulation ql:CSV ];
rr:subjectMap [ rr:template "http://example.org/{id}"; rr:termType rr:IRI ];
rr:predicateObjectMap [ rr:predicate rdfs:label;
rr:objectMap [ rml:reference "firstname" ] ].
代数转换:
- 源运算符:Source(s,ϵ,P)\text{Source}(s, \epsilon, P)Source(s,ϵ,P),其中P={a1→id,a2→firstname}P = \{a_1 \to \text{id}, a_2 \to \text{firstname}\}P={a1→id,a2→firstname}。
- 扩展主语:Extendasϕs\text{Extend}_{a_s}^{\phi_s}Extendasϕs,其中ϕs=toIRI(concat("http://example.org/",a1),base)\phi_s = \text{toIRI}(\text{concat}("http://example.org/", a_1), \text{base})ϕs=toIRI(concat("http://example.org/",a1),base)。
- 扩展谓语:Extendapϕp\text{Extend}_{a_p}^{\phi_p}Extendapϕp,其中ϕp=rdfs:label\phi_p = \text{rdfs:label}ϕp=rdfs:label(常量)。
- 扩展宾语:Extendaoϕo\text{Extend}_{a_o}^{\phi_o}Extendaoϕo,其中ϕo=toLiteral(a2,xsd:string)\phi_o = \text{toLiteral}(a_2, \text{xsd:string})ϕo=toLiteral(a2,xsd:string)。
- 扩展图:Extendagϕg\text{Extend}_{a_g}^{\phi_g}Extendagϕg,其中ϕg=rr:defaultGraph\phi_g = \text{rr:defaultGraph}ϕg=rr:defaultGraph。
- 投影:保留{as,ap,ao,ag}\{a_s, a_p, a_o, a_g\}{as,ap,ao,ag}。
最终生成RDF三元组:
- (http://example.org/1,rdfs:label,"Alice")(\text{http://example.org/1}, \text{rdfs:label}, "Alice")(http://example.org/1,rdfs:label,"Alice")
- (http://example.org/2,rdfs:label,"Bob")(\text{http://example.org/2}, \text{rdfs:label}, "Bob")(http://example.org/2,rdfs:label,"Bob")
更多推荐
所有评论(0)