【发布时间】:2014-05-02 01:06:08
【问题描述】:
我正在尝试将关系数据库映射到 OWL
这是我的 2 张桌子
学生(学生 ID,学生姓名,课程 ID)
课程(课程 ID,课程名称)
+----+--------+-----------+
| id | name | course_id |
+----+--------+-----------+
| 1 | Adam | 5 |
| 2 | Michael| 2 |
+----+--------+-----------+
+-----------+-------------+
| course_id | course_name |
+-----------+-------------+
| 2 | DM |
| 5 | WEBIR |
+-----------+-------------+
现在 course_id 是学生表引用中的外键 course_id 在课程表中。我使用 Protege 4.3 创建了本体(定义了架构)
我正在尝试使用 Jena API 将数据作为实例插入 OWL 文件。 在本体中,不是外键的列被映射到数据类型 根据本文(mapping relational to OWL(section 4.4.4)),属性和外键映射到对象属性。 我将元组作为实例添加到耶拿的学生和课程课程中。 如果外键是对象属性,我如何使用它来唯一地确定关系。 这是我用来将数据作为实例添加到 Protege 中创建的 owl 文件的耶拿代码。
for (student std : studlist) {
Individual stud = stud_ont.createIndividual(nspace + "student/"
+ std.getStudent_id());
stud.addProperty(stud_id, std.getStudent_id());
stud.addProperty(stud_name, std.getStudent_name());
stud.addProperty(reln, std.getCourse_id());
PrintStream p = new PrintStream(
"/home/owlDM/newedu.owl");
m.writeAll(p, "RDF/XML", null);
p.close();
}
for (course crs : courselist) {
Individual cour = course_ont.createIndividual(nspace + "course/"
+ crs.getCourse_name());
cour.addProperty(course_course_name, crs.getCourse_name());
PrintStream p = new PrintStream(
"/home/owlDM/newedu.owl");
m.writeAll(p, "RDF/XML", null);
p.close();
}
这里的“reln”是我为其添加外键 course_id(values) 的对象属性(功能)。 但它有助于关联两个实例吗? 假设我需要推断“亚当参加了 WebIR 课程”。
我的对象属性如何才能唯一地替换外键值
加入两个类的两个元组?
请提出建议,非常感谢任何帮助。
【问题讨论】: