0

学校のプロジェクトでは、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/ " と同じですが、これにより、必要なコンポーネントがスキームにないというエラーが表示されます。

4

0 に答える 0