语义 Web,Linked Data 和 Drupal,第 2 部分: 组合链接的数据集与 Drupal 7 和 SPARQL Views

本系列的第 1 部分探讨了最近合并到 Drupal 内容管理系统中的一些新概念,比如共享和重用数据现在如何变得更加轻松,因为这些技术淘汰了专用的 API,代之以一种机器可读格式 —— 资源描述框架 (RDF)。在本文中,学习如何利用如今的数据网络中已有的 Linked Data,以及如何使用来自不同端点的数据使 Drupal 7 网站更为充实。一个包含来自独立发布者的数据的真实用例提供了一些实际案例分析。

Stéphane Corlosquet, 软件工程师, MassGeneral Institute for Neurodegenerative Disease (MIND), MGH

//www.ibm.com/developerworks/i/p-scorlosquet.jpgStéphane Corlosquet 拥有爱尔兰 Digital Enterprise Research Institute (DERI) 语义 Web 领域的硕士学位。他是 Mass General Institute for Neurodegenerative Disease (MIND), MGH 的一位软件工程师,研究科学协作框架(一种基于 Drupal 的分发框架,用于构建生物医学领域研究人员的在线社区。Stéphane 为 Drupal 6 做出了重要贡献,是 30 位对 Drupal 7 核心贡献最大的人之一。他负责维护 Drupal 7 中的 RDF 模块,是 Drupal 安全团队的成员。关于他的更多信息可在 http://openspring.net/ 上找到。



Lin Clark, Drupal 开发人员, Digital Enterprise Research Institute, NUI Galway

http://www.ibm.com/developerworks/i/p-liclark.jpgLin Clark 是一名 Drupal 开发人员,专攻 Linked Data。她是多个 Drupal 模块(比如 Microdata 和 SPARQL Views)的维护人员,还积极参与了 W3C 的 HTML Data Task Force 和 Drupal 的 HTML 5 计划。她曾就读于卡耐基梅隆大学,现正在攻读 NUI Galway 的 Digital Enterprise Research Institute 的研究硕士学位。您可以在 lin-clark.com 上了找到关于她的更多信息。



2012 年 6 月 04 日

简介

在本系列的第 1 部分 “语义 Web,Linked Data 和 Drupal,第 1 部分:使用 PDF 公开您的数据” 中,介绍了合并到 Drupal 7 中的一些新功能。本文将介绍如何如何让 Web 数据更可互操作,让数据共享更加高效。一个示例将展示如何使用 Drupal 7 通过使用 RDF 公开数据来发布 Linked Data。

在本文中,学习如何利用网络上现有的 Linked Data。探索如何使用来自不同端点的数据丰富 Drupal 7,以及了解一个包含来自两个独立发布者的数据的真实用例。


场景:英国研究基金

本文中的场景来自一个真实的用例,其中的数据来自两个独立的发布者:DBpedia 和英国政府。

DBpedia 项目在 语义 Web,Linked Data 和 Drupal,第 1 部分:使用 PDF 公开您的数据 中已经介绍过,它从 Wikipedia 获取 infobox 信息并使该内容变得机器可读。作为 Linking Open Data 计划中最早和最大的成就之一,它包含超过 350 万个事物的信息并包含 1,850,000 个图像链接。所有数据通过一个 Creative Commons 属性提供,共享一个许可证,表明在您的 Drupal 网站上可以安全地重用它。

英国政府是最近才加入 Linking Open Data 运动的。依据网络发明者 Tim Berners Lee 先生的建议,该政府启动了一项计划,让政府机构和地方当局在线发布他们的公共数据。该政府非常重视发布越来越多的数据。在编写本文时,已有 5,400 个数据集可用。其中一些数据集可通过 SPARQL 端点以 RDF 形式提供,比如 Research funding 数据集。此数据集包括超过 43,000 条英国各种基金管理机构创立的项目的相关信息,包括:

