これは OWL オントロジーで行いますが、複雑です。まず、人が 1 票しか持っていないという事実をモデル化する必要があります。次に、ジョン、ボブ、メアリー、キャロルが投票したことを知っておく必要があります。2 つの「はい」と 2 つの「いいえ」があることを知っておく必要があります。ボブとジョンが「ノー」に投票したこと、そして彼らは 2 人であり、仮名を持った 1 人ではないことを知っておく必要があります。Mary と Carol は John と Bob とは違うことを知っておく必要があります。したがって、Turtle では次のようになります。
:votes a owl:FunctionalProperty .
:John :votes "no" .
:Bob :votes "no";
owl:differentFrom :John .
:Mary a [
owl:onProperty :votes;
owl:minCardinality 1
];
owl:differentFrom :Bob, :John .
:Carol a [
owl:onProperty :votes;
owl:minCardinality 1
];
owl:differentFrom :Bob, :John .
_:someone a [ owl:onProperty :votes; owl:hasValue "no" ];
owl:differentFrom _:someoneelse .
_:someoneelse a [ owl:onProperty :votes; owl:hasValue "no" ] .
_:anotherone a [ owl:onProperty :votes; owl:hasValue "yes" ];
owl:differentFrom _:anotheroneelse .
_:anotheroneelse a [owl:onProperty :votes; owl:hasValue "yes" ] .
[ owl:onProperty :votes; owl:hasValue "no" ]
owl:oneOf ( _:someone _:someoneelse ) .
[ owl:onProperty :votes; owl:hasValue "yes" ]
owl:oneOf ( _:anotherone _:anotheroneelse ) .
ここで本当に難しいのは、2 つの「はい」と 2 つの「いいえ」があることを表現することです。コンパクトにしたのでOWL 2 DLにはありませんが、OWL 2 DLのオントロジーにできるはずです。
これにより、複数の投票または投票をモデル化することはできないことに注意してください。さらに複雑なソリューションが必要になります (それでも実行可能です)。