TopBraid Composer Free Edition (5.1.3) を使用して、SPIN 制約を含むオントロジーを作成しています。次に、結果の RDF ファイルを RDF4J (2.0.1) にロードし、RDF4J Workbench を使用してテストします。
私は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
トリプルを省略し、これをデフォルトで aspin:Error
にすると、クエリからエラー メッセージが表示され、テスト インスタンスが期待どおりにアサートされません。示されているように実行すると、制約違反は であるspin:Warning
ため、inst:aSignalRate_test
個人はデータ値 -10.0 で作成されます。 私の質問は、制約のCONSTRUCT
句のアサーションはどこに行くのですか? spin:violationLevel
影響行動 の変更以来、それらは主張されていると思います。独自のプロパティを使用して空のノードに結び付けようとしましたsoo:hasConstraintViolation
が、これは機能しません。CONSTRUCT トリプルは他のコンテキスト/グラフでアサートされていますか? すべてにデフォルト/グラフを使用しています。
RDF4J Workbench の Explore と SPARQL クエリの両方を使用して、予想されるトリプルを探しています。たとえば、次のクエリは、 I assert my errant の後、何も返しませんCRO2:SignalRate
。
PREFIX spin: <http://spinrdf.org/spin#>
SELECT DISTINCT *
WHERE {
?s spin:violationRoot ?o .
}
この動作は、TopBraid Composer FE と RDF4J Workbench でのアサート間で一貫しています。
私の目標は、できれば SPARQL クエリを使用してそのような診断を見つけることにより、SPIN 制約違反の場合にアサートされる診断メッセージを見つけて使用することです。合理的なようです。何かが足りない。
ありがとう。