簡體   English   中英

Protege中的SWRL語法

[英]SWRL syntax in Protege

我正在使用Protege5.0,我想實現SWRL規則,即

User(?u), isInActivity(?u, ?cm), ContextMeeting(?cm) -> FamilyContact(?f), hasStatus(?f, "Reject")

這意味着“如果用戶正在開會,則家庭聯系人的狀態為“拒絕”。

此語法應該可以工作,並且protege不會顯示任何錯誤。 但是,它不起作用。 當我寫

User(?u), isInActivity(?u, ?cm), ContextMeeting(?cm), FamilyContact(?f) -> hasStatus(?f, "Reject")

當我以這種格式編寫復雜的規則時,此語法可以完美地工作,但是它沒有用。 誰能解釋兩種格式之間的區別,並給我一個完美的解決方案?

更多說明:

我有一個主要的類PeoplePeople的子類是Contact和User Contact的子類是FamilyContact,EmployeeContact等。** User和Contact由對象屬性isContactOf(People,Contact)關聯 。在我的本體中, User類應該只有一個人。 現在,我要實現SWRL規則,即, 如果**用戶正在開會,則FamilyContact hasStatus“拒絕”。**此拒絕只是意味着Family成員無法呼叫用戶。 另一個規則是, 如果用戶正在開會,則EmployeeContact hasStatus“ Pass”。 hasStatus(Contact,String)是一個功能屬性。

第二個規則語法可以完美地工作,但是當我想為EmployeeContact和FamilyContact的那些實例實施規則時,就會遇到問題。 例如,如果我寫了一條規則,即

User(?u), isInActivity(?u, ?cm), ContextMeeting(?cm), FamilyContact(?f), EmployeeContact(?e), DifferentFrom(?f,?e)-> hasStatus(?f, "Reject").

它以某種方式工作,但我遇到了問題。 它使EmployeeContact的其他實例也成為FamilyContact的實例,反之亦然。

規則

User(?u)?isInActivity(?u,?cm)?ContextMeeting(?cm)→FamilyContact(?f)?hasStatus(?f,“ Reject”)

在規則的右手邊(結果)中使用?f,而不是在左手邊(前件)中使用?f。 該語言不允許(強調):

2.1。 規則

原子可以指個體,數據文字,個體變量或數據變量。 變量被視為通用量化變量,其范圍限於給定規則。 像往常一樣,結果中僅可能出現在規則的前部發生的變量(通常稱為“安全”的條件)。 實際上,此安全條件並不限制語言的表達能力(因為可以使用OWL someValuesFrom限制來捕獲存在性)。

如果這是合法的,那么您的規則將意味着:

對於每個u,cm和f,

  • 如果 u是User且cm是ContextMeeting並且u以cm為單位,
  • 那么 f是家庭聯系人,並且狀態為“拒絕”。

但是,由於對?f沒有任何限制,因此,這意味着任何用戶都可以參加任何上下文會議,那么一切都是狀態為“拒絕”的家庭聯系人,而這可能並不是您想要的。 f是否應該以某種方式與u相關? 建議的替代方案:

用戶(?u)?isInActivity(?u,?cm)?ContextMeeting(?cm)?FamilyContact(?f)→hasStatus(?f,“拒絕”)

有類似的問題。 這意味着:

對於每個u,cm和f,

  • 如果 u是用戶,cm是ContextMeeting,並且u以cm為單位,f是家庭聯系人,
  • 那么 f的狀態為“拒絕”。

u和f之間仍然沒有任何聯系,因此這表示,如果任何用戶在任何上下文中的會議中,則每個家庭聯系人的狀態均為“拒絕”。 這似乎也不是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM