2016-04-21 242 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在这种情况下,并注意发掘的g在查询后执行所有不同的值,但将其成对应用于所有SELECTED值。即它可能无法很好地处理大型结果集。因此,仅在必要时才使用DISTINCT

+0

非常感谢您的帮助先生。 如何定义前缀(?inst)?我应该把它放在什么URI中?我正在寻找答案,但我只找到文件谈论(foaf)。 – zaky2016

+0

'?'表示一个变量,而不是一个名称空间。 ':'表示一个前缀名称空间,为了清晰起见,我添加了一个名称空间。尝试使用Google搜索SPARQL获取有关查询语言的更多信息。 – scotthenninger

+0

对不起,我的意思是前缀(前:)我还有很多工作要做(java),这只是它的一部分,因为这是我的PFE项目,没有太多时间了...只是帮助与此,我将不胜感激 – zaky2016