我使用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查詢來找到這樣的診斷。看起來很合理。我錯過了一些東西。
謝謝。
OK,我可以切換到實施我約束構造。我過去做過。構造函數在關聯的類被聲明時被調用,並且在構造函數觸發時,它們的聲明確實會將其轉到可見的三重存儲 - 對後續查詢可見。缺點是嚴重的錯誤不會阻止類的斷言,因爲它們會自旋:致命或旋轉:帶約束的錯誤。我將不得不仔細考慮如何保護後續規則免受不良數據的影響(例如負的CRO2:SignalRate)。 DELETE可能是解決方案的核心。 –
@GregCox我之前提到過這一點,但不要害怕使用RDF4J記錄功能請求。 SPIN推理器仍然處於測試階段,我們在做設計選擇時一定忽略了用例。 –