参考资料 提供关于以下内容的更多信息链接:

  • Linking Open Data 计划
  • 一个查询数据的 SPARQL 端点
  • 来自英国政府的 5,400 个数据集
  • 研究基金数据集
  • 一个典型项目的信息
  • 使用 RDF 将不同的数据集链接在一起
  • 项目名称
  • 项目描述
  • 创立该项目的机构
  • 划拨的资金
  • 项目启动和目标结束日期
  • 授权引用编号
  • 项目状态(仍在运作或已关闭)

Linking Open Data 云是一个社区项目,它在网络上发布开放数据集并使用 RDF 将来自不同数据集的数据链接在一起。DBpedia 和 data.gov.uk Research funding 数据集在 Linking Open Data 云中都是非常重要的节点。在数据集之间建立链接意味着可以像浏览数据库一样浏览数据网络,从不同位置提取数据并将它合并在一起。

data.gov.uk Research funding 数据集包括 DBpedia 中的资源链接,支持将来自两个数据集的数据组合起来。来自 Research funding 数据集的每个项目都链接到其基金管理机构的 DBpedia URI。一个这样的基金管理机构的例子就是工程和自然科学研究委员会(Engineering and Physical Sciences Research Council,EPSRC),它的 DBpedia URI 为 http://dbpedia.org/resource/Engineering_and_Physical_Sciences_Research_Council。访问此 HTTP URI 将可以看到 DBpedia 拥有的关于此机构的信息:

  • 机构名称
  • 机构缩写
  • 机构职责描述
  • 地点
  • 主页

在图 1 中,部分 Linked Open Data 云显示了 data.gov.uk Research funding 数据集与 DBpedia 之间的链接。

图 1. Linking Open Data 云,data.gov.uk Research funding 数据集与 DBpedia 之间的链接
其中包含许多圆圈和箭头,但 data.gov.uk Research funding 数据集和 DBpedia 被圈起来并使用红色箭头相链接

现在,数据位于 Internet 上两个独立的页面中(一个页面针对一个代理,另一个页面针对一个具体项目),没有页面会聚合可以同时在这两个页面上找到的大量信息。如果可以构建一个页面来描述该机构,包含来自 DBpedia 的数据和 Research funding 数据集中该机构建立的所有项目的清单呢?在本文余下部分中,将构建这样一个包含 Drupal 7 和 SPARQL Views 的页面。


设置 Drupal 7 和需要的包

语义 Web,Linked Data 和 Drupal,第 1 部分:使用 PDF 公开您的数据 介绍了如何安装 LAMP 堆栈和开始使用 Drupal 7。对于本文中的用例,应该从 drupal.org 下载所有包。这些包是在编写本文时的最新版本。(请参阅 参考资料 获取各个链接)。

  • RDF Extensions 7.x-2.0-alpha1
  • SPARQL 7.x-2.0-alpha1
  • Views 7.x-3.0-beta3
  • SPARQL Views 7.x-2.0-alpha2
  • Entity API 7.x-1.0-beta8
  • CTools 7.x-1.0-alpha4

最新的模块版本推出后即可免费使用。可以使用 Drush 的包管理器(相当于 Drupal 的 apt-get 或 yum) 一次下载 Drupal 7 需要的所有包,如清单 1 所示。

清单 1. 使用 Drush 的包管理器下载 Drupal 7 需要的所有包
drush pm-download rdfx sparql views sparql_views entity ctools

将所有包下载到 /sites/all/modules 目录之后,启用:

  • SPARQL Views
  • RDF UI
  • Views UI 模块

Drupal 还将安装这些模块的依赖关系。或者使用: drush pm-enable sparql_views rdfui views_ui.

主要的 RDF 包需要 ARC2 库。请参阅 sites/all/modules/rdfx 中的 README.txt,了解更多说明。Drush 可节省时间,为您将 ARC2 下载到正确的位置,这使用以下命令完成: drush rdf-download.


SPARQL Views 简介

在深入介绍 SPARQL Views 之前,有必要知道它利用了 Views 的强大能力。Views,最流行的 Drupal 模块之一,用于构建各种格式的内容的清单。Views 允许站点管理员决定要显示哪些数据,如何使用灵活的用户界面显示它。

