本教程将介绍两种不同的将关系数据转换或具体化为 RDF 图形数据格式的方法。
大约 1 个小时
本教程包括下列主题:
| 概述 | |
| 前提条件 | |
| 使用基于 D2RQ 的方法 | |
| 总结 | |
| 相关信息 |
将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。
本教程将介绍两种不同的将关系型数据转换或具体化为 RDF 图形数据格式的方法。生成的 RDF 数据遵守 W3C 标准。它可由任何遵守 W3C 标准的工具或 RDF 数据存储(如 Oracle 数据库 11g)处理。
| 基于 D2RQ [1, 2] 的方法 | ||
| 基于 SQL 的方法 | ||
我们建议使用基于 D2RQ 的方法,因为 D2RQ 提供可定制的映射文件,这些文件允许用户指定 URI 的生成,从而实现跨不同的列、表、模式、甚至数据库的 URI 重用。
这里,URI 重用的意思是使用同一 URI 来表示同一资源。注意,在本教程中介绍的基于 SQL 的方法不处理转义、字符编码、换行、制表符和其他特殊字符。
开始本教程之前,您应该:
| 1. |
安装 Oracle 数据库 11g 企业版。确保安装了 Oracle Spatial 11g 选件、Oracle Partitioning 选件和 Oracle Advanced Compression 选件。 |
| 2. |
运行 11g 中语义技术支持所要求的步骤。按照 https://metalink.oracle.com 上以下注释中的步骤进行操作: 注释 452989.1:11g 中语义技术支持所要求的步骤 |
| 3. | 安装 11.1.0.6.0 语义技术补丁。
注:如果安装了 Oracle 数据库 11.1.0.7.0 或更高版本的补丁集,则不必执行此操作。 登录到 Metalink(位于 https://metalink.oracle.com),并单击 Patches & Updates 选项卡。选择“Simple Search”,并在 Search by 下拉列表中选择 Patch Number(s)。输入补丁号 7032734。选择平台或语言。单击 GO。 要安装补丁,请阅读 jenadrv_patch_ig.txt 文件中的说明。 |
| 4. | 设置数据库以支持语义网。如果没有进行设置,按照 https://metalink.oracle.com 上以下注释中的步骤进行操作:
注释 454371.1:如何设置数据库以实现语义网支持? |
| 5. | 安装 D2RQ。可以从以下站点 http://www4.wiwiss.fu-berlin.de/bizer/d2rq/ 下载它。
单击主页左侧的 Download 的链接。单击 D2RQ and D2R Server。然后单击 D2RQ API for Jena and Sesame(版本 v0.5.1)。下载 .gz 或 .zip 格式(两者都独立于平台)。 下载完成后,解压缩到您的计算机上的一个目录中。 要了解更多关于 D2RQ 和 D2R 服务器的信息,参见 http://www4.wiwiss.fu-berlin.de/bizer/d2rq/spec/。 注:对于本教程,不必查看 D2RQ 站点的文档。 |
本主题通过一个小示例演示 D2RQ 的使用。
在本主题中,执行以下步骤:
| 设置用户和表 | ||
| 生成 N3 格式的映射文件 | ||
| 使用映射文件生成 N-Triple 数据文件 | ||
| 可以选择更改 N3 文件以满足您的需要 | ||
以下 SQL 语句创建了一个简单的员工表,该表对员工等级结构进行建模。表中插入了几个示例行。在下列主题中,您首先要使用 D2RQ v0.5.1 生成 N3 [4] 格式的映射文件。
|
1. |
创建一个新用户 test。将 connect、resource 权限授予该用户。 以 sys 用户身份登录,然后运行以下 SQL 语句: create user test identified by test grant connect, resource to test;
|
|
2. |
以 test 用户身份连接。创建一个简单的表 emp 对员工等级结构进行建模。 要创建 emp 表,运行以下语句: conn test/test create table emp (ID integer primary key,
|
| 3. |
在 emp 表中插入几个示例行。运行以下 INSERT 语句: insert into emp values(1, 'John', 'M', 1980, 2); insert into emp values(2, 'Mary', 'F', 1981, 3); insert into emp values(3, 'Jack', 'M', 1982, 3);
使用以下命令提交插入的行: commit; |
在以下步骤中,您将使用 D2RQ v0.5.1 生成 N3 格式的映射文件。
|
1. |
从此处下载 batch_files.zip。将两个批处理文件(gen_map.bat、dump_rdf.bat)解压缩至您本地计算机上的文件夹中。 打开 gen_map.bat 文件,编辑该文件以根据您的设置对其进行自定义。 通用语法(d2rq.generate_mapping 类): <jdk_path>\bin\java classpath <classpath> d2rq.generate_mapping
注:应根据您的设置编辑以红色三角形标记的占位符。文件中多次出现 <PATH_TO_D2RQ>。确保正确替换它们。
|
||||||||||||||||||||||||||||
| 2. |
打开一个命令窗口。转至您在其中保存了 gen_map.bat 文件的文件夹。运行该批处理文件。它输出一个使用 N3 语法编码的映入文件 employee.n3。 Note: Before you run this batch file, ensure ORACLE_HOME is set.
注:在 Windows 环境中执行批处理文件时,默认在 >employee.n3 前添加“1”。编辑 gen_map.bat 文件时,不要在 >employee.n3 前添加“1”。 这将在您从中运行批处理文件的文件夹中生成 employee.n3 文件。 |
||||||||||||||||||||||||||||
您可以更改 N3 格式文件,但在本教程中,您将直接使用它,通过以下步骤生成 RDF 文件(n-triple 格式)。注意 N-TRIPLE 为指定输出格式。而且提供了基 URI,用于解析相关 URI 模式。
|
1. |
打开 dump_rdf.bat。根据您的设置,编辑文件以进行自定义。 通用语法(d2rq.dump_rdf 类): <jdk_path>\bin\java -classpath <classpath> d2rq.dump_rdf 除前一主题第 1 步显示的组件外,其他组件为:
注意,在这种情况下,在 jdbc:oracle:thin:@hostname:port:SID 行的前面,您需要添加一个在以前的 java 命令中不要求的 -j 参数。 注:应根据您的设置编辑以红色框标记的占位符。文件中多次出现 <PATH_TO_D2RQ>。确保正确替换它们。
|
||||||||||||
|
2. |
在命令窗口中,转至您在其中保存了 dump_rdf.bat 文件的文件夹。运行该批处理文件。 注:确保 ORACLE_HOME 设为相应的路径后再运行批处理文件。
注:在 Windows 环境中执行批处理文件时,默认在 >emp_table.ntriple 前添加“1”。编辑 emp_table.ntriple 文件时,不要在 >emp_table.ntriple 前添加“1”。 |
||||||||||||
| 3. |
在记事本中打开生成的 emp_table.ntriple 文件。屏幕截图显示了输出。
|
||||||||||||
根据您的应用程序的要求,可以接受这些生成的三元组。但是,情况并不总是这样。例如,可以对首个三元组作出一个明显的改进。它使用类型文字作为“report_to”属性(关系)的对象值,该属性对应于关系表中的原“report_to”列。对于“report_to”属性的对象值(在上面屏幕截图中用红框高亮显示),不要使用普通的十进制数值,而是使用 URI 更为合适,这样生成的三元组集将组成更为有效的链接图。
|
1. |
在记事本中打开 employee.n3 文件。在映射文件 employee.n3 中查找以下描述: map:EMP_REPORT_TO a d2rq:PropertyBridge; 替换以下整个描述: 从: map:EMP_REPORT_TO a d2rq:PropertyBridge;
map:EMP_REPORT_TO a d2rq:PropertyBridge;
屏幕截图高亮显示的文本将类型文字更改为 URI,作为对象值。 保存此文件。 |
|
2. |
重新运行 dump_rdf.bat 批处理文件,生成包含以下代码片段的新 N-Triple 文件。 较之使用默认的映射文件生成的文件,三元组无疑能更好地对原关系数据进行建模。 检查屏幕截图。
如果您不满意 URI 中包含模式名称(如上面代码片段中所示的“TEST”)的情况,可以更改映射文件以跳过模式名称。参见 D2RQ 文档了解详细信息:http://www4.wiwiss.fu-berlin.de/bizer/d2rq/spec/ |
SQL 语句可用于从关系型表中直接生成 RDF 数据。您可以编写简单的查询以生成用于捕获“report_to”关系的三元组。
在本主题中,执行以下步骤:
| 使用 SELECT 语句 | ||
| 在 SELECT 语句中使用 UNPIVOT | ||
| 1. |
使用 test/test 用户名/口令连接。 运行以下简单的查询以生成用于捕获“report_to”关系的三元组。 注:以下 SQL 非常简单。然而,它对于确保生成的数据遵守 N-Triple 语法是很重要的。参见 http://www.w3.org/TR/2004/REC-rdf-testcases-20040210/ 上的 RDF 测试用例文档的第三部分,了解清楚说明的语法。 select '<http://test.com/TEST.EMP/' || ID || '> '
|
| 1. |
按照同一方法,您可以编写单独的 SELECT 语句为每个相关列生成三元组。 如果关系型表中有多个列,这一过程会变得单调乏味。一个更为简洁的方法是使用 UNPIVOT 从多个列中将值移到多个输出行中。 例如,下面的 SQL 将四个列(ID、REPORT_TO、BIRTH_YEAR、NAME) unpivot 为四个单独的行,每行表示一个三元组。 运行以下语句: col subject format a33
col object format a33
select * from (
select '<http://test.com/TEST.EMP/' || id || '>' as subject,
to_char(id) as id,
to_char(report_to) as report_to,
to_char(birth_year) as birth_year,
name as name
from emp
)
UNPIVOT (object for predicate
in (id as 'ID',
report_to as 'REPORT_TO',
birth_year as 'BIRTH_YEAR',
name as 'NAME'
));
前一屏幕截图中的每行映射至三个列值中每个列值的单个三元组。 可能需要进行其他的数据处理,包括相应的 URI/文字生成、实际的字符转义和 N-Triple 格式遵守。
|
在本课程中,您学习了如何执行下列任务:
| 使用基于 D2RQ 的方法将关系型数据转换或具体化为 RDF 图形数据格式。 | ||
| 使用基于 SQL 的方法将关系型数据转换或具体化为 RDF 图形数据格式。 | ||
|
D2RQ 用户手册和语言规范:http://www4.wiwiss.fu-berlin.de/bizer/d2rq/spec/ |
|
|
RDF 测试用例:http://www.w3.org/TR/2004/REC-rdf-testcases-20040210/ |
|
| 注解 3 (N3):http://www.w3.org/DesignIssues/Notation3.html |