Semantic web では Open World Assumption (OWA) の考え方を採用している。一般論として「存在している事」は簡単(一例を挙げればよい)だが、「存在しない事」を証明するのは困難(悪魔の証明)。ところが実際データを扱い始めると、「存在しないことが分かっている」というケースがある。これをどう表現すればよいだろうか。
一方 SPARQL などは Closed World Assumption (CWA) を採用している(でなければ否定を使ったクエリの結果が得られない)。この場合は単に triple が存在しなければ、「存在しないこと」を表現しているとも言える。ただし、実運用上は「明示的に」存在しないことを表現したい。どうすればよいだろうか。
他の世界を見渡すと、例えば RDB では 3 論理値で NULL
が採用されている。C では一般的なコンベンションとして 0 が未確定値として使われる。浮動小数点数で使われる IEEE 754 の仕様では NaN
という値がある。Python pandas では NaN
に加えて None
という定数が欠損値に用いられる。cache では negative cache という手法がある。RDF ではどうするか。
この問題は completeness と呼ばれていて、何らかの completeness statement を追加するのが一般的の様子。なので SPARQL での complete reasoner という形が提案されたりしているようだが、仕様化までは到達していない、というのが現時点の状況か。
例えば保育園の申込状況のデータでは、申し込みがないことを表現している 0 と、そもそも申し込みを受け付けていない斜線の二つがある。この例に限って考えると、ひょっとすると RDB の NULL の場合分け(4論理値)みたいに、フィールドひとつに情報を詰め込もうとするから苦しいというだけだろうか。解法としては数字は 0 にして、さらに追加で「受け付けていない」というプロパティを宣言するのが良いだろうか。どうしたもんだろうか。
xsd:float
は IEEE 754 の定数を受け付けたりするので悩む : "INF"^^xsd:float
, "-INF"^^xsd:float
, "NaN"^^xsd:float