2011-07-06 113 views
2

我試圖找出一種實現SWRL規則的方法,該規則需要使用OR類型語句。這裏是場景:本體有一個「MachineTool」類,它具有「hasProcess」的對象屬性和一些進程類。我們希望能夠獲得具有hasProcess值「EndMilling」或「Drilling」的MachineTool的個人列表。SWRL規則使用OR語句

如果「或」語句被允許的SWRL規則應該是這樣的:

MachineTool(?mt)^hasProcess(?mt, ?p)^(EndMilling OR Drilling)(?p) -> MyMachineTools(?mt) 

但是,規則是不合法的。是否有人知道可以完成我們要查找的規則(或一組規則)?我原以爲一個替代方案可能是(但沒有測試它,門生正在此刻怪異):

EndMilling(?p) -> MyProcesses(?p) 
Drilling(?p) -> MyProcesses(?p) 
MachineTool(?mt)^hasProcess(?mt, ?p)^MyProcesses(?p) -> MyMachineTools(?mt) 

我歡迎這個問題所有的想法。

+0

指定您使用的是哪個版本的Protege。 – Kaarel

+0

我想我應該澄清那部分。最終,我需要使用OWL API以編程方式創建和運行規則。 Protege(包括3.x和4.1)用於處理更復雜的規則,直到我找出規則的外觀。 – Christian

+0

我已經編輯了我的答案,也許現在更有幫助。通常,不清楚哪些SWRL表面語法是「官方」的,哪些工具支持哪些語法。我認爲你的例子應該或可以工作。因此,可能會向Protege和OWL-API開發人員提交錯誤報告。 – Kaarel

回答

3

如果使用OWL的ObjectUnionOf表示,則在SWRL規則中是合法的。

我認爲問題出在您的代碼示例中特有的SWRL表面語法的工具支持。 Protege 3.x不支持語法上的這個OR-構造(至少它沒有上次我檢查過),而Protege 4.1可以渲染它,它不能重新分析它(只需使用rc5進行檢查)。但是,如果您使用的是最近的OWL-API(v3.2.x),並且正在使用語法,如XML或功能樣式的語法,那麼一切都應該起作用。 (請注意,Protege 3.x和4.x使用完全不同的OWL API,我建議您只使用Protege 4.x和OWL-API 3.x.)

如果您無法獲得或正在使用SWRL,那麼您可以使用與ObjectUnionOf等效的命名類,例如

EquivalentClasses(my-processes, ObjectUnionOf(end-milling, drilling)) 

machine-tool(?mt)^has-process(?mt, ?p)^my-processes(?p) 
                 -> my-machine-tool(?mt) 

需要注意的是你的工作,各地(第二示例代碼)不給語義上等價的語句,因爲你只是指出:

SubClassOf(end-milling, my-processes) 
SubClassOf(drilling, my-processes) 

這是一樣的,說明:

SubClassOf(ObjectUnionOf(end-milling, drilling), my-processes) 

即要陳述等價,您還需要其他含義:

SubClassOf(my-processes, ObjectUnionOf(end-milling, drilling)) 

另請注意,您的規則可以在OWL很容易表達,即你不需要在SWRL所有規則:

SubClassOf(
    ObjectIntersectionOf(
     :machine-tool 
     ObjectSomeValuesFrom(
     :has-process 
     ObjectUnionOf(
      :end-milling 
      :drilling 
     ) 
    ) 
    ) 
    :my-machine-tool 
) 

陳述在OWL(如果可能的話)任何事物都有一些好處,例如你會得到更好的工具支持(OWL reasoners比SWRL reasoners更多),並且你得到更強大的推理(SWRL reasoners只將規則應用於已知的個體)。

+0

我確實設法讓我的解決方案獲得理想的結果。我仍然對你的建議感興趣。您對於錯過SubClassOf含義的評論,只有在不使用推理器(如Pellet)時纔會發生?我一直在使用SWRL對這個和相關程序進行一些不同的查詢,並使用推理器來獲得結果。我認爲推理者正在調用指定進程的子類(至少它似乎是這樣做的)。在下面的例子中,是否有可能在不使用推理器的情況下獲取「my-machine-tool」類的實例? – Christian

+0

我真的不明白你的問題,但我編輯了我的答案了一下......如果你設法找到一些工作,然後在這裏發佈答案(可以回答你自己的問題)。關於「獲取實例」:你總是需要一些工具來做到這一點「獲得」。推理者是一種以語義正確和完整的方式提取事物的工具。所以總是使用一個推理器(除非計算事物的時間太長,當然,這通常是......)。 – Kaarel