2016-11-30 53 views
1

我使用TopBraid Composer免費版(5.1.3)創建本體,包括SPIN約束。然後我將生成的RDF文件加載到RDF4J(2.0.1)中,並使用RDF4J Workbench進行測試。使用CONSTRUCT的SPIN約束:CONSTRUCT的三元組在哪裏去?

我工作的SPIN約束。下面就來檢查,我已經加入到CRO2:SignalRate類非負信號速率的例子:

CONSTRUCT { 
    ?this soo:hasConstraintViolation _:b0 . 
    _:b0 a spin:ConstraintViolation . 
    _:b0 rdfs:label "Non-Positive SignalRate" . 
    _:b0 spin:violationRoot ?this . 
    _:b0 spin:violationPath Nuvio:hasDataValue . 
    _:b0 spin:violationLevel spin:Warning . 
} 
WHERE { 
    ?this Nuvio:hasDataValue ?signalRate . 
    FILTER (?signalRate <= 0.0) . 
} 

所以,我用下面的SPARQL更新查詢測試在RDF4J工作臺這個約束:

PREFIX inst: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Sharing/Instantiations#> 
PREFIX Nuvio: <http://cogradio.org/ont/Nuvio.owl#> 
PREFIX CRO2: <http://cogradio.org/ont/CRO2.owl#> 

INSERT DATA { 
    inst:aSignalRate_test a CRO2:SignalRate ; 
    Nuvio:hasDataValue "-10"^^xsd:long . 
} 

該測試即時違反了上面顯示的約束。如果我省略了spin:violationLevel三人和讓這種默認爲spin:Error,然後我從查詢得到一個錯誤消息,並且測試實例不被肯定,符合市場預期。如圖所示執行時,違反約束條件爲spin:Warning,因此使用數據值-10.0創建個人inst:aSignalRate_test我的問題是,約束的CONSTRUCT子句中的斷言在哪裏去?我相信,自從spin:violationLevel影響行爲發生變化以來,他們就被宣稱了。請注意,我試圖用我自己的​​屬性綁定到空白節點,但這不起作用。 CONSTRUCT三元組是否在其他上下文/圖中被聲明?我只是使用默認/圖形的一切。

我在尋找使用RDF4J工作臺的瀏覽和使用SPARQL查詢都預期三倍。例如,下面的查詢返回任何內容後,我堅持我的武俠CRO2:SignalRate

PREFIX spin: <http://spinrdf.org/spin#> 

SELECT DISTINCT * 
WHERE { 
    ?s spin:violationRoot ?o . 
} 

此行爲是在TopBraid作曲家FE和RDF4J工作臺斷言之間是一致的。

我的目標是找到和使用的診斷消息在SPIN違反約束的情況下斷言,最好用SPARQL查詢來找到這樣的診斷。看起來很合理。我錯過了一些東西。

謝謝。

回答

2

答案很簡單:你不能。

SPIN限制旨在發現違反和舉報。在RDF4J中,該報告機制是日誌。

自旋規範(http://spinrdf.org/spin.html#spin-constraints)的相關部分:

[...]如果一個ASK約束評估爲true一個 實例,則實例違反了條件。可選地, CONSTRUCT查詢可以創建旋轉實例:ConstraintViolation 類,它提供有關特定違規的詳細信息。

請注意,推理程序不需要對基於CONSTRUCT的約束所產生的數據執行任何操作 - 僅用於可選「附加信息」。

這也許值得看的,如果我們可以添加一個增強推理報告這樣的三元早在這種或那種形式,但在目前的系統中,只有規則(使用DELETE/INSERT等)修改數據庫的旋轉。

+0

OK,我可以切換到實施我約束構造。我過去做過。構造函數在關聯的類被聲明時被調用,並且在構造函數觸發時,它們的聲明確實會將其轉到可見的三重存儲 - 對後續查詢可見。缺點是嚴重的錯誤不會阻止類的斷言,因爲它們會自旋:致命或旋轉:帶約束的錯誤。我將不得不仔細考慮如何保護後續規則免受不良數據的影響(例如負的CRO2:SignalRate)。 DELETE可能是解決方案的核心。 –

+1

@GregCox我之前提到過這一點,但不要害怕使用RDF4J記錄功能請求。 SPIN推理器仍然處於測試階段,我們在做設計選擇時一定忽略了用例。 –

1

因此,在@JeenBroekstra評論和我上面的回覆評論之後,我已經轉向使用構造函數,以便錯誤信息保持爲可見的構件。我創建了幾個我自己的spin的子屬性:構造函數以保持事物的順序。我還指定了這些構造函數的執行順序,以便這些檢查在可能被絆倒的其他規則之前運行(例如,通過負信號速率)。

優點這種方法的:

  • 錯誤細節假象(例如旋:violationRoot)在三元組庫保持可見。這在涉及機器對機器的應用中非常重要。
  • 所有符合性檢查都已完成,因此具有多個問題的個人將所有問題列爲單獨的hasConstraintViolation屬性,而不僅僅是阻止實例化的第一個違規。這種方法的

缺點:

  • 的錯誤的個體仍實例化。
  • 這不是標準行爲,因此適用於在日誌中查找約束工件的工具可能找不到它們。

這裏的自旋的子屬性實施的示例規則的屏幕截圖:構造:

enter image description here

相關問題