1

TopBraid Free Edition を使用して、SPIN ルールで OWL オントロジーを作成しています。オントロジーと SPIN ルールを Sesame OpenRDF Workbench にロードしています。

Application Name    OpenRDF Workbench
Version 4.1.2
Runtime Information
Operating System    Windows 8.1 6.3 (amd64)
Java Runtime    Oracle Corporation Java HotSpot(TM) 64-Bit Server VM (1.8.0_91)
Process User    Greg
Memory
Used    646 MB
Maximum 3463 MB

簡単なテスト オントロジーを作成しました。これには、1 つの SPIN ルールと 1 つのデータ型プロパティを持つ 1 つのクラスがあります。

CONSTRUCT {
    ?this BugReproduction:hasTimeStamp ?timeStamp .
}
WHERE {
    BIND (now() AS ?timeStamp) .
}

SPIN ルールはxsd:dateTime、テスト クラスのテスト インスタンスにタイムスタンプを追加します。これは、クラス、データ型プロパティ、およびルール (短い) を含むテスト オントロジー全体の RDF です。

    <?xml version="1.0"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:sp="http://spinrdf.org/sp#"
    xmlns:BugReproduction="http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproduction#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:spin="http://spinrdf.org/spin#"
    xmlns:spl="http://spinrdf.org/spl#"
    xmlns:arg="http://spinrdf.org/arg#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
  xml:base="http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproduction">
  <owl:Ontology rdf:about="">
    <owl:imports rdf:resource="http://spinrdf.org/spl"/>
    <owl:versionInfo rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Created with TopBraid Composer</owl:versionInfo>
  </owl:Ontology>
  <owl:Class rdf:ID="TimeStampBug">
    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
    <spin:rule>
      <sp:Construct>
        <sp:templates rdf:parseType="Collection">
          <rdf:Description>
            <sp:object rdf:parseType="Resource">
              <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
              >timeStamp</sp:varName>
            </sp:object>
            <sp:predicate>
              <owl:DatatypeProperty rdf:ID="hasTimeStamp"/>
            </sp:predicate>
            <sp:subject rdf:resource="http://spinrdf.org/spin#_this"/>
          </rdf:Description>
        </sp:templates>
        <sp:where rdf:parseType="Collection">
          <sp:Bind>
            <sp:expression>
              <sp:now/>
            </sp:expression>
            <sp:variable rdf:parseType="Resource">
              <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
              >timeStamp</sp:varName>
            </sp:variable>
          </sp:Bind>
        </sp:where>
      </sp:Construct>
    </spin:rule>
  </owl:Class>
  <owl:DatatypeProperty rdf:about="#hasTimeStamp">
    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
  </owl:DatatypeProperty>
</rdf:RDF>

<!-- Created with TopBraid -->

そのため、Sesame の SPIN リポジトリをクリアし、ワークベンチの [Modify/Add] コマンドを使用します (バグを回避するために重要な [use base URI as context identifier] ボックスをオフにして)。次に、SPARQL Update クエリを使用して、クラスのテスト インスタンスを作成します。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX sxxicc: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/SXXIComplianceCheck#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX sp: <http://spinrdf.org/sp#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX smf: <http://topbraid.org/sparqlmotionfunctions#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX spl: <http://spinrdf.org/spl#>
PREFIX spin: <http://spinrdf.org/spin#>
PREFIX arg: <http://spinrdf.org/arg#>
PREFIX SXXIComplianceCheckIndividuals: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/SXXIComplianceCheckIndividuals#>
PREFIX sxxicci: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/SXXIComplianceCheckIndividuals#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX bugs: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproduction#>
PREFIX bugsi: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#>

INSERT DATA {
    bugsi:aTimeStampBug_test1 a bugs:TimeStampBug .
}

次に、結果の bugsi:aTimeStampBug_test1 を個別に調べて、SPIN:rule が複数回実行され、複数のタイムスタンプが生成されたことを確認します。タイムスタンプの数は、テストごとに異なります。結果の一例を次に示します。

Subject 
Predicate
Object
Context
<http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
    BugReproduction:hasTimeStamp
    2016-07-11T20:56:58.571-05:00   
    <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
    BugReproduction:hasTimeStamp
    2016-07-11T20:56:58.592-05:00   
    <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
    BugReproduction:hasTimeStamp
    2016-07-11T20:56:58.594-05:00   
    <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
    BugReproduction:hasTimeStamp
    2016-07-11T20:56:58.595-05:00   
    <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
    BugReproduction:hasTimeStamp
    2016-07-11T20:56:58.596-05:00   
    <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
    BugReproduction:hasTimeStamp
    2016-07-11T20:56:58.597-05:00   
    <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
    BugReproduction:hasTimeStamp
    2016-07-11T20:56:58.598-05:00   
    <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
    BugReproduction:hasTimeStamp
    2016-07-11T20:56:58.599-05:00   
    <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
    BugReproduction:hasTimeStamp
    2016-07-11T20:56:58.600-05:00   
    <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
    BugReproduction:hasTimeStamp
    2016-07-11T20:56:58.601-05:00   
    <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#aTimeStampBug_test1>
    BugReproduction:hasTimeStamp
    2016-07-11T20:56:58.602-05:00   

そのため、私の SPIN:rule は、クラスの 1 つのインスタンス化に対して数回実行されました。クラスのインスタンス化のために SPIN:rule を何回実行する必要がありますか? 一度だけ実行されると思っていましたが、間違っているようです。

4

1 に答える 1

0

SPIN:ruleは、クラスのインスタンスが変更されるたびに、クラスのインスタンスで実行されます。私が投稿した例では、別の変更 (新しいタイム スタンプ) を生成する別のルール実行を生成するルールによって生成される変更の無限ループをセットアップします。制限はおそらく Sesame の全体的な状態 (リソースやタイムアウト駆動など) に関連しているため、さまざまな数のタイムスタンプを取得します。簡単な解決策はSPIN:constructor、インスタンス化が変更されるたびではなく、インスタンス化時 (クラスがアサートされるとき) にのみ実行される代わりにを使用することです。

于 2016-07-14T17:31:31.077 に答える