8

RDF データのデータベースで使用される NULL に相当するものを表す標準的または一般的に受け入れられている方法があるかどうかを知りたいです。

より具体的には、プロパティーpの値o ( pは述語、oは RDF トリプルの目的語)について次のケースを区別する方法に興味があります。

  1. 値は適用できません。つまり、プロパティpが存在しないか、コンテキスト内で意味がありません。
  2. 値は不明です。つまり、存在するはずですが、わかりません。
  3. が存在しません。つまり、プロパティに値がありません (例: 生きている人の死亡年)。
  4. たとえば、データ コンシューマがアクセスを許可されていない場合、値はwitheldです。
4

4 に答える 4

7

これを行う標準的な方法はわかりませんが、RDF で作業する利点の 1 つは、これを行う方法を決定する際に非常に柔軟であることです。RDF自体は否定を表現できませんが (つまり、トリプルspoが成立しないと言う非常に便利な方法はありません)、OWL はできます。あなたが説明した 4 つのケースに関して、以下にいくつかのアプローチを示します。

1. 値は適用できません。つまり、プロパティ p が存在しないか、コンテキスト内で意味がありません。

プロパティpがサブジェクトs の値を持つことがあまり意味をなさない場合は、フォームspoのトリプルを記述しないことはおそらく許容されます。RDF はオープン ワールドを前提としているため、データの検索では、関心のあるデータのみをクエリし、予期しないことがどこにあるかをチェックするのにあまり労力を費やしていないことがよくあります。サニティ チェックを行いたい場合は、プロパティの RDFS ドメインと範囲を宣言できます。たとえば、次のような場合があります。

hasBirthDate rdfs:domain AnimateObject .
hasConstructionDate rdfs:domain InanimateObject .

セマンティクスによれば、

object82 hasBirthDate "2013-04-01" ;
         hasConstructionDate "2013-04-02" .

次に、それも推測します

object82 a AnimateObject, a InanimateObject .

AnimateObjectまた、 s とs の両方であるサニティ チェックを実行することもできますInanimateObject。どちらかが両方ある場合は、調査すべき問題がある可能性があります。AnimateObjectOWL を使用すると、とが素であることを実際に宣言し、InanimateObject論理的な一貫性をチェックできます。あるいは、OWL では、次のようなアサーションを追加できます。

object82 hasConstructionDate max 0 

これはobject82、プロパティの値を持ってはならないことを示していますhasConstructionDate

いずれにせよ、rdfs:commentプロパティを何に使用し、何に使用してはならないかを説明する s をプロパティに追加してください。必要に応じて、個人に s を追加rdfs:commentして、そのような値を持つべきではない場合、特定のプロパティの値を持つべきではない理由を説明します。

2. 値が不明です。つまり、値があるはずですが、わかりません。

この場合、「すべき」とは正確に何を意味するのかを突き止めることが重要です。たとえば、OWL では、次のように言うことができます。

Person SubClassof (hasName min 1 String)

すべてがプロパティによってperson少なくとも 1 つに関連付けられていることをアサートします。つまり、すべての人に少なくとも 1 つの名前があります。これは何らかの価値があることを示す 1 つの方法ですが、特定のケースではそれが何であるかはわかりません。OWL を使用できず、RDF のみを使用する場合は、おそらく、「それぞれがこのプロパティに対して少なくとも 1 つの値を持つ必要が ある」という行に沿ってプロパティに を追加する必要があります。</p>StringhasNamerdfs:commenthasNameNamedEntity

3. 値が存在しない。つまり、プロパティに値がありません (例: 生きている人の死亡年)。

これは興味深いケースです。なぜなら、RDF には時間の概念が組み込まれていないからです (あるトリプルが特定の時間まで保持され、その後、他のトリプルが保持されるという意味で)。RDF グラフを (新しいトリプルの削除と挿入の両方によって) 更新できるデータベースのようなストアとして単純に使用している場合は、おそらく「私はまだ死んでいない!」という特別な予約値を使用できます。</a> . RDF で行っているように、オープン エンドのデータ モデルを使用すると、次のようなことを行うのが特に簡単になります。

mp:JohnCleese hasDeathDate mp:notDeadYet .
mp:GrahamChapman hasDeathDate "1989-10-04" .

もちろん、もう少し洗練して、ブール値のプロパティを使用して、最初のプロパティの値が意味があるかどうかを示すこともできます。

mp:JohnCleese isDeceased "false" .
mp:GrahamChapman isDeceased "true" ;
                 hasDeathDate "1989-10-04" .

4. データ消費者が値へのアクセスを許可されていない場合など、値は保留されます。

私の意見では、これは最も興味深いケースです。最も興味深いデータ変換が含まれる可能性があるからです。人々がクエリできる優れたデータセットがあり、許可がない場合を除いて得られる結果について何かを示したい場合、これを表現するための多くのオプションがあります。たとえば、HTTP ステータス コードのようなものを使用して、グラフ内のノードを編集のように機能する空白のノードに置き換えることができます。たとえば、次のデータがあるとします。

ex:JohnDoe hasSSN "000-00-0000" .
ex:JaneDoe hasSSN "000-00-0001" .

誰かがデータを要求すると、次のように応答する可能性があります (最初の値が有効で、2 番目の値が無効であると仮定します)。

ex:JohnDoe hasSSN [ a ex:ValidSSN ] .
ex:JaneDoe hasSSN [ a ex:InvalidSSN ] .

一般に、実際に所有しているものとは異なるビューのデータを消費者に提示できます。私はこの種のことを行うための基準を知りません。少し関連する最近の W3C 勧告であるPROV-O: The PROV Ontologyに興味があるかもしれません。これは、情報の出所 (たとえば、何から生成されたか、何に起因するか) を記述するための語彙です。リクエスタが完全な形で利用できないリソースの種類を説明するのに役立つ可能性があります。

于 2013-06-03T02:25:41.597 に答える
5

RDF で少しモデリングを行います。あなたが探している種類の情報を表すために広く使用されている語彙はありません。ただし、適用可能な広く受け入れられているパターンがあります。

私が約1年前に行った作業では、「null許容値」でプロパティを表すという同様の要件がありました。null 許容値を持つプロパティには、値が存在するか、値が存在しない理由がありました。

プロパティの値として b ノードを導入することでこれを表現しました。そのbノードは、値にリンクする rdf:value プロパティ、または値が利用できない理由にリンクする reason プロパティのいずれかを持ちます。

:foo
   :aProp [a :nullableValue; rdf:value "value"] ;
   :bProp [a :nullableValue; :reason :notAvailable ]
.
于 2013-06-03T14:10:00.057 に答える
4

w3メーリングリストの他の人が指摘しているように、値が「NULL」のトリプルを作成しないでください。トリプルを作成するときは、このデータを無視する必要があります。

于 2013-06-04T13:29:36.873 に答える
0

この問題に関する議論をpublic-lod メーリング リストにリンクしたかっただけです。また、 rdf:nil の使用など、ここで言及されていない他の代替手段についても言及しました。

于 2013-06-03T21:47:18.147 に答える