对于学校项目,我们必须使用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建议之后,我尝试使用Jena的Resource
类:
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/” 但这给了我一个错误,该方案缺少必需的组件。