2016-07-28 6 views
0

Javaコードでsparqlクエリを使用してオブジェクトプロパティの範囲で複数のクラスを取得する際に問題が発生しました(Protege 3.4.8を使用)Javaでsparqlクエリを使用してオブジェクトプロパティの範囲内に複数のクラスを取得する(Protege 3.4.8)

Result1_Layer = 
        "PREFIX uni:<http://www.owl-ontologies.com/Ontology1469701449.owl#>" 
       +"PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>" 
       + "select ?range1 " 
       + "where { uni:hasS_Layer " 
    + "rdfs:range ?range1}"; 


I am getting output as:| range1        | 
========================================= 
| <http://www.w3.org/2002/07/owl#Thing> | 
| _:b0         | 
| rdfs:Resource       | 
----------------------------------------- 

しかし、出力は、2つのクラスを含める必要があります。ユーザビリティ、代わりB0のreliabilty与えるを。 オントロジには、ドメインがのオブジェクト属性hasS_Layerがあり、範囲はであり、範囲はです。ユーザビリティ、信頼性 範囲内に1つのクラスしかない場合、このクエリは正しい結果を取得します。 Protegyバージョン4.3を使用しているときに、同じクエリーがうまく動作しています。ただし、protge 3.4.8では、範囲内の複数のクラスに対して正しい出力が表示されません。 助けてください。

+0

http://tackoverflow.com/questions/19524838/retrieve-the-collection-of-unionof-and-the-for-each-owlがここで関連している可能性があります。あなたが交差点クラスの部品を検索しようとしているようです。 –

答えて

2

アンOWL交差点、RDFで表現する場合、次のようになります。

_:b0 a owl:Class; 
     owl:intersectionOf (ex:Usability, ex:Reliability) . 

またはそれ以上(我々はRDFコレクションの内部表現を展開する場合)スペルアウト:

_:b0 a owl:Class; 
     owl:intersectionOf _:b1 . 
    _:b1 rdf:first ex:Usability ; 
     rdf:rest _:b2 . 
    _:b2 rdf:first ex:Reliability ; 
     rdf:rest rdf:nil . 

あなたクエリは_:b0というrdfs:rangeプロパティの値を返します。これは2つのクラスの共通部分に対応する匿名クラスです。

あなたが交差点を構成するクラスを取り戻すしたい場合は、例えば、別のクエリを実行する必要があります。

SELECT ?c 
WHERE { uni:hasS_Layer rdfs:range ?r . 
     ?r owl:intersectionOf/rdf:rest*/rdf:first ?c . 
} 

owl:intersectionOf/rdf:rest*/rdf:firstパス式として知られており、 0より多くのrdf:restプロパティに接続するプロパティを持つ任意のリソース?rを照会し、プロパティに接続します。これは、私たちが望む属性の値です(rdf:first)。

関連する問題