即使不熟悉查询语言的人也可以创建查询,使用过滤器和参数定制其查询,并使用大量包含模板的插件来呈现数据,比如 Google 图表和 jQuery Slideshows。因为该流程的所有部分都是可插入的,存在许多不同模块,扩展 Views 并使其成为了一个选择和呈现数据的强大工具。

视图通常显示某种相关的数据,比如一个组的成员、一个帖子列表、相册等等。以前的 Views 版本只能访问本地 Drupal 数据库中的数据,而 Views 3 可连接任何数据源并从任何地方提取数据:Flickr、Amazon S3、Solr 服务器等。SPARQL Views 添加了使用 Views 查询 SPARQL 端点并显示结果的功能,就像它们来自本地数据库一样。

告诉 Drupal 关于数据集的信息

Drupal 需要知道数据将来自何处。为此,您首先需要设置一些名称空间并注册两个将用于本示例的 SPARQL 端点。

  1. 要设置名称空间,单击管理工具栏中的 Configuration,转到 Web Services 块中的 RDF publishing settings 页面,然后选择 RDF namespaces 选项卡。Research funding 数据集使用一个具有以下名称空间的特定 RDF 模式:http://research.data.gov.uk/def/project/

    将此名称空间与 project 前缀相关联,如图 2 所示。对于 DBpedia,使用与名称空间 http://dbpedia.org/property/ 关联的前缀 dbp

    图 2. 注册 Research funding 数据集中使用的 project 名称空间
    屏幕显示了前缀和词汇表 URI 字段。前缀在字段中包含项目,词汇表 URI 包含 http://research.data.gov.uk/def/project/
  2. 要注册 SPARQL 端点,在管理工具栏中单击 Structure 并选择 SPARQL Endpoints Registry。图 3 给出了一个示例。通过输入每个 SPARQL 端点的标题和端点来添加它们:
    • DBpedia: http://dbpedia.org/sparql
    • Research funding: http://services.data.gov.uk/research/sparql
    图 3. SPARQL 端点注册表,包含两个数据集的端点
    包含我们的两个数据集的端点的 SPARQL 端点注册表

向 Drupal 描述数据集

您需要在 Drupal 中描述数据集,以便 SPARQL Views 知道您希望从数据集提取何种特定数据项。在 语义 Web,Linked Data 和 Drupal,第 1 部分:使用 PDF 公开您的数据 中已经说明,数据网络由拥有属性(谓语)和值(宾语)的资源组成。当查询 RDF 时,SPARQL Views 将需要知道哪些数据实际可供查询。这些属性在 Views 中称为字段。您需要在构建任何 SPARQL Views 之前定义这些字段。示例用例有两种类型的资源:agencyproject。对于每种资源类型,定义您感兴趣的字段,并定义什么 RDF 谓语可用于从各个数据集捕获其值。

单击管理工具栏中的 Structure 并选择 SPARQL Views resource types。单击 Add sparql views resource type 并输入您的每种类型的端点名称:agency 将与 DBpedia 相关联,project 将与 Research funding 端点相关联,如图 4 所示。

图 4. 创建 SPARQL View 资源类型
创建 SPARQL View 资源类型,选择了 Research funding endpoint。

现在两种资源类型都已添加到系统中,您可以添加希望用户查询每项资源的适当字段。在 Drupal 7 中创建字段非常简单,方法与为节点内容类型创建字段相同。

单击 agency 资源类型的 Manage fields, 并输入字段名称(比如 Description)。选择一个机器名称(通常与字段名称相同但使用小写)description,机器名称只能包含小写字符、数字和下划线。它在内部用于引用字段。对于字段类型,选择 Text,如图 5 所示,保存表单。

图 5. 添加与您希望从数据集提取的属性对应的字段
添加与您希望从数据集提取的属性对应的字段的表单

您然后应该填写字段配置表单。当保存该表单时,保留所有设置不动,除了最后一组字段。在这里指定用于从数据集提取此数据项的 RDF 谓语。该实例使用 rdfs:comment 作为 DBpedia 上的一个机构的 Description 字段,如图 6 所示。

图 6. 指定在数据集中用于查询给定值的 RDF 谓语
指定在数据集中用于查询给定值(在这里是一个机构的描述)的 RDF 谓语

