学校のプロジェクトでは、RDF と OWL を使用して欠員/応募者サービスを作成する必要があります。Spring と Apache Jena を使用してこのサービスを作成しています。このサービスには、特定のスキルを持っている人や、特定のスキルを必要とする企業の欠員が含まれます。オントロジーを作成しましたが、スキルを作成して個人にリンクする方法がわかりません。
最初に、次のコードを使用して、直接 foaf:person に hasSkill オブジェクト プロパティを作成しようとしました。
<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 でクエリを実行してユーザーのリソースを取得します。
Skill-ontology を定義するコード:
<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/ " と同じですが、これにより、必要なコンポーネントがスキームにないというエラーが表示されます。