0

私は一連の Jena ルールを設計しました。これらのルールの一部は、結果を返さずに非常に長い間機能し続けます。ルールが無限ループに入っているかどうかを確認するために、OWL ファイルを縮小しようとしました。幸いなことに、無限ループがあるようには見えず、少数のクラス (たとえば 100) は非常に高速に処理されます。ただし、クラスを 1 つでも追加すると、処理に時間がかかります。

各ルールにタイマーを追加する方法はありますか?たとえば、結果を返さずに一定時間以上かかる場合にルールを終了する方法はありますか? 可能であれば、どうすればよいですか?そうでない場合、同様の結果を達成する回避策はありますか?

私のイエナのルール

[rule1: (?a rdf:type owl:Class) (?b rdf:type owl:Class) (?d rdf:type owl:Class) 
        equal(?a,?b) notEqual(?b,?d) notEqual(?a,?d)  (?d rdfs:subClassOf ?a)
        (?d rdf:type ?c) 
        -> (?a rdf:type ?c) print(?a,'is a Type of',?c)]

私のオントロジーの一部

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/"
   xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/"
   xmlns:dbpediaR="http://dbpedia.org/resource/" xmlns:dbpediaO="http://dbpedia.org/ontology/"
   xmlns:dbpediaOP="http://dbpedia.org/ontology/PopulatedPlace/"
   xmlns:dbpediaOW="http://dbpedia.org/ontology/Work/"
   xmlns:dbpediaP2="http://dbpedia.org/property/2000"
   xmlns:dbpediaP21="http://dbpedia.org/property/2010" xmlns:dbpediaP="http://dbpedia.org/property/"
   xmlns:dbpedia="http://dbpedia.org/" xmlns:skos="http://www.w3.org/2004/02/skos/core#"
   xmlns:w3prov="http://www.w3.org/ns/prov#"
   xmlns:w3wgs84="http://www.w3.org/2003/01/geo/wgs84_pos#"
   xmlns:georss="http://www.georss.org/georss/">
   <owl:Class rdf:about="http://www.w3.org/2002/07/owl#Thing"/>
<owl:Class rdf:about="http://dbpedia.org/resource/Vrije">
      <dbpediaO:wikiPageDisambiguates rdf:resource="dbpediaR:Het_Vrije_Volk"/>
      <dbpediaO:wikiPageDisambiguates rdf:resource="dbpediaR:Vrije_Universiteit"/>
      <dbpediaO:wikiPageDisambiguates rdf:resource="dbpediaR:Vrije_Universiteit_Brussel"/>
      <dbpediaO:wikiPageDisambiguates rdf:resource="dbpediaR:Brugse_Vrije"/>
      <foaf:isPrimaryTopicOf rdf:resource="http://en.wikipedia.org/wiki/Vrije"/>
      <w3prov:wasDerivedFrom rdf:resource="http://en.wikipedia.org/wiki/Vrije%3Foldid%3D437015722"/>
   </owl:Class>
 </rdf:RDF>
4

1 に答える 1

3

ルールの意図を説明していただけると助かります。すべてのタイプの 3 方向の外積を選択することから始めるため、すぐにルール エンジンの処理が困難になります。

(?a rdf:type owl:Class) (?b rdf:type owl:Class) (?d rdf:type owl:Class)

したがってowl:Class、データに 100 個のインスタンスがある場合、ルールは 100*100*100 の組み合わせ、つまり 100 万の組み合わせを考慮する必要があります。そのため、少量の余分なデータを追加すると、これがさらに悪化します。

equal()とアサーションが何unequal()をしようとしているのかについては、まったくわかりません。

rdf:type間接的なスーパークラスをアサートしようとしているだけですか? その場合、これは次のように簡単に実行できます。

[(?a rdf:subClassOf ?b) (?b rdf:type ?c) -> (?a rdf:type ?c)]

RDFはトリプルのセットであるため、生成されたトリプルがすでに存在するかどうかは問題ではないことに注意してください。したがって、重複データは単純に無視されます。

于 2014-01-15T17:38:26.617 に答える