执行 SPARQL 查询
Executing a SPARQL query
我创建了一个小ontology。它只有一个名为 methods
的 class 和一个数据类型 属性 action_nb
(整数)。
然后我创建了两个个体:
AHP => action_nb = 20
electre => action_nb = 50
我想执行一个简单的查询。 Select 方法,其中 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)
}
这是我一直在操作的代码:但是当使用 40 和 2 行过滤时它只给了我一个空行当使用 60
理解如何处理这个问题的关键是理解 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
值。
如果属性在其他class中使用,并且您希望确保只找到methods
的成员,那么您还需要查询实例其中 class:
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
,并且请注意查找所有不同的值是在查询之后执行的,但是成对应用于所有 SELECTED 值。 IE。对于大型结果集,它可能表现不佳。因此,只在必要时才使用DISTINCT
。
我创建了一个小ontology。它只有一个名为 methods
的 class 和一个数据类型 属性 action_nb
(整数)。
然后我创建了两个个体:
AHP => action_nb = 20
electre => action_nb = 50
我想执行一个简单的查询。 Select 方法,其中 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)
}
这是我一直在操作的代码:但是当使用 40 和 2 行过滤时它只给了我一个空行当使用 60
理解如何处理这个问题的关键是理解 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
值。
如果属性在其他class中使用,并且您希望确保只找到methods
的成员,那么您还需要查询实例其中 class:
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
,并且请注意查找所有不同的值是在查询之后执行的,但是成对应用于所有 SELECTED 值。 IE。对于大型结果集,它可能表现不佳。因此,只在必要时才使用DISTINCT
。