表 1 显示用于 agency 资源类型的字段和相关 RDF 映射。

表 1. agency 资源类型的字段和相关 RDF 映射
名称rdfs:label
缩写dbp:abbreviation
描述rdfs:comment
主页foaf:homepage
位置dbp:location

表 2 给出了对应于 project 资源类型的字段和 RDF 映射。

表 2. 对应于 project 资源类型的字段和 RDF 映射
名称rdfs:label
参考号project:grantRefNumber
价值project:grant
抽象dc:abstract
基金管理机构project:funder

resource 类型创建上述表中的所有字段。当第二次创建字段名称时,确保使用了字段创建表单中的 Add existing field 行。您为 Drupal 字段选择的名称可以是任意的,无需与数据集中使用的 RDF 映射匹配。

准备一个页面来显示 SPARQL View 结果

最后,您需要一个容器来显示两个数据集的结果。示例使用了一个 Drupal 节点作为容器来实现该用途。第一项任务是创建一个内容类型 Agency page。在 Structure > Content type 中,单击 Add content type

  • 名称:Agency page
  • 描述:A page containing information about an agency from various datasets.
  • 显示设置:取消选择 Display author and date information,因为它与该示例无关。
  • 注释设置:选择 Closed,因为该页面上不需要注释功能。

保存此表单之后,单击 Manage fields 并删除 Body 字段(如果它未使用)。添加一个名为 Agency URI 的字段,它将包含您希望显示其信息的机构的 URI。无需为此字段指定任何 RDF 映射。

现在您可以为您希望显示其信息的机构创建一个实际页面。单击灰色快捷方式栏中的 Add content 并选择 Agency page。为此页面填写一个标题,比如 “Information about the Engineering and Physical Sciences Research Council”。在 Agency URI 文本字段中,粘贴此机构的 DBpedia URI,可以在项目页面上找到它:

http://research.data.gov.uk/doc/project/epsrc/EP/C545222/1

只需右键单击创建者名称:

http://dbpedia.org/resource/Engineering_and_Physical_Sciences_Research_Council

选择这个特定的 URI 是因为,它是包含了两个数据集。提交表单之后,您将注意到您刚传递的 URI 显示在标题下。此 URI 将在以后将视图组装到页面上时发挥重要作用,但它没有必要显示。在编辑 Agency page 内容类型时,可以通过在 format 下拉菜单中选择 <hidden> 将它隐藏在 Manage Display 选项卡下。


构建 DBpedia SPARQL 视图

现在所有元素都已齐备,可以执行以下步骤了:

  • 构建将使用指定的 RDF 映射查询数据集的实际视图。
  • 在合适的页面中显示结果。

转到 Structure > Views 并单击 Add new view 以创建一个新 SPARQL 视图。首先为关于 DBpedia 机构的信息创建视图。为它命名,比如 “Agency information” 并在 Show 下拉列表中选择 SPARQL Views: DBpedia 类型。您将不能创建一个页面,但是可以创建一个区域,其标题为 “Funding Agency Details (source: DBpedia)”。单击 Continue and edit 将转到 Views 的主用户界面。此用户界面的大部分内容不是特定于 SPARQL Views 的。如果您熟悉 Views,将会发现许多概念,比如字段、关系、排序标准、过滤器等。Views 非常灵活,拥有丰富的选项和设置。

字段是可在显示结果期间显示的数据项。它们可显示、隐藏或依据用例相互组合。

  1. 单击 Fields 对话框右上角的 add 按钮列出可用字段。选择复选框 agency: field_name 并单击 Add and configure fields 将它添加到字段列表中。配置字段表单保持原样,然后单击 Apply

    对所有其他字段重复此步骤:描述、主页、位置和缩写。尝试使用每个字段的设置指定一个标签,将字段输出包装在 <strong> 或 <em> 内。主页 URI 可转换为一个链接,只需选择 Output this field as a link 并将链接路径设置为 [agency_field_homepage]

  2. 上下文过滤器可用于指定视图在执行查询时要使用的输入参数。示例使用了一个参数告诉 “Agency information” 视图,它只需要查询附近的 Agency 数据。您在节点上输入的 URI 将在这里派上用场。

    要添加上下文过滤器,打开右侧的 “Advanced” 字段集并单击 Add,选择 agency: URI 复选框,单击 Add and configure contextual filters。在 “When the filter value is NOT in the URL” 中选择 Provide default argument。在 “Type” 中选择 Field Value (Node)。在 Source Field 中,选择 Agency URI 字段。这些设置将告诉视图使用哪个 Agency URI 的值作为 SPARQL 查询的 WHERE 模式的主体。单击 Apply

  3. 不要忘记单击右上角的 Save 保存您所做的所有设置。

