Protege Использование swrl:equal для сравнения значений свойства типа данных

Я строю онтологию из 3 классов:

  1. Сообщения
  2. ветчина
  3. Спам

2 свойства данных, домен: сообщения и диапазон xsd:string:

  1. имеет интерес
  2. hasCategory

2 правила SWRL: Message(?x),hasInterest(?x,?a), hasCategory(?x,?b), swrl:equal(?a,?b) ->Ham(?x)

Сообщение (? x), hasInterest (? x,? a), hasCategory (? x,? b), swrl: notEqual (? a? b) -> Спам (? x)

Я хочу классифицировать экземпляры класса Message как класс Spam или Ham ; если значение hasCategory (категория сообщения) равно значению hasInterest (интересы пользователя), то сообщение является спамом.

Это работало правильно. Если у меня есть 1 категория сообщений и 1 интерес, например: m1 hasInterests sports m1 hasCategory sports

Так что, если у меня есть список итераций или категорий, например: каждое сообщение имеет более 1 интереса {спорт, фильмы} Каждое сообщение имеет более 1 категории {кино, политика}

Я хочу сказать, что если оба списка пересекаются, то сообщение является ветчиной, поэтому swrl: equal не работает, как я могу определить его для сравнения всех людей

Что я сделал, так это повторил hasInterests и hasCategory в зависимости от отдельных значений, которые я имею в виду, определяя список вручную, и это сработало, есть ли другой автоматический способ использования списка строк и как их сравнить в swrl?


person user3379762    schedule 21.04.2017    source источник


Ответы (1)


Встроенные модули SWRL для строк (http://www.daml.org/rules/proposal/builtins.html) поддерживают только простые строковые функции. В вашей модели вы можете смоделировать индивидуальное сообщение m1 со многими интересами и многими категориями, например:

m1 hasInterests "sports", m1 hasInterests "movies" 
m1 hasCategory "sports", m1 m1 hasCategory "movies" 

и с вашим правилом

Message(?x),hasInterest(?x,?a),hasCategory(?x,?b), swrl:equal(?a,?b) ->Ham(?x)

каждое сообщение с хотя бы одним интересом, равным категории, становится Ham.

Возможно, полезный совет, чтобы найти количество интересов, но с запросом SQWRL:

Message(?x) ^ hasInterest(?x,?a) → sqwrl:select(?x) ^ sqwrl:count(?a)
person andrejt    schedule 08.03.2018