Если вы хотите сказать, что все экземпляры класса A
расположены в экземпляре B
и только в B
, вы можете сделать это с помощью следующего (синтаксис Turtle):
:A a owl:Class;
rdfs:subClassOf [
a owl:Restriction;
owl:allValuesFrom [
a owl:Class;
owl:oneOf ( :B )
]
], [
a owl:Restriction;
owl:onProperty :location;
owl:hasValue :B
] .
Обратите внимание, однако, что вещь с именем B
может быть известна под другими именами, поэтому, если вы знаете, что:
:x a :A;
:location :C, :D .
, тогда вы можете заключить, что C
и D
- это два других имени за вещь, названную B
. Если вы хотите, чтобы это было обнаружено как ошибка или ошибка, вы можете явно указать, что C
и D
обозначают разные вещи, чем B
:
:B owl:differentFrom :C, :D .
, или вы можете использовать ограничение язык, такой как SHACL, или вы можете полагаться на использование уникального имени (UNA) для своей процедуры рассуждения (однако стандартный OWL не делает UNA, поэтому вы не можете ожидать, что внешние данные соответствуют этому предположению).
Также обратите внимание, что если вы хотите описать ограничение на данные, например, когда какой-либо объект, как известно, является экземпляром A
, то в данных должен быть оператор, который расположен в B
, вам нужно использовать язык ограничений, такой как SHACL (который описывает, как данные должны иметь форму ), а не язык представления знаний, такой как OWL (который описывает, как мир равен ).