1

セマンティック Web プロジェクトに RDF ファイルがあり、それを操作するために Rowlex を使用しています。個人を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 : 何が問題なのですか?

ご清聴ありがとうございました。

4

2 に答える 2

3

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

実際のステートメントは次のとおりです (Turtle 形式)。

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

Ontologyowl:useStudyListしたがって、主語 (およびそれを含むステートメント) の述語を削除すると、の型<ehsanm>に関する残りのアサーションが残ることは理にかなっています。<stdl184516>

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

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

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

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

于 2009-07-10T20:46:20.080 に答える
2

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

次のグラフを想像してください。A (Adam)、B (Bill)、およびその父親 F (Fred) の 3 人がいます。A - F と B - F の間に父関係があります。Adam と彼の父親の関係を削除します。親ノードを削除して、Bill を一貫性のない (孤立した :) 状態にする必要がありますか? ここでの答えは「いいえ」です。リレーションシップのみを削除します。

UML ダイアグラムでは、「所有」と「共有」を区別するための集計関係のオプションがあります。線の端にあるダイヤの色(黒か白か)で表現されます。リレーショナル データベースでは、外部キーに対する「カスケード削除」を定義または無視できます。それらは同じ概念を表しています。残念ながら、RDF は、プロパティに対してこの追加のメタデータを提供しません。RDF にこの情報があれば、グラフ上でいつ、どの程度削除をカスケードする必要があるかを判断できます。しかし、私たちはしません。これは悪いニュースのケースを設定します: あなたは自分で、あなたが適切と思うように削除を実装することができます.

于 2009-07-11T18:37:59.980 に答える