OWL2 には数量化された制限があります。つまり、次の形式のクラス式を使用できます。
∃pC
これは、型Cのプロパティpの値を持つ個体のクラスを示します。同様に、制限を使用できます
∀pD
これは、プロパティpのすべての値(ただし、何もない場合があります) が型Dである個体のクラスです。値の最小数、値の最大数、または値の正確な数を指定できるように、数値の制限もあります。
≤ n pC
≥ n pC
= n pC
プロパティのドメインと範囲を宣言する公理を使用することもできます。たとえば、公理がある場合
p はドメイン C を持っています
pによって他の何かに関連付けられているものはすべてCでなければなりません。同様に、公理がある場合
p の範囲は D です
その場合、何かがpによって関連付けられているものはすべてDでなければなりません。興味深いことに、範囲公理は、普遍的な制限を含むサブクラスの公理として実際に作り直すことができます。p has range Dを次のように書くことができます
⊤ ⊑ ∀pD
これは、 ⊤ (またはowl:Thing
、つまりすべて) は、pのすべての値がDでなければならないということです。逆プロパティを使用すると、定義域公理も取得できます。 p はドメイン Cと同等です
⊤ ⊑ ∀p -1 .C
これはすべて、質問への回答の背景です。
「学生は身分証明書を 1 つだけ持っていなければならない」ということを表現したい場合、次のことができると思います。
プロパティのドメインと範囲を定義し (たとえば、:hasId rdfs:domain :Student; :hasId rdfs:range :Identification)、プロパティを機能させます。
プロパティを定義し、生徒クラスに「hasId 正確に 1 つの ID」という制限を作成します。
では、セマンティクスに関しては、これは同じですか? 同じである場合、慣習やベスト プラクティスの点で好ましいオプションはありますか?
まず、これらは同じではありません。オプション 1 では、
x hasId y
x hasId z
x が生徒であり、y と z が ID であり、y が z と同じである必要がある (プロパティが関数であるため) ことを推測することはできますが、すべての生徒を推測することはできません。身分証明書があります。OWLでプロパティが機能的であると宣言することは、各個人がそのプロパティに対して最大で1つの値を持っていること、つまり、値がないか、1つの値しか持たないことを意味します。実際には、最大カーディナリティの制限と同等です。hasId が機能的であると言うのは、言うのと同じです
⊤ ⊑ ≤1 hasId.⊤
あなたの2番目のオプションはより良い賭けです. 学生が正確に 1 つの ID を持っていると言いたい場合は、明示的に主張できます。
学生 ⊑ =1 hasId.Identification
ただし、hasId のドメインと範囲がそれぞれ Student と Identification であると宣言した場合は、少し冗長な情報があります。同等に言うことができます
学生 ⊑ =1 hasId.⊤
ここでの最良の選択肢は、ドメインと範囲に対してもう少し寛容になり、サブクラスの公理に対してもう少し明確にすることだと思います。結局、非学生は一般的に身分証明書 (運転免許証など) を持つことができ、学生は実際には複数の身分証明書 (学生 ID と運転免許証など) を持つことができます。それを踏まえて、次のようなことをするかもしれません:
クラス
- 人
- 生徒 {⊑ =1 hasId.StudentIdentification}
- 身元
プロパティ
(学生が複数の学校の学生になる可能性があるため、これでもいくつかの問題がありますが、それは別の問題です。)