2016-04-21 14 views
2

私は小さなオントロジを作成しました。それにはmethodsというクラスと、action_nb(整数)というデータ型プロパティがあります。SPARQLクエリの実行

は、その後、私は二人の個人を作成しました:

AHP => action_nb = 20

electre => action_nb = 50

私は、単純なクエリを実行します。方法を選択してnb_action < 40と結果が私にEL1を与える必要があります。

<?xml version="1.0"?> 
 

 

 
<!DOCTYPE rdf:RDF [ 
 
    <!ENTITY owl "http://www.w3.org/2002/07/owl#" > 
 
    <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" > 
 
    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" > 
 
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > 
 
    <!ENTITY untitled-ontology-77 "http://www.semanticweb.org/diabolico/ontologies/2016/3/untitled-ontology-77#" > 
 
]> 
 

 

 
<rdf:RDF xmlns="http://www.semanticweb.org/diabolico/ontologies/2016/3/untitled-ontology-77#" 
 
    xml:base="http://www.semanticweb.org/diabolico/ontologies/2016/3/untitled-ontology-77" 
 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
 
    xmlns:untitled-ontology-77="http://www.semanticweb.org/diabolico/ontologies/2016/3/untitled-ontology-77#" 
 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
 
    <owl:Ontology rdf:about="http://www.semanticweb.org/diabolico/ontologies/2016/3/untitled-ontology-77"/> 
 
    
 

 

 
    <!-- 
 
    /////////////////////////////////////////////////////////////////////////////////////// 
 
    // 
 
    // Data properties 
 
    // 
 
    /////////////////////////////////////////////////////////////////////////////////////// 
 
    --> 
 

 
    
 

 

 
    <!-- http://www.semanticweb.org/diabolico/ontologies/2016/3/untitled-ontology-77#action_nb --> 
 

 
    <owl:DatatypeProperty rdf:about="&untitled-ontology-77;action_nb"> 
 
     <rdfs:domain rdf:resource="&untitled-ontology-77;methods"/> 
 
     <rdfs:range rdf:resource="&xsd;integer"/> 
 
    </owl:DatatypeProperty> 
 
    
 

 

 
    <!-- 
 
    /////////////////////////////////////////////////////////////////////////////////////// 
 
    // 
 
    // Classes 
 
    // 
 
    /////////////////////////////////////////////////////////////////////////////////////// 
 
    --> 
 

 
    
 

 

 
    <!-- http://www.semanticweb.org/diabolico/ontologies/2016/3/untitled-ontology-77#methods --> 
 

 
    <owl:Class rdf:about="&untitled-ontology-77;methods"/> 
 
    
 

 

 
    <!-- 
 
    /////////////////////////////////////////////////////////////////////////////////////// 
 
    // 
 
    // Individuals 
 
    // 
 
    /////////////////////////////////////////////////////////////////////////////////////// 
 
    --> 
 

 
    
 

 

 
    <!-- http://www.semanticweb.org/diabolico/ontologies/2016/3/untitled-ontology-77#ahp --> 
 

 
    <owl:NamedIndividual rdf:about="&untitled-ontology-77;ahp"> 
 
     <rdf:type rdf:resource="&untitled-ontology-77;methods"/> 
 
     <action_nb rdf:datatype="&xsd;integer">20</action_nb> 
 
    </owl:NamedIndividual> 
 
    
 

 

 
    <!-- http://www.semanticweb.org/diabolico/ontologies/2016/3/untitled-ontology-77#electre --> 
 

 
    <owl:NamedIndividual rdf:about="&untitled-ontology-77;electre"> 
 
     <rdf:type rdf:resource="&untitled-ontology-77;methods"/> 
 
     <action_nb rdf:datatype="&xsd;integer">50</action_nb> 
 
    </owl:NamedIndividual> 
 
</rdf:RDF> 
 

 

 

 
<!-- Generated by the OWL API (version 3.4.2) http://owlapi.sourceforge.net -->

PREFIX ex: <http://example.org/so#> 
 
SELECT ?methods 
 
WHERE { 
 
    ?inst rdf:type ex:methods . 
 
    ?inst ex:action_nb ?value . 
 
FILTER (?value < 40) 
 
}

これは私が操作されているコードである。しかし、60

答えて

1
を使用する場合40 & 2列でフィルタリングするとき、それは私だけ空白行を与え

これにアプローチする方法を理解するための鍵は、RDFトリプルがどのように定義されているかを理解することです。あなたは、action_nbが、値を比較したい整数であることを述べました。したがって、そのプロパティを使用してクエリを作成します。

PREFIX untitled-ontology-77: <http://www.semanticweb.org/diabolico/ontologies/2016/3/untitled-ontology-77#> 
SELECT ?inst 
WHERE { 
    ?inst untitled-ontology-77:action_nb ?value . 
    FILTER (?value < 40) 
} 

... FILTER句はプロパティは他のクラスで使用されている場合は40

未満のaction_nbの値のみを可能にし、あなたがしたい場所methodsのメンバーのみが発見されていることを確認し、その後、あなたも、そのクラスのインスタンスを照会する必要があります。

PREFIX untitled-ontology-77: <http://www.semanticweb.org/diabolico/ontologies/2016/3/untitled-ontology-77#> 
SELECT ?inst 
WHERE { 
    ?inst rdf:type untitled-ontology-77:methods . 
    ?inst untitled-ontology-77:action_nb ?value . 
    FILTER (?value < 40) 
} 

私はあなたがこのケースでDISTINCTを必要とし、findinことに注意してくださいよ疑いますgすべての個別値は照会の後に実行されますが、すべてのSELECTED値に対に適用されます。私。大きな結果セットではうまく機能しないことがあります。したがって、必要な場合にのみDISTINCTを使用してください。

+0

お世話になりました。 接頭辞(?inst)を定義する方法は?私はそれに何を入れるべきですか?私は答えを探していますが、私はただ話している文書を見つけました(foaf)。 – zaky2016

+0

'?'は名前空間ではなく変数を示します。 ':'は接頭辞付きの名前空間を表し、わかりやすくするために名前を付けました。クエリ言語の詳細については、Googling SPARQLを参照してください。 – scotthenninger

+0

私は申し訳ありませんが、私はプレフィックス(例:)を意味しています。これは私のPFEプロジェクトであり、多くの時間が残っていないので、ちょうどその一部です。これで私は感謝します – zaky2016

関連する問題