1

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 制約違反の場合にアサートされる診断メッセージを見つけて使用することです。合理的なようです。何かが足りない。

ありがとう。

4

2 に答える 2

1

したがって、上記の @JeenBroekstra コメントと私の応答コメントに従って、コンストラクターの使用に切り替えて、エラー情報が目に見えるアーティファクトとして残るようにしました。順序を保つために、spin:constructor の独自のサブプロパティをいくつか作成しました。また、これらのコンストラクターの実行順序を指定して、これらのチェックが (たとえば、負の信号レートによって) 作動する可能性のある他のルールよりも先に実行されるようにしました。

このアプローチの利点:

  • エラー詳細アーティファクト (spin:violationRoot など) は、トリプル ストアに表示されたままになります。これは、マシン ツー マシンを含む私のアプリケーションでは非常に重要です。
  • hasConstraintViolationすべてのコンプライアンス チェックが完了しているため、複数の問題を抱えている個人は、インスタンス化をブロックする最初の違反だけでなく、すべての問題を個別のプロパティとしてリストします。

このアプローチの欠点:

  • 誤った個人はまだインスタンス化されています。
  • これは標準的な動作ではないため、ログ内の制約アーティファクトを検索するように調整されたツールは、おそらくそれらを見つけられません。

以下は、spin:constructor のサブプロパティとして実装されたルールの例のスクリーン ショットです。

ここに画像の説明を入力

于 2016-12-02T13:00:13.110 に答える