我正在尝试将关系数据库映射到 OWL 这是我的 2 个表 student(student_id,student_name,course_id)
course(course_ID,course_name)
+----+--------+-----------+
| 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 文件。在本体中,不是外键的列被映射到数据类型属性,外键被映射到对象属性,根据本文(映射关系到 OWL(第 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 课程”。
我的对象属性如何替换关系中的外键值以唯一地连接两个类的两个元组?
请提出建议,非常感谢任何帮助。