これを行う標準的な方法はわかりませんが、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
。どちらかが両方ある場合は、調査すべき問題がある可能性があります。AnimateObject
OWL を使用すると、とが素であることを実際に宣言し、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>String
hasName
rdfs:comment
hasName
NamedEntity
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に興味があるかもしれません。これは、情報の出所 (たとえば、何から生成されたか、何に起因するか) を記述するための語彙です。リクエスタが完全な形で利用できないリソースの種類を説明するのに役立つ可能性があります。