没有合适的资源?快使用搜索试试~ 我知道了~
将SPARQL查询结果转换为链接数据客户端
1http://dbpedia.org/sparql7750将SPARQL查询的JSON输出转换为链接数据客户端0Pasquale LisenaEURECOM SophiaAntipolis,法国pasquale.lisena@eurecom.fr0Raphaël TroncyEURECOM SophiaAntipolis,法国raphael.troncy@eurecom.fr0摘要0SPARQL端点是访问链接数据的一种可能方法。然而,以JSON序列化的SPARQL查询结果不适合直接在最终用户应用程序中由Web开发人员直接使用,他们经常需要合并变量绑定产生的值。在这项工作中,我们提出了一种通用方法,该方法在JavaScript模块中实现,同时将描述SPARQL查询和期望输出形状的JSON文件作为输入。0CCS概念0• 信息系统 →数据访问方法;语义Web描述语言;查询语言;抽取、转换和加载;0关键词0SPARQL,JSON,JSON-LD,转换器,JavaScript0ACM参考格式:Pasquale Lisena和RaphaëlTroncy。2018年。将SPARQL查询的JSON输出转换为链接数据客户端。在WWW '18Companion:2018年Web会议伴侣,2018年4月23日至27日,法国里昂。ACM,美国纽约,纽约,5页。https://doi.org/10.1145/3184558.318873901 引言0SPARQLW3C推荐[5]不仅定义了用于表示RDF数据的查询语言,还定义了检索数据的协议,包括XML、CSV/TSV和JSON[9]的标准格式。特别是后者,旨在通过与JavaScript的完全兼容性来简化Web(以及非Web)应用程序对数据的使用。然而,数据模型在数据之间的Web(RDF,面向图形)和Web应用程序(JSON,面向文档)之间的性质是非常不同的。实际上,SPARQL端点的输出是满足查询的所有可能绑定(形式为<变量,值>),这对于有效的客户端处理来说并不方便。当前的习惯、专业知识和Web应用程序的编码技术使得开发人员更容易处理嵌套对象,而不是处理三元组。0本文在知识共享署名4.0国际许可(CC BY4.0)下发表。作者保留在个人和公司网站上传播作品的权利,并附上适当的归属。WWW'18 Companion,2018年4月23日至27日,法国里昂,© 2018IW3C2(国际万维网会议委员会),根据知识共享CC BY 4.0许可发布。ACM ISBN978-1-4503-5640-4/18/04。https://doi.org/10.1145/3184558.31887390例如,让我们检索一个包含意大利城市列表的列表,其中包含它们的名称和来自DBpedia的插图,限制为前100个结果。0SELECT * WHERE {?city a dbo:City;dbo:country dbr:Italy; foaf:depiction?image; rdfs:label ?name.} LIMIT 1000输出 - 其中图1包含一个摘录 -难以阅读和操作。图2中描述的输出,其中包含结果数量和属于每个结果的不同值,更紧凑且准备好被消费。01.1 网页开发人员要求0我们描述了开发人员在处理SPARQLJSON输出时面临的四种不同需求:1.跳过无关的元数据。典型的SPARQL输出包含许多通常对Web开发人员无用的元数据。这是head部分的情况,其中包含了结果中可能找到的变量列表。实际上,开发人员完全忽略了这部分,并直接在JSON树中检查某个属性的可用性。2.减少和解析。属性的值始终包装在一个对象中,该对象至少具有type(uri或literal)和value属性,其中包含信息。因此,此信息在JSON结构的较深层级上绑定,而开发人员期望的层级不同。这使得操作更加笨拙。此外,每个文字都以带有数据类型的字符串值表示。结果是,数字和布尔值需要转换后才能使用。3.合并。以可视化界面为例,显示博洛尼亚的各种语言名称意味着合并前两个绑定元素的结果,同时注意保留城市的所有不同名称和图像的唯一但重复的值。当具有多个值的属性数量增加时(即多语言名称、多语言描述、一组图像),合并变得必不可少,并且端点输出包含每个值组合的结果。当所需的输出预计具有更深的结构时,这项任务变得更加困难 -即每个城市最著名公民的名字和姓氏不能合并在两个不同的数组中,而是更适合于对象数组。0Developers Track WWW 2018,2018年4月23日至27日,法国里昂2https://github.com/maxlath/wikidata-sdk/blob/master/docs/simplify_sparql_results.md3https://www.w3.org/community/rdfjs/7760图1:从SPARQL查询的JSON输出摘录。它包括3个结果,其中2个(A,B)指向同一个实体(dbr:Bologna)。04.映射。Web开发人员可能希望将结果映射到另一个结构或词汇,例如schema.org。01.2 转换输出0在本文中,我们介绍了一个名为SPARQLTransformer的JavaScript模块,旨在将JSON输出转换为所选结构。该方法依赖于一种基于JSON的新型查询语言,能够同时指定查询和结果结构。0图2:SPARQL查询的期望JSON-LD输出。0该实现受到JSON-LD语法的启发。JSON的这个版本在其标准中定义了一些有趣的链接数据可能性,例如分配标识实体的URI(@id),定义其类别(@type),声明文字的语言(使用@language/@value)。然而,SPARQLTransformer能够生成任何形状的JSON,其中JSON-LD占据了特殊的位置。在两种可用的查询语法(普通JSON和JSON-LD)中,我们将使用使用JSON-LD的示例,而存储库的README完全解释了如何使用JSON。该模块的完整文档和更多示例可在https://github.com/D2KLab/sparql-transformer上找到。02 相关工作0有关在实际应用中使用SPARQL输出的问题已在[1]中进行了探讨,其中提出的解决方案特定于生成HTML报告。各种工作已经为Web数据和开发人员之间提供了桥梁。其中,我们可以提到grlc,这是一个从GitHub存储库中包含的SPARQL查询自动生成WebAPI的软件[7]。Wikidata SDK[6]通过一个精确的函数2来解决SPARQLJSON输出的复杂性问题,该函数通过读取变量名将JSON输出转换为简化版本。该实现负责减少和解析任务,但它没有解决合并问题。向JavaScript开发人员提供更简单处理RDF的方法也吸引了W3CRDFJS社区小组的努力[2],该小组为JavaScript环境中的RDF数据的互操作性制定了低级接口规范。他们的方法试图保留信息的三元组格式和RDF的面向图形的模型。0Developers Track WWW 2018,2018年4月23日至27日,法国里昂{}{}}7770将RDF源转换和映射的尝试导致了SPARQL模板转换语言(STTL)[3]的出现。该语言允许定义转换模板(作为字符串),其中SPARQL查询的结果将被填充。此外,它还提供了大量的函数,特别是与LDScript[4]结合使用时。尽管转换是STTL的目标之一,但它既不专注于转换为JSON-LD,也不专注于合并绑定结果,如第1节所述。W3CSPARQL规范本身包括一种名为CONSTRUCT的查询格式,用于从端点提取一组三元组,这与其实际内容不同,也可以包含映射[5]。它以图形形式返回输出,遵循标准SPARQL输出之一,包括JSON-LD版本。但是,它不解析文字,而是始终表示为对象。与开发人员相比,这种格式比SELECT更不受开发人员的欢迎,因此开发人员对其不太熟悉。此外,它不允许使用聚合函数。因此,无法仅依靠CONSTRUCT来塑造具有预定义结构的JSON。这也可以通过sparql-to-jsonld进行证明,它是一个命令行库,旨在通过3个不同的输入(SELECT查询、CONSTRUCT或DESCRIBE查询和JSON-LD框架)将SPARQL转换为JSON-LD [8]。最后,JSONSchema是一种定义JSON对象结构的格式。尽管它是验证表单和API的强大工具,但对于JSON重塑目的来说,它并没有明显的好处[10]。03使用查询模板化结果0这项工作的策略依赖于使用单个JSON对象来定义查询和预期的结构(或原型)输出。与SPARQLCONSTRUCT不同,查询和最终结构不是查询的两个不同部分,而是同时表达的。这种意图的结合通过将预期的结果格式 - JSON -作为查询方言本身来加强。支持两种格式(和两种类型的输出):普通JSON和JSON-LD。除非另有规定,前者使用与JSON-LD相同的键,而不是在其前面加上@符号。这两种格式的语法由两个主要部分组成:原型定义和根$属性。对于JSON-LD版本,预计会有一个@context属性来指定上下文。03.1原型定义0@graph属性(或proto,对于普通JSON语法)包含用户期望的结果的原型。原型中的值可以以以下方式开始:•一个问号“?”(如?id或?city),表示该值应该由同名SPARQL变量的值替换;•一个“$”符号,标识需要由软件处理的部分;•任何有效值,将按原样出现在输出中,不依赖于查询结果。0"@context":"http://schema.org/","@graph":[{0"@type":"City","@id":"?id","name":"$rdfs :label $ required $ lang : it","image":"$foaf :depiction $ required"0}],"$where":[0"?id a dbo : City","?id dbo : countrydbr : Italy"0],"$limit":1000清单1:JSON-LD格式的查询0"@context":"http://schema.org/","@graph":[{0"@id":"?city","name":"$rdfs :label","containedInPlace":{0"@id":"?region","name":"$rdfs :label $ lang : it"0}],"$where":"?id dbo : region ?region"0清单2:查询可以包含嵌套对象。两个rdfs:label分别指的是?city和?region。0当值应该从查询结果中获取时,使用以下语法声明:$[$modifier[:option]...]0主要部分是SPARQL谓词(属性或路径,例如rdfs:label,foaf:depiction等)。谓词的对象会自动分配,除非存在$var修饰符。谓词的主语是结构中最近的@id的变量。如果此变量不存在,默认设置为?id。这允许超越一组平面的基本属性,并在JSON结构的不同级别上拥有对象:每个对象只要拥有@id,就像嵌套原型一样行为。清单2显示了一个实际示例,通过在containedIn属性中表示每个城市的相对区域。该属性由一个包含id和label的对象赋值。在这种情况下,谓词rdfs:label的主语不是?city(根@id),而是?region(更近的@id),并且对于对象的任何其他属性也是如此。这样可以避免编写比必要更长的属性路径。40谓词之后可以有一些修饰符,由相等数量的$符号分隔。这些修饰符将在0请参阅完整示例https://github.com/D2KLab/sparql-transformer/blob/master/query.examples.md0开发者跟踪WWW 2018年4月23日至27日,法国里昂7780属性输入描述0$where字符串,数组以三元组格式添加WHERE子句。0$values对象为指定的变量设置VALUES作为映射。0$limit数字限制SPARQL结果。0$distinct布尔值(默认为true)在SELECT中设置DISTINCT。0$orderby字符串,数组在输入中构建ORDER BY变量。0$groupby字符串,数组在输入中构建ORDER BY变量。0$having字符串,数组允许声明HAVING的内容。0$filter字符串,数组将内容添加为FILTER。0$prefixes对象以"foaf": "http://xmlns.com/foaf/0.1/"的格式设置前缀。0表1:支持的根$-属性0查询步骤并具有默认值,以便使开发人员检索到最大的信息。例如,除非指定为$required,否则所有值都是可选的。$var修饰符具有特殊的作用,因为它允许将特定的SPARQL变量分配为对象(例如$var:?myVar),以便可以在其他修饰符中引用它。其他可能性包括按语言进行过滤($lang:it)或对这些值进行抽样($sample)。如前所述,某些属性的值可以是SPARQL变量(例如?id),它们将被传输到输出中并替换为其查询结果值。这些属性也可以具有与前面相同的修饰符,例如使它们成为必需的修饰符。03.2 根$-属性0一些根属性(以$开头的键标识)可以访问不同的SPARQL功能。它们不会被传输到输出中,仅在查询级别上考虑。这些属性的名称与SPARQL中的保留关键字完全对应($limit,$filter,$groupby,$orderby等),因此对于熟悉查询语言的开发人员来说,它们的解释是直接的。它们通常支持单个值或数组。例如,$where就是这种情况,它可以指定WHERE子句(以三元组格式)并将其添加到原型自动生成的子句中。表1显示了当前实现的$-属性。04 实现0SPARQL转换器是一个库,它接收以JSON格式描述的查询作为输入,将其转换为SPARQL查询,向端点发出请求,并返回所需形式的JSON输出。它作为JavaScript模块实现,可以在浏览器和Node.JS环境中运行。它由三个按顺序工作的部分组成,如图3所示。输入由解析器读取,其目标是从中提取SPARQLSELECT查询和原型。我们之所以依赖于SELECT而不是CONSTRUCT的原因在第2节中有详细说明。根$-属性被收集并转换以匹配SPARQL语法。对于原型,它要求对于每个属性:•读取分配的SPARQL变量或自动生成一个;0图3:SPARQL转换器的应用架构。0• 将其添加到SELECT中的列表或变量中; • 读取和解释修饰符; •如果声明了谓词,则将其分配给最近的@id中获取的对象和主题; •根据前面的几点,生成WHERE子句、FILTER等。这部分的两个输出是一个SPARQL查询和一个清理过的原型,其中所有的值都是SPARQL变量(例如 "@id":"?id","name":"?v0"),稍后将用作占位符。SPARQL查询被传递给负责向SPARQL端点(可以在输入中指定)发出HTTP请求以收集结果的查询执行器。在特殊需求的情况下,这部分可以由最终开发人员完全替换为自定义函数,该函数接收生成的SPARQL查询作为输入,并通过Promise返回结果。05 它在内部依赖于Virtuoso SPARQL Client,https://github.com/crs4/virtuoso-sparql-client。0开发者跟踪WWW 2018,2018年4月23日至27日,法国里昂7790最后一部分是Shaper。首先,它根据结果项的数量创建与原型相同的实例,将占位符替换为真实数据。如果某些结果不包含某个特定值- 这在变量是OPTIONAL时会发生 -它将从实例中删除。然后,它将具有相同@id的对象合并在一起,根据需要将属性值转换为数组,并附加所有不同的值。嵌套对象也参与了这一步骤:如果它们共享@id或所有属性的值,它们将以相同的方式合并,否则它们被视为不同并在一个数组中聚合。如果查询对象使用了JSON-LD语法,该模块将结果打包成JSON-LD结构,通过将其包装在@graph中并添加所需的@context。最后将结果返回输出。05 结论和未来工作0在Web环境中简化处理SPARQL结果的需求促使我们基于JSON的使用定义了一种新的查询端点策略。这种策略在一个名为SPARQLTransformer的JavaScript模块中得到了实现。这项工作旨在解决开发人员在处理SPARQLJSON结果时经常遇到的一些问题。其中包括:•同时编写查询和预期输出;•根据数据类型解析值;•给结果赋予与默认检索到的<变量,值>项的扁平集不同的结构;•合并描述相同实体的结果;•将结果映射到不同的词汇表;•为RDF数据实现JSON-LD中间件。考虑到它仅使用JS和JSON,它的用例很容易包括Node.JS环境(例如,实现WebAPI)或直接在浏览器中(直接检索和使用来自端点的数据)。SPARQLTransformer旨在满足开发人员的最常见需求,但其限制是很难获得与SPARQL这样的成熟查询语言相同的表达能力。0实现涵盖了SPARQL规范的不同特性,而进一步的特性将作为未来的工作。进一步的研究将调查是否最终可能覆盖其他类型的SPARQL操作,如ASK、INSERT和DELETE。最后,我们计划对该库进行更好的评估。这个目标将通过两种不同的方式实现。一方面,我们将尝试将SPARQLTransformer应用于现有的查询集合,以评估其覆盖范围。另一方面,我们将实现一个Web界面,使最终开发人员能够测试该库,还可以使用来自文档的示例。0致谢0这项工作得到了法国国家研究机构(ANR)在DOREMUS项目中的部分支持,资助号为ANR-14-CE24-0020。0参考文献0[1] Sunitha Abburu和G Suresh Babu. 2013. 将SPARQL查询结果格式化为HTML报告.《国际高级计算机科学与应用杂志》(IJACSA)4, 6 (2013), 144–148. [2] ThomasBergwinkl, Michael Luggen, elf Pavlik, Blake Regalia, Piero Savastano和RubenVerborgh. 2017. 接口规范:RDF表示,草案报告. 技术报告. W3C. [3] Olivier Corby,Catherine Faron-Zucker和Fabien Gandon. 2015.一种通用的RDF转换软件及其应用于联接数据常用语言的在线翻译服务.《第14届国际语义网会议(ISWC)》. 美国宾夕法尼亚州伯利恒市, 150–165. [4] OlivierCorby, Catherine Faron-Zucker和Fabien Gandon. 2017. LDScript:一种联接数据脚本语言. 《第16届国际语义网会议(ISWC)》. 奥地利维也纳, 208–224. [5]Steve Harris和Andy Seaborne. 2013. SPARQL 1.1查询语言 - W3C推荐. 技术报告. W3C.[6] Maxime Lathuilière. 2015. Wikidata SDK. GitHub存储库,https://github.com/maxlath/wikidata-sdk. (2015). [7] Albert Meroño-Peñuela和RinkeHoekstra. 2016. grlc使GitHub具有联接数据API的味道. 《语义Web - ESWC2016卫星活动》. 342–353. [8] Jindřich Mynarz. 2016. sparql-to-jsonld. GitHub存储库,https://github.com/jindrichmynarz/sparql-to-jsonld. (2016). [9] Andy Seaborne.2013. SPARQL 1.1查询结果JSON格式 - W3C推荐. 技术报告. W3C. [10] AustinWright和Henry Andrews. 2017. JSON Schema: 一种描述JSON文档的媒体类型.技术报告. 互联网工程任务组.https://datatracker.ietf.org/doc/draft-handrews-json-schema/02018年4月23日至27日,法国里昂举办的开发者专题WWW 2018
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功