2016-04-21 16 views
2

Ich habe eine kleine Ontologie erstellt. Es hat nur eine Klasse namens methods und eine Datentypeigenschaft action_nb (ganze Zahl).Ausführen einer SPARQL-Abfrage

Dann habe ich zwei Personen:

AHP => action_nb = 20

Electre => action_nb = 50

Ich möchte eine einfache Abfrage auszuführen. Wählen Sie die Methode, wo nb_action < 40 und die Ergebnisse sollten EL1 geben.

<?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) 
 
}

Dies ist der Code, ich habe die Manipulation: aber es gab mir nur eine leere Zeile, wenn sie mit 40 & 2 Reihen Filterung bei 60

Verwendung

Antwort

1

Der Schlüssel zum Verständnis dieser Vorgehensweise besteht darin, zu verstehen, wie RDF-Tripel definiert sind. Sie haben angegeben, dass action_nb die Eigenschaft ist, deren Werte ganze Zahlen sind, die Sie vergleichen möchten. Deshalb erstellen Sie Ihre Abfrage diese Eigenschaft mit:

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) 
} 

... wo die FILTER Klausel nur Werte von action_nb erlaubt, die weniger als 40

Wenn die Eigenschaft in anderen Klassen verwendet wird, und Sie wollen stellen Sie sicher, dass nur Mitglieder der methods gefunden werden, dann werden Sie auch für Instanzen dieser Klasse abfragen müssen:

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) 
} 

ich bezweifle, dass Sie DISTINCT in diesem Fall brauchen werden, und beachten Sie, dass findin Alle eindeutigen Werte werden nach der Abfrage ausgeführt, aber paarweise auf alle SELECTED-Werte angewendet. I.e. Bei großen Ergebnismengen funktioniert es möglicherweise nicht gut. Verwenden Sie daher DISTINCT nur bei Bedarf.

+0

Vielen Dank für Ihre Hilfe Herr. Wie definiere ich das Präfix (? Inst)? und welchen URI sollte ich hineinlegen? Ich suche nach einer Antwort, aber ich fand nur Dokumente, die über (Foaf) sprechen. – zaky2016

+0

Das '?' Bezeichnet eine Variable, keinen Namespace. ':' bezeichnet einen vorangestellten Namespace, und ich habe einen zur besseren Übersicht hinzugefügt. Versuchen Sie, SPARQL zu googlen, um weitere Informationen zur Abfragesprache zu erhalten. – scotthenninger

+0

es tut mir leid, ich meinte das Präfix (ex:) Ich habe so viel Arbeit übrig zu tun (Java) Dies ist nur ein Teil davon, weil dies mein PFE-Projekt ist und es nicht viel Zeit übrig ist ... nur Hilfe mit diesem und ich werde dankbar sein – zaky2016

Verwandte Themen