对于学校项目,我们必须使用 RDF 和 OWL 来创建空缺/申请服务。我们正在使用 Spring 和 Apache Jena 编写此服务。该服务将包含具有某些技能的人员和需要某些技能的公司的职位空缺。我们已经创建了本体,但我们不知道如何创建技能并将其链接到一个人。
首先,我们尝试使用以下代码将 hasSkill 对象属性直接设置为 foaf:person:
<owl:ObjectProperty rdf:about="foaf#hasSkill">
<owl:domain owl:class="foaf#person" />
<owl:range owl:class="#Skill" />
</owl:ObjectProperty>
我们尝试使用 SparQL 插入这些技能,但我们不知道如何将创建的技能链接到现有用户。我们尝试的另一种方法是通过代码访问属性。
Resource user = userRepository.getUserResource(userID);
Property skill = model.createProperty("Skill");
第一行通过使用 SparQL 查询来获取用户的资源。
定义技能本体的代码:
<owl:Class owl:name="Skill">
<owl:Annotation>
<owl:Label>Skill</owl:Label>
</owl:Annotation>
</owl:Class>
<owl:ObjectProperty rdf:about="http://localhost:8080/ontologies/Skill#SkillName">
<owl:domain owl:class="Skill" />
<owl:range owl:class="rdfs#literal"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="http://localhost:8080/ontologies/Skill#CompetencyLevel">
<owl:domain owl:class="Skill" />
<owl:range owl:class="rdfs#literal" />
</owl:ObjectProperty>
定义我们的申请人本体的代码:
<owl:Class owl:name="Applicant">
<owl:Annotation>
<owl:Label>Applicant</owl:Label>
</owl:Annotation>
</owl:Class>
<owl:ObjectProperty rdf:about="http://localhost:8080/ontologies/Applicant#Person">
<owl:domain owl:class="Applicant" />
<owl:range owl:class="foaf#person" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="http://localhost:8080/ontologies/Degree#StudyField">
<owl:domain owl:class="Applicant" />
<owl:range owl:class="#Skill" />
</owl:ObjectProperty>
我们想要做的是现有用户可以将技能添加到他们的个人资料中。然后可以使用这些技能将职位空缺与申请人匹配。
在 AKSW 的建议下,我尝试使用Resource
Jena 的类:
Property name = ResourceFactory.createProperty("", ns + "Skill#SkillName");
Property competencyLvl = ResourceFactory.createProperty("", ns + "Skill#CompetencyLevel");
Resource r = model.getModel().createResource("Skill")
.addProperty(name, skillDetail.getSkillName())
.addProperty(competencyLvl, skillDetail.getCompetencyLevel());
model.writeChanges();
命名空间(ns)等于“ http://localhost:8080/ontologies/ ”,但这给了我一个错误,即方案中缺少必需的组件。