本教程将引导您完成构建和维护样例 RDF 应用程序的所有步骤。在此过程中,您将通过实际操作学习如何结合 RDF 技术使用 DB2 软件。
本教程是由三部分组成的系列文章的第一部分,让您在实际操作中体验 DB2 for Linux, UNIX, and Windows 软件和资源描述框架 (RDF) 技术的使用。本教程介绍一个 RDF 应用程序的示范用例,并引导您完成构建和维护这个应用程序的以下步骤:
创建一个 RDF 存储 在其中插入数据 查询数据 更新数据 维护存储,以确保良好的查询性能所需的统计数字是最新的
本教程还包括迁移到 DB2 软件的说明。
第 2 部分将介绍更多高级主题,如访问控制和优化存储。第 3 部分将介绍如何使用特定 SPARQL 的特性,如 DESCRIBE、CONSTRUCT 等各种查询表单,以及图表的联合。
示例应用程序开发用例
本教程使用一个虚构示例,其中有名为 XYZ 的公司,该公司拥有多个组织。分支机构地点跨多个地区,因此该公司必须遵从每个地区的法规。每个组织本身运行几个项目,每个项目都需要熟练的技术人员和各种资源。所有 XYZ 员工均由单个 HR 系统管理。根据业务需要和员工的兴趣,员工可以在一个组织内跨项目调动,甚至调动到另一个组织。每个组织独立管理其项目和财政。
XYZ 所面临的重大挑战是,遵从法律法规和为即将开展的项目配置专门技能的人才。对于大部分这些新项目来说,XYZ 中都有可用资源,但难以获得所有必要数据,因为数据位于多个系统。今天,各系统必须遵循一种模式:登录到一个系统收集一些信息,然后登录到另一个系统使用来自第一个系统的信息,并获得下一条信息。为了更有效地收集信息,XYZ 决定建立一个新的系统:Staffing System。假设您的工作就是要构建这一系统。
新的 Staffing System 的需求
Staffing System 必须与以下其他系统交互,以满足对信息的要求:
Org System:该系统维护有关该公司组织的所有详细信息。这些详细信息包括组织的名称、组织负责人的姓名、组织中的员工人数,以及财务信息。该系统生成惟一的组织 ID,供其他系统引用。 Projects System:该系统维护有关该公司已完成或正在执行的每个项目的详细信息。这些详细信息包括
参加项目的员工的姓名、项目经理的姓名、计费详细信息,以及项目归属的组织的名称。该系统生成惟一的项目 ID,供其他系统引用。 HR System:该系统维护公司员工的详细信息。这些详细信息包括员工的姓名、员工的地址、员工参加的项目,以及任何工作许可证的引用。该系统生成惟一的员工 ID,供其他系统引用。 Legal System:该系统维护公司必须获得的法律批文。它也维护由政府机构颁发的文档 ID 的引用。
新的系统必须能够满足公司的以下需求:
当一个新的项目启动时,项目经理必须能够为新项目找到
具备所需技能的可用工作人员。 根据项目的位置、工作人员和软件等其他资源,系统必须能够找到项目的法律批文。 项目经理必须能够考虑员工在特定技术领域中工作的兴趣,以及是否具备合资格的技能。 今天,Staffing System 必须集成的只是
前面所指定的四个系统,但该公司
预计,Staffing System 在未来必须与其他系统集成。新系统的添加应该是无缝的,不得影响现有系统。 每个现有系统必须能够独立地执行其他修订、数据架构的变更或接口变更,而不需要考虑与新的 Staffing System 的兼容性。同样,Staffing System 不应该受到对这些现有系统的内部变更的影响。
现有的四个系统彼此隔离,但所维护的信息是互联的。每个系统所生成的惟一标识符用于标识一些实体,但它们与其他系统中的其他实体之间的关系不能在同一个地方都可用。这导致了在这些现有系统之间的多个跃点。该公司希望利用 Staffing System 简单而有效地导航在不同系统中的各实体之间的关系。
为了解决这个问题,您需要一个数据存储,用于存储在每个系统中生成的标识符,并存储有关它们的关系的信息。因为在未来可能需要与其他系统的接口,该数据存储的性质必须是通用的。RDF 提供了一个可以满足这些要求的理想数据存储。RDF 数据存储并没有固定的架构。您不必了解数据架构就可以使用 SPARQL 查询语言来查询数据。这就是通常被称为链接数据 的架构。新的 Staffing System 系统将采用这种架构。
下表描述了每个系统将用于惟一地标识其实体的 URI 结构。
表 1. URI 结构
<http://xyz.com> 指 XYZ 公司 <http://xyz.com/org/hr> 指 XYZ 公司中的 HR 组织 <http://xyz.com/employee> XYZ 公司的员工 <http://xyz.com/manager> XYZ 公司的经理 <http://xyz.com/project> 一个 XYZ 项目 <http://xyz.com/product> 一个 XYZ 产品 <http://xyz.com/project/lead> 项目负责人 <http://xyz.com/project/member> 团队成员 <http://xyz.com/project/QA> 项目的 QA <http://xyz.com/project/ID> XYZ 公司中一个项目的信息开发人员 <http://xyz.com/org/legal/approvals/OS98765> 使用某软件的批文 ID <http://xyz.com/org/legal/gov/approvals/WP76543> 员工等的政府法律批文