0

Jena フレームワークで Eclipse を使用して Web アプリケーションを開発しています。私のアプリケーションは次のことを行います。

  1. 名前、電子メール、興味(C言語、Javaなど)、職業、ユーザー名、およびパスワードの情報を使用して、新しいユーザーを登録します。

  2. この情報は、user.rdf という名前の rdf ファイルに保存されます。

  3. 新しい希望のユーザー名とパスワードを使用して、新しいユーザー アカウントが作成されます。新しいユーザーがログインすると、ユーザーの興味に応じて、データベース内のすべての関連書籍が開きます。

  4. ここで、新しいユーザーに次のことを推奨する必要があります。

彼/彼女が C 言語に興味がある場合は、C++ の本が彼に推奨され、リストが画面に表示されます。

これには、事実とルールを必要とする推論エンジンが必要であることを私は知っています。事実は、ユーザーの関心を格納する rdf ファイルになります。ルール ファイルは、推奨事項が実行されるときにルールに基づいて表示されます。

次の内容の user.rdf ファイルがあります。

 <rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:kb="http://protege.stanford.edu/kb#"
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" > 
 <rdf:Description rdf:about="http://protege.stanford.edu/kb#Suresh">
  <rdfs:label>Suresh</rdfs:label>
 <kb:Uname>suresh</kb:Uname>
 <kb:Password>suresh</kb:Password>
 <kb:Occupation>Agent</kb:Occupation>
 <kb:Interest>Java</kb:Interest>
 <kb:Fname>Suresh</kb:Fname>
 <kb:Email>suresh_345@yahoo.co.in</kb:Email>
 <rdf:type rdf:resource="http://protege.stanford.edu/kb#USER"/>
  </rdf:Description>
 <rdf:Description rdf:about="http://protege.stanford.edu/kb#Raj">
 <kb:Email>ra@gmail.com</kb:Email>
 <kb:Name>Raj</kb:Name>
 <kb:Password>lkj</kb:Password>
 <kb:Uname>raj</kb:Uname>
 <kb:Interest>C Language</kb:Interest>
 <kb:Occupation>Student</kb:Occupation>
 </rdf:Description>
  <rdf:Description rdf:about="http://protege.stanford.edu/kb#Anvika">
  <rdfs:label>Anvika</rdfs:label>
  <kb:Uname>anu</kb:Uname>
 <kb:Password>anu</kb:Password>
 <kb:Occupation>Student</kb:Occupation>
 <kb:Interest>C Language</kb:Interest>
 <kb:Fname>Anvika</kb:Fname>
 <kb:Email>anu@gmail.com</kb:Email>
 <rdf:type rdf:resource="http://protege.stanford.edu/kb#USER"/>
 </rdf:Description>
 </rdf:RDF>

ユーザー Suresh と Anvika は実際には Protege で作成されたもので、ファイルはアプリケーションを介して他のユーザーの詳細で更新されます。

test.rules ファイルには以下が含まれます。

   @prefix kb: http://protege.stanford.edu/kb#
 [likec++: (?s rdf:type kb:LikeC++) 
    <- 
      (?s rdf:type kb:USER)
    (?s kb:Interest ?i)
     regex(?i,'C Language')
 ]

出てくる推論は

<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:kb="http://protege.stanford.edu/kb#"
xmlns:j.0="http://protege.stanford.edu/kb#LikeC++"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" > 
<rdf:Description rdf:about="http://protege.stanford.edu/kb#Suresh">
<rdf:type rdf:resource="http://protege.stanford.edu/kb#USER"/>
<kb:Email>suresh_345@yahoo.co.in</kb:Email>
<kb:Fname>Suresh</kb:Fname>
<kb:Interest>Java</kb:Interest>
<kb:Occupation>Agent</kb:Occupation>
<kb:Password>suresh</kb:Password>
<kb:Uname>suresh</kb:Uname>
<rdfs:label>Suresh</rdfs:label>
</rdf:Description>
<rdf:Description rdf:about="http://protege.stanford.edu/kb#Raj">
<kb:Occupation>Student</kb:Occupation>
 <kb:Interest>C Language</kb:Interest>
 <kb:Uname>raj</kb:Uname>
  <kb:Password>lkj</kb:Password>
  <kb:Name>Raj</kb:Name>
  <kb:Email>ra@gmail.com</kb:Email>
  </rdf:Description>
  <rdf:Description rdf:about="http://protege.stanford.edu/kb#Anvika">
   <rdf:type rdf:resource="http://protege.stanford.edu/kb#USER"/>
   <kb:Email>anu@gmail.com</kb:Email>
   <kb:Fname>Anvika</kb:Fname>
   <kb:Interest>C Language</kb:Interest>
   <kb:Occupation>Student</kb:Occupation>
  <kb:Password>anu</kb:Password>
  <kb:Uname>anu</kb:Uname>
  <rdfs:label>Anvika</rdfs:label>
   <rdf:type rdf:resource="http://protege.stanford.edu/kb#LikeC++"/>
 </rdf:Description>
</rdf:RDF>

今、行が原因で

  <rdf:type rdf:resource="http://protege.stanford.edu/kb#LikeC++"/>

推論は、LikeC++ の Anvika の推奨事項をユーザーに提供します。しかし、C 言語にも関心があるユーザー Raj にも同じことが欠けています。この行により、ユーザー Anvika のみが推測されていることがわかりました。しかし、この行は Protege によって自動的に追加されました。私のプログラムはそれをしません。では、アプリケーションを介してその行を追加するにはどうすればよいですか。これが不可能な場合は、ルールを変更して正しい結果を推測する方法を教えてください。

私を助けてください。私は長い間これに打たれました。

4

1 に答える 1

1

RDF/XML よりも冗長でない表記法を使用すると、答えはより明確になります。ファイルをコピーした後user.rdf、次のことを行いました。

java jena.rdfcat -out Turtle user.rdf

(これは、CLASSPATH 環境変数が正しく設定されていることを前提としています)。これが生成する出力は次のとおりです。

@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix kb:      <http://protege.stanford.edu/kb#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

kb:Suresh
  a       kb:USER ;
  rdfs:label "Suresh" ;
  kb:Email "suresh_345@yahoo.co.in" ;
  kb:Fname "Suresh" ;
  kb:Interest "Java" ;
  kb:Occupation "Agent" ;
  kb:Password "suresh" ;
  kb:Uname "suresh" .

kb:Raj
  kb:Email "ra@gmail.com" ;
  kb:Interest "C Language" ;
  kb:Name "Raj" ;
  kb:Occupation "Student" ;
  kb:Password "lkj" ;
  kb:Uname "raj" .

kb:Anvika
  a       kb:USER ;
  rdfs:label "Anvika" ;
  kb:Email "anu@gmail.com" ;
  kb:Fname "Anvika" ;
  kb:Interest "C Language" ;
  kb:Occupation "Student" ;
  kb:Password "anu" ;
  kb:Uname "anu" .

そこから、 kb:Raj に がないことがわかりますrdf:type kb:USER。したがって、ルールの最初の句に失敗します。

于 2011-03-09T14:50:23.640 に答える