关联数据映射语言:R2R,本文主要内容关键词为:语言论文,数据论文,R2R论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
1 引言
2010年11月,关联开放数据(Linking Open Data,LOD)项目组发布了关联数据规范,其核心规范/协议模型见图1[1]。
图1 关联数据规范/协议
由上述规范/协议结合关联数据发布规则可知,关联数据的本质是将本体和相关数据资源按照RDF格式的标准链接起来,同时要求支持HTTP URI访问和RDF查询语言SPARQL检索。根据W3C SWEO研究组的统计,截至2011年9月,关联数据云(LOD Cloud)含有310亿个 RDF三元组,5亿个RDF链接[2](见图2)。由此推算,涉及关联关系的三元组与三元组总量之比不到3.5%,96%的RDF三元组有建立 RDF链接的潜力却无RDF关联。随着关联数据云中实例数据的快速增长,这一矛盾将进一步加剧。
图2 关联数据云2007—2011年增长态势
针对发布后的关联数据集,不同数据源用多种本体词汇描述相同实体类型,RDF关联表现为对上述相同实体创建RDF类型关联。创建更多RDF关联受词汇异构和实例属性值关系的制约。基于此,国外学者初步形成了发现关联和映射关联两种思路。其中,发现关联是利用已创建的直接关联发现更多不同数据集间的间接关联,从而达到创建更多RDF链接的目的。近年来研究集中在运用一定的方法发现实例记录的等同关系,代表成果包括机器学习方法[3-5]、各种相似度算法应用[6-8]、实例关联工具的开发[9-11]等。与上述思路不同,映射关联从描述数据集的本体词汇出发,消除因不同数据集对相同属性采用多种本体词汇进行描述导致的类或属性异构。由于关联数据规范允许数据发布者自由选择多种本体词汇混合使用以支持实例表示的灵活性,因此,这种自描述方式[12]形成的词汇异构在LOD中十分普遍,克服词汇异构有助于推动更多实例记录关联的创建。
由于缺乏细粒度的映射机制对描述关联数据集的本体词汇进行深层整合,RDF关联主要限于实例层,例如通过传统描述方法如owl: sameAs、skos:exactMatch等建立实例等同关联[13],此外也有用rdfs:subClassOf、rdfs:subPropenyOf、owl:equivalentClass、owl:equivalentProperty揭示不同本体词汇的等同或包含关系。受词汇异构的制约,更广泛的RDF关联无法得到揭示。面对上述困境,德国柏林自由大学学者比泽和舒尔茨提出关联数据映射框架R2R[14],该方法拓展了RDF关联思路,丰富了映射关联机制,为 LOD构建面向领域应用的集成服务环境提供了新途径。
R2R语言是比泽和舒尔茨于2010年夏季发布的RDF指令语言,目前还处于发展阶段。尽管如此,R2R语言的简洁性、易扩展性、描述的细粒度以及与语义网联系紧密等特点已逐渐引起人们的重视。2009年以来,关联数据的研究已引起国内图书情报界的广泛兴趣,但尚未发现运用R2R语言探索关联数据映射的成果,R2R研究尚未与国际同步。为此,本文在研究 R2R框架的基础上,结合在Eclipse HELIOS(集成JDK 1.6)平台中通过映射处理程序接口调用 R2R映射实例的体会,向国内同行解读R2R语言在关联数据映射中的用法。
2 R2R语言
R2R语言的特色在于一方面能够实现不同 RDF数据集术语映射的创建,另一方面可使生成的映射直接发布为关联数据。作为R2R框架的组成部分。R2R语言包括映射属性、表示规则、函数与修饰符、映射元数据等内容[15]。
2.1 映射属性
映射属性是R2R语言的基础,通过映射属性可创建不同的映射语句,为不同类型RDF词汇表(本体)类或属性构建映射。其类型有六种,如表1所示。
R2R定义了ClassMapping和propertyMapping两种映射类型的类。类在R2R映射语句中充当宾语,声明创建映射的类型,而映射属性为谓语。映射声明、源模式和目标模式语句属强制类型,任何R2R映射均要采用;其他映射属性属非强制类型,其应用根据需求适时采用。例1反映了上述属性在具体环境中的用法。
例1:
@prefix mp:<http:// www4.wiwiss.fu-berlin.de/R2Rmappings/>.
mp:DBpediaToFoafMapping rdf:type r2r:ClassMapping;
r2r:prefixDefinitions “fog:<http:// xmlns.com/foaf/0.1/>.dbpedia:<http:// dbpedia.org/ ontology/>”;
r2r:sourcePattem“? SUBJ rdf:type dbpedia:Person”;
r2r:targetPattern“? SUBJ rdf:type foaf:Person”.
这里构建数据集dbpedia中Person类到本体foaf中Person类之间的映射,第一行声明映射的名称空间前缀;第二行定义映射URI并声明映射类型为类映射;随后定义源模式和目标模式中用到的前缀;第四行和第五行分别定义源模式和目标模式,除空节点外,一般要使用?SUBJ符号,这是R2R映射规则的基本要求。
2.2 表示规则
R2R语句在创建过程中需要遵循映射创建规范、函数调用规范、修饰符使用规范等多种表示规则。本节主要介绍创建规范,其他规范将在2.3节阐述。笔者通过运行R2R映射实例总结得出R2R存在以下表示规则:
(1)R2R映射语句由“资源—映射属性—三元组文字”结构组成。以例1的源模式语句mp: DBpediaToFoafMapping r2r:sourcePattern”?SUBJ rdf:type dbpedia:Person”为例,其“资源”是映射 URImp:DBpediaToFoafPersonMapping,映射属性是r2r:sourcePattern,”?SUBJ rdf:type dbpedia: Person”则是三元组结构,?SUBJ,rdf:type和dbpedia:Person分别充当主谓宾,其整体又是作为映射语句中的文字值。三元组文字表示与 SPARQL[16]查询的主谓宾结构一致。与此相同的还有目标模式语句和转换语句;而前缀定义格式则遵循“资源—映射属性—字符串文字”规则。值得指出的是,结构中的三元组为文字定义,应与资源定义区别开来,故表示时须加引号。
(2)映射声明语句、源模式语句和目标模式语句是构建映射的基础语句,其他语句依应用情形的需要选择表示。
(3)源模式和目标模式语句有两个约束:其一,变量不允许在三元组文字的谓语位置;其二,?SUBJ是R2R专门的变量,在源模式和目标模式中均要用到,其目的是用于标识数据集的主语URI。
(4)R2R支持Turtle语法[17]规则。R2R构建RDF数据集间的映射需选择一种RDF序列化方式实现信息建模,除支持RDF/XML语法以 RDF树结构表示外,R2R语句也支持Turtle语法的RDF序列化,Turtle较RDF/XML和N-Triple[18]序列化格式更为简洁,目前在基于语义网的各类应用中倍受青睐。例如使用a代替rdf: type,通过分号和逗号分别实现RDF陈述的主语省略和主谓省略,以#字符表示注释。
(5)各语句的先后顺序无严格要求。例如 r2r:prefixDefinitions语句置于源模式语句前或目标模式后对程序运行结果均无影响。
(6)一般将映射声明语句(例1中的第二句)拆分成两段表示。表示映射语句的主语占一行,谓语和宾语占一行。突出映射URI便于其他映射语句如r2r:mappingRef调用该映射。
2.3 R2R函数与修饰符
R2R语言提供的函数和修饰符在映射属性 r2r:transformation的支持下可满足词汇修饰和复杂属性值转换的需求。作为R2R语言颇具特色的功能之一,R2R函数可有效改善R2R应用性能,拓展关联数据映射的范围。R2R函数和修饰符主要应用于变量,函数一般应用于r2r: transformation语句中,修饰符支持变量的数据类型、语言标记、变量URI与文字值之间的相互转换等修饰情形。
截至2011年9月,R2R语言提供字符串函数(6种)、算术函数(6种)、列表函数(6种)和 XPath函数(29种以上)四种类型供在映射转换中使用。这些函数综合了Java语言函数、XML路径语言XPath函数的重要功能,并与它们有一定的相关性。其中算术函数较为简单,包括加、减、乘、除、求整和求余六类运算,与Java中的二元算术运算一致。字符串函数(见表2)在应用中最为广泛,XPath函数是R2R语言于2011年7月推出的新内容,尚处于发展中。有关XPath函数的功能见文献[19]。
由表2可知,R2R的字符串函数有六类,主要包括插入、连接、拆分、替代等字符串处理功能。
例2的应用情景是构建词汇foaf:6rslName, foaf:lastNaBe和词汇v:n的映射.且要实现姓(last Name)和名(first Name)的交换。这里采用连接函数concat(),通过转换策略语句r2r:transformation构建变量name的转换规则?name= coneat(?1,'.',?f)。这样原数据集的2n个三元组记录经转换后在新数据集中生成了n个三元组,新三元组的本体词汇由v:n替代。
列表函数与Java语言有类似之处,表3总结了列表函数的功能。
由表3可知,R2R列表函数主要用于输出数组元素、截取子数组、返回数组长度等。与Java语言数组的表示一致,R2R列表函数中的数位从0开始,首位为a0,依此类推。例如sublist(list(5,6,7,8,9),1,4)表示截取数位在第1位到第4-1位的所有序列,即数位a1,a2,a3,故输出为6,7,8。同理,subListByIndex(list(5,6,7,8,9),3,1)表示数位为a3和a1的输出元素。
此外,R2R也提供条件三元运算,其表示规则为:
[式1X式2?式3:式4]
规则中各式表示参与运算的表达式,X是任一比较运算符(=,>,<,<=,>=,!=),表示“式1”和“式2”之间的关系,该三元运算的含义是先求式1×式2的值,若为真,则执行式3并返回式3的结果;若为假,则执行式4并返回式4的结果。例如:
concat([?sex=female'?'Ms.':Mr.'],? familyname)”
上例在concat函数中嵌套条件三元运算构建称呼与姓氏的连接,即若为女性则与Ms.连接,反之与Mr.连接。
由于R2R函数自身的不健壮性,R2R语言提供了r2r:importFunction属性来实现外部函数的导入,以弥补R2R函数的不足。可通过配置类路径、本地文件、远程URL方式等实现外部函数的装载。
除使用函数功能外,R2R语言在变量中还可使用以下四类修饰符(见表4)。
由表4可知,R2R修饰符与SPARQL类似。修饰符均用于三元组文字的宾语,故常用rdfs:label属性充当谓语。值得注意的是,URI修饰符不得用于修饰谓语。正如2.2节所述,三元组文字的谓语必须是明确的URI,而不能由变量充当。例如语句“?SUBJ?p?o”在程序运行中会出现异常,因为该谓语是变量?p,不符合R2R语法规定。
2.4 映射元数据
如前所述,笔者以映射属性为起点介绍了如何通过表示规则、函数与变量修饰符创建映射程序。上述映射程序尚未对映射本身进行描述。在R2R中,描述映射本身的属性以及提供映射发现的属性统称为映射元数据。映射元数据一方面可构建映射URI与映射数据集和本体词汇的链接机制,为用户获得高质量的映射提供参考;另一方面可用于标注R2R映射,建立本体词汇与映射URI之间的关联发现。简言之,映射元数据用于支撑R2R映射的发布和发现机制(见表5)。
其中,前四组元数据用于r2r映射的发布,第五组用于构建映射词汇与映射URI之间的关联发现。除B2R提供的元数据外,在应用程序中通常还使用由RDF schema,Dublin Core提供的rdfs:label,rdfs:comment,dc:date,dc:creator等常用的元数据进行描述。例3阐述了映射元数据的有关用法。
例3-1:
mp:concatFirstAndLastNameMapping
rdfs:label “foaf to yard name property mapping and indivuals changed and concated”;
rdfs:comment“Name are transformed through changing places with each other”;
dc:date “2011-09-11”;
dc:creator<http:// www.w3.org/2006/ vcard/ns#/name/Bizer>;
r2r:mapsTo v:n;
r2r:dependsOn loaf:firstName;
r2r:dependsOn foaf:lastName;
r2r:soureeDataset mapping:foafVOID;
r2r:targetDataset mapping:vcardVOID.
例3-1通过元数据定义映射的元信息。首行是映射URI,随后四行定义了映射的标签及创建者来源信息,为映射质量评估提供元信息。接着通过mapsTo和dependsOn定义了R2R映射与目标数据集的本体词汇和源数据集的本体词汇。最后两行定义了源数据集和目标数据集的映射VOID描述。VOID词汇表(The Vocabulary Of Interlinked Datasets)是描述关联数据集本身的元数据集[20],W3C倡议发布关联数据应提供数据集本身的描述信息以促进关联数据集消费,在此背景下VOID应运而生,它本质上是一种本体。数据发布者可通过VOID对关联数据集进行著录描述、数据集VOID存档和VOID信息的部署;关联数据消费者则可通过它来发现和重用数据集及其映射本身的信息。由于 VOID框架描述数据集的全面性,其使用较Semantic Sitemaps更为普遍。正因如此,VOID有望成为描述关联数据集的W3C推荐标准[21]。
例3-1通过表5的前四组元数据提供了 R2R映射的发布属性,元数据r2r:hasMapping则提供了R2R映射的发现属性。那么二者有何区别呢?映射发布是从数据提供者的角度将映射本身的描述信息部署后发布到Web中,映射发现则是从映射消费者角度提供映射词汇与映射本身的关联发现,表示该本体词汇有相应的 R2R映射可供消费者使用。例3-2揭示了has- Mapping的使用。
例3-2:
v:n rdf:type owl:DatatypeProperty;
rdfs:domain owl:Thing;
rdfs:range xsd:string;
r2r:hasMapping mp:concatFirstAndLastNameMapping.
上例首先声明属性v:n属于数据属性,区别于对象属性(owl:ObiectProperty),rdfs:domain和 rdfs:range分别声明v:n的主语和宾语的取值范围是实例和字符串资源类型,mp:concatFirstAndLastNameMapping是映射URI,v:n通过 r2r:hasMapping元数据建立与映射URI的关联。映射消费者通过定向查询r2r:hasMapping,可发现映射词汇及关联的映射URI。通过发现机制共享网上已有的映射文件,可实现映射的有效重用。
从映射作用RDF位置的角度可将映射分为词汇层(Vocabulary,V)和实例层(Dataset,D)映射。词汇层用于转换术语属性,实现不同词汇间类的映射或属性的映射;实例层定义实例怎样转换,主要是消除属性值不一致,例如,统一不同的测量单位,或增加属性值的语义标签或数据类型。R2R语言一方面能够分别构建各层映射(V-V,D-D),另一方面也能实现彼此间的映射(V-D,D-V),见表6。例1就是V-V模式,例2将foaf:firstName和foaf:lastName两个本体词汇映射到v:n,并通过连接函数调整次序合并生成新的实例,则属于词汇层到实例层映射的V-D模式。
3 与SPARQL语言的比较
R2R语言是专门针对RDF数据集之间的转换而开发的映射语言,其命名(RDF dataset to RDF dataset,缩写R2R)即体现了上述基本目标。基于前文发现,R2R在应用中结合了 SPARQL、XPath、Java等的有关规则或函数功能。 R2R语言最突出的特点是借鉴了SPARQL语言,二者在表示上既有联系又有区别,其主要差异见表7。
例1至例3是R2R语言实例,下面例举 SPARQL语言的实例,通过对比揭示二者语法一致性特征。
例4:
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbprop:<http://dbpedia.org/property/>
SELECT?location
WHERE{?person rdfs:lable“George Washington”@en.?location dbprop:namedFor? person.}
该例用于SPARQL端点下的RDF查询,其目标是查找英文名为George Washington的地方。其中Where中的两个子句均用RDF三元组表示,说明SPARQL支持RDF三元组表示;变量?location表明SPARQL同样支持采用“?变量名”的方式定义变量(此外SPARQL和R2R均可用“$”表示变量定义);地名限定运用@en修饰字符串George Washington:通过RDF三元组谓词可看出,SPARQL支持PREFIX定义名称空间前缀;整体表示结构则反映了SPARQL也运用Turtle序列化方式。
尽管均支持RDF三元组表示,但SPARQL用于查询功能,而R2R则以映射为目的,因此二者又表现出多种语法差别。SPARQL围绕查询提供SELECT、CONSTRUCT、ASK和DESCRIBE等句法,R2R围绕映射提供源模式r2r:sonrcePattern、目标模式r2r:targetPattern、转换策略r2r: transformation等多种映射属性来支持映射语句的生成。SPARQL中的SELECT和DESCRIBE句法还支持用通配符(*)返回所有已知变量,而R2R通过?SUBJ这一特有变量定义来标识 RDF数据集的主语URI。在目标模式中?SUBJ所在位置支持使用空白节点,声明主语变量与其他属性的绑定;而SPARQL语言同样支持空白节点作为变量。
作为面向RDF的两种语言,二者在关联数据应用中互为补充,不可替代。发布到LOD中的RDF数据集,其采集除采用RDF dump静态获取外,更多通过SPARQL端点查询实现动态获取。采集到的JSON,RDF/XML,N-Triple,N3/ Turtle和TSV(如Freebase,Geonames的Dump文件)等多种格式混合的数据源经清洗预处理,随后构建R2R映射程序,生成的映射文件供映射消费者在Jena语义Web框架下通过映射处理程序接口调用,以支持面向领域应用的集成服务环境的创建。
4 结语
R2R语言是针对当前不同RDF数据集仅能构建实例等同关联关系和通过rdfs:subPropertyOf、owl:equivalentClass等定义本体词汇的等同和包含关系,而无法解决RDF数据集间的本体词汇异构和属性值转换问题开发的映射语言。作为在因特网上共享数据的方法,关联数据与其他方法的区别在于它是用自描述方式发布的,自描述方式会优先重用业界熟悉的知名本体,但由于知名本体通常不会覆盖发布数据的所有方面,为了提升关联数据的发布能力就要选择其他本体,包括选择自定义的本体词汇进行混合描述,这样就容易形成词汇异构。R2R语言为解决这一问题提供了程序化的解决方案。同时我们也看到,R2R语言整体还处于发展阶段,其缺陷与不足还有待我们在实践中进一步发掘。但毋庸置疑,R2R语言为我们研究关联数据映射提供了可兹参考的新思路。
R2R框架的应用才刚刚开始。围绕关联数据映射的研究,下一步一方面仍将密切跟踪 R2R框架的发展,另一方面将开展面向LOD数据集的映射整体案例研究。在此基础上,结合本体匹配的最新研究成果,从理论和实践两方面提升R2R框架在解决关联数据映射方面的使用效果。
修回日期:2012-02-03
标签:元数据论文; 三元组论文; 对象关系映射论文; 实例变量论文; 语言描述论文; rdf论文; r语言论文; uri论文;