Как использовать ограничение количества элементов для связи класса с экземпляром в протеже? - PullRequest
0 голосов
/ 04 мая 2020

Например, все люди из класса A могут использоваться только в одном месте B - экземпляре. Я бы хотел, чтобы «Класс А» использовался в (только / точно 1) [местоположение Б]. Но кажется, что это ограничение можно держать только между классами. Как я могу сделать это, не создавая пустой класс экземпляра "местоположение B"?

Спасибо.

1 Ответ

0 голосов
/ 04 мая 2020

Если вы хотите сказать, что все экземпляры класса 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 (который описывает, как мир равен ).

...