2009-07-10 17 views
1

私はセマンティックWebプロジェクトにRDFファイルを持っており、それを操作するためにRowlexを使用しています。 私はRDFから個人を除去するために必要てきたので、私はこのコードでRDFから個人とプロパティを削除

<RDFDoc instance>.RemoveIndividual(new OwlThing(<individual URI>, <RDFDoc instance>)); 

を使用し、私は私の個人が行っていたが、それは性質がまだ残っています。だから私はそれが最初にプロパティを削除する必要があることを知った。私はすべてのプロパティを一緒に削除するコマンドを見つけることができませんでした。だから、質問1:すべてのプロパティを持つ個人を削除する方法はありますか?または、1つのコード行ですべてのプロパティを削除できますが、1つずつ削除することはできませんか?また、複数の値を持つプロパティを削除するにはどうすればいいですか?例えば3つのStudyLists、例の下のページ。私は、例えば、プロパティを削除しようとした一方

、 'useSudyList' 学生の個々から、このコードによって:

student.RemoveuseStudyList(student.useStudyList); 

私は私のRDFファイルが見つかりました:

<Ontologyowl:Student rdf:about="ehsanm"> 
//other properties 
    <Ontologyowl:useStudyList> 
     <Ontologyowl:StudyList rdf:about="stdl184516"/> 
    </Ontologyowl:useStudyList> 
</Ontologyowl:Student> 

を...このようになりました:

<Ontologyowl:Student rdf:about="ehsanm"> 
    //other properties 

</Ontologyowl:Student> 
<Ontologyowl:StudyList rdf:about="stdl184516"/> 

このようにしてプロパティが破棄されました。私はリテラルプロパティでこの問題はありません。 質問2:何が問題なのですか?

ご協力いただきありがとうございます。

答えて

2

あなたの質問はROWLEXとは関係ありませんが、典型的なグラフの問題です。ノードを削除すると、削除のカスケードはどのくらいですか?リテラルのあるプロパティーを削除すると、グラフの続きがないので大文字と小文字が簡単になります。別のノードを指すプロパティを削除すると、そのノードは削除されますか?グラフには循環参照も共有関係も含まれていないので、例の削除は明らかです。

あなたには、A(アダム)、B(ビル)、およびその父親F(フレッド)の3人の人がいるとします。あなたはA - FとB - Fの間に父親関係があります。 アダムとその父親との関係を削除します。あなたは父親のノードを削除して、Billを矛盾した(孤立した)状態にする必要がありますか?答えは「いいえ」です。リレーションシップのみを削除します。

UMLダイアグラムでは、「所有」と「共有」を区別するための集約関係のオプションがあります。これは、行末のダイヤモンドの色(黒または白)で表されます。リレーショナルデータベースでは、外部キーに対して「カスケード削除」を定義または無視できます。彼らは同じ概念を表しています。残念ながら、RDFはプロパティに対してこの余分なメタデータを提供しません。 RDFがこの情報を入手できたら、グラフ上で削除のカスケード処理の時期と時期を判断できます。しかし、私たちはしません。それは悪いニュースのために大文字にしてしまいます。あなたは自分自身であり、あなたが見ている通りに削除を実装することができます。

+0

あなたはポイントを釘付けにしました! –

+0

この非常に参考になった返信ありがとうございました。しかし、これは私に別の質問をさせました。私はこれを「Semantic Webの個人とプロパティ」というタイトルで掲載しました。もしあなたがそれを見れば、私はそれを非常に感謝しています。 もう一度ありがとう – Ehsan

3

あなたが削除しなかった<stdl184516>に関連する他のステートメントがありましたが、プロパティを削除しました。ここで

は、あなたが(タートル形式)は、実際の文です:

<ehsanm> a Ontologyowl:Student . 
## Other statements 
<ehsanm> Ontologyowl:useStudyList <stdl184516> . 
<stdl184516> a Ontologyowl:StudyList . 

だからそれはあなたの<ehsanm>被写体にOntologyowl:useStudyList述語の除去(およびそれを含む文は)残りを残すという意味になります<stdl184516>のタイプに関するアサーション

リテラルでこの問題が発生しない理由は、リテラルがステートメントのサブジェクトとして存在しないことです(ステートメントのオブジェクトのみです)。そのステートメントを削除すると、リテラル(およびそのすべての参照)が削除されます。ステートメントのオブジェクトとしてリソースを使用すると、そのリソースに関する追加のステートメントが存在する可能性があります(例のように)。

RDFは、リテラルが互いに素であるとみなします。つまり、同じ値を持っていても、すべてが異なっています。これは、リテラル(述語をそのように考えたい場合にはそのリテラル)への述語を削除することによって、リテラルも削除される理由です。

更新(Mr. Lameの応答に追加):概念的には、RDFはノード(リソース)のグラフのエッジ(リレーション/述語)に関するものです。ノードを削除するという考え方はRDFに反する。ノード(リソース)がそれ自身の意味を持つことを意味します。 rdf:typeをアサートしてリソースを入力することも、ノード/エッジ/ノードのステートメントです。ノードURIだけが不透明であるとみなされ、固有の識別子以外のセマンティクスはありません。このため、RDFでは「裸の」ノード(文の外側にあるノード)が許可されていないため、RDFに固有の意味はありません。

Ehsanが提起した問題を拡張するために、ノードを削除すると、実際にはすべての受信/送信の述語が削除されます。これは本当にノードを「削除」しませんが、実際にノードを参照するすべてのステートメント/アサーションを削除します(ステートメントが参照されていない場合は「非表示」と考えてください)。

+0

ありがとうございます。私は再度チェックし、それが動作するかどうかを確認するためにいくつかのコードを追加します。 ありがとうございました – Ehsan

関連する問題