您现在拥有了第一个基础 SPARQL 视图,它可放在您为工程和自然科学研究委员会创建的节点内。此视图将使用一个将在该节点中显示的区域来实现。

  1. 转到 Structure > Blocks 管理站点上的各个区域并找到名为 agency_information: Block 的区域。将此区域移动到内容区中,放在 Main page content 区域之上,如图 7 所示。单击 Save
    图 7. 管理站点上的各个区域
    包含下拉字段和一个配置选项的 3 列表单。
  2. 要管理此区域的可视性设置,单击此区域的 Configure。在 Content types 垂直选项卡中,选择 Agency page,使该 SPARQL View 区域仅在想要的页面上显示。请参见图 8。
    图 8. 管理可视性设置
    Visibility settings 表单,在 show block for specific content types 下选择了 agency page
  3. 转到您为该机构创建的节点,现在应该看到您刚创建的 SPARQL View 区域,其中包含来自 DBpedia 的机构细节,如图 9 所示。
    图 9. SPARQL View 区域,包含机构细节
    页面上有两个选项,包含显示机构细节的 SPARQL View 区域

构建 research funding SPARQL 视图

第二个 SPARQL 视图的构建与第一个视图非常相似。按照相同的步骤执行,将第二个视图命名为 Funded projects 并选择类型 SPARQL Views: Research funding。区域的标题将是 “Projects funded (source: data.gov.uk)”。添加以下字段:

  • Name
  • Reference Number
  • Value
  • Abstract

忽略 Funding Agency,因为您在查看它的页面时就已经知道它了。

添加上下文过滤器 field_funding_agency 并采用与第一个视图相同的方式配置它。将该区域添加到内容区并像第一个视图的区域一样配置它。浏览一下机构节点。应该会看到添加了许多内容。但是,您将注意到,布局看起来不正确:第一个视图仅显示了一个资源(该机构)的值。第二个视图一次显示了许多资源,所以需要为它采用不同的模板。在这里使用表格更合理,每个结果将占一行,值将是表格的列。这对于 Views 不存在问题。

返回到 Funded Projects 视图的编辑表单。在左侧的 format 窗格中,单击 Unformatted list 并选择 Table。将显示所有列的列表,可在这里改进表格布局,比如将 Value 列右对齐以实现更好的可读性。也可以让它可排序。

可以对视图进行其他改进,比如选择 Trim this field 为抽象的最大长度(比如 150 个字)。您可以以链接的形式输出 Name 字段,只需添加 URI 字段,从显示界面执行它,并使用它作为名称的替代模式。保存视图并找到机构页面,它现在包含该机构所创立的所有项目的表格,如图 10 所示。

图 10. 机构页面,包含已创立的所有项目的表格
机构页面,包含已创立的所有项目的表格

结束语

在本文中,您学习了如何使用 Drupal 7 和 SPARQL Views 将来自两个不同 SPARQL 端点的单一资源的数据组合在一起。本文仅探讨了使用 SPARQL、RDF 查询语言组合视图的众多方式中的一部分。我们希望您将继续探索 Drupal 7、Views 和 SPARQL Views 提供的各种可能性,查找组合 Linked Data 的新方式。

参考资料

学习

获得产品和技术

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Web development
ArticleID=819413
ArticleTitle=语义 Web,Linked Data 和 Drupal,第 2 部分: 组合链接的数据集与 Drupal 7 和 SPARQL Views
publish-date=06042012