使用 SPARQL 查询返回的个人数量较少
Less number of individuals returned using SPARQL query
我有一个 ontology,我对下图所示的 classes 感兴趣:
我已经创建了两个 Observation class 个体(即 observation1 和 observation2),因此相应地创建了其他 classes(传感器输出,observationvalue)的两个个体,如下所示:
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation1 -->
<owl:NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation1">
<rdf:type rdf:resource="&j.3;Observation"/>
<j.3:observationResult rdf:resource="&j.3;SensorOutput1"/>
<j.3:observedBy rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Co2Sensor_Diningroom"/>
<j.3:observationSamplingTime rdf:resource="&j.2;Instant1"/>
</owl:NamedIndividual>
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation2 -->
<owl:NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation2">
<rdf:type rdf:resource="&j.3;Observation"/>
<j.3:observationResult rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput2"/>
</owl:NamedIndividual>
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue1 -->
<owl:NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue1">
<rdf:type rdf:resource="&j.3;ObservationValue"/>
<j.1:hasRegionDataValue rdf:datatype="&xsd;decimal">216.56</j.1:hasRegionDataValue>
</owl:NamedIndividual>
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue2 -->
<Owl: NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue2">
<rdf:type rdf:resource="&j.3;ObservationValue"/>
<j.1:hasRegionDataValue rdf:datatype="&xsd;string">121212</j.1:hasRegionDataValue>
</owl:NamedIndividual>
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput1 -->
<owl:NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput1">
<rdf:type rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Co2SensorOutput"/>
<j.3:hasValue rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue1"/>
</owl:NamedIndividual>
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput2 -->
<owl:NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput2">
<rdf:type rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Co2SensorOutput"/>
<j.3:hasValue rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue2"/>
</owl:NamedIndividual>
现在,当我使用 SPARQL 获取与两个观察值关联的 observationValues 时,我过去只获取与 observation2 关联的值,而没有获取任何关于 observation1 的值。 Sparql 查询是:
PREFIX ssn: <http://purl.oclc.org/NET/ssnx/ssn#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dul: <http://www.loa-cnr.it/ontologies/DUL.owl#>
SELECT ?x ?r ?val
WHERE
{ ?x rdf:type ssn:Observation.
?x ssn:observationResult ?d.
?d ssn:hasValue ?r.
?r dul:hasRegionDataValue ?val.
}
我想知道我哪里做错了,为什么只返回一个(即 observation2 而不是 observation1)个人?
您的文件有误。您的实例在不同位置以某种方式命名。要使您的查询正常运行,请使用完整的 uri:http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput1
重命名行 1581 上的个人 &j.3;SensorOutput1
。更具体地说:
第 1581 行
改变这个:
<j.3:observationResult rdf:resource="&j.3;SensorOutput1"/>
为此:
<j.3:observationResult rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput1"/>
鉴于上述变化,查询 returns:
x | r | val
<http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation2> <http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue2> "121212"^^<http://www.w3.org/2001/XMLSchema#string>
<http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation1> <http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue1> 216.56
不要忘记在数据中正确键入原始值,即 216.56
键入为十进制,而 121212
键入为字符串。
Observation1
与您的查询不匹配,因为其 ssn:observationResult
、(ssn:SensorOutput1
) 的值没有 ssn:hasValue
属性。因此,结果仅返回 Observation2
。
我有一个 ontology,我对下图所示的 classes 感兴趣:
我已经创建了两个 Observation class 个体(即 observation1 和 observation2),因此相应地创建了其他 classes(传感器输出,observationvalue)的两个个体,如下所示:
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation1 -->
<owl:NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation1">
<rdf:type rdf:resource="&j.3;Observation"/>
<j.3:observationResult rdf:resource="&j.3;SensorOutput1"/>
<j.3:observedBy rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Co2Sensor_Diningroom"/>
<j.3:observationSamplingTime rdf:resource="&j.2;Instant1"/>
</owl:NamedIndividual>
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation2 -->
<owl:NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation2">
<rdf:type rdf:resource="&j.3;Observation"/>
<j.3:observationResult rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput2"/>
</owl:NamedIndividual>
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue1 -->
<owl:NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue1">
<rdf:type rdf:resource="&j.3;ObservationValue"/>
<j.1:hasRegionDataValue rdf:datatype="&xsd;decimal">216.56</j.1:hasRegionDataValue>
</owl:NamedIndividual>
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue2 -->
<Owl: NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue2">
<rdf:type rdf:resource="&j.3;ObservationValue"/>
<j.1:hasRegionDataValue rdf:datatype="&xsd;string">121212</j.1:hasRegionDataValue>
</owl:NamedIndividual>
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput1 -->
<owl:NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput1">
<rdf:type rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Co2SensorOutput"/>
<j.3:hasValue rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue1"/>
</owl:NamedIndividual>
<!-- http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput2 -->
<owl:NamedIndividual rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput2">
<rdf:type rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Co2SensorOutput"/>
<j.3:hasValue rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue2"/>
</owl:NamedIndividual>
现在,当我使用 SPARQL 获取与两个观察值关联的 observationValues 时,我过去只获取与 observation2 关联的值,而没有获取任何关于 observation1 的值。 Sparql 查询是:
PREFIX ssn: <http://purl.oclc.org/NET/ssnx/ssn#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dul: <http://www.loa-cnr.it/ontologies/DUL.owl#>
SELECT ?x ?r ?val
WHERE
{ ?x rdf:type ssn:Observation.
?x ssn:observationResult ?d.
?d ssn:hasValue ?r.
?r dul:hasRegionDataValue ?val.
}
我想知道我哪里做错了,为什么只返回一个(即 observation2 而不是 observation1)个人?
您的文件有误。您的实例在不同位置以某种方式命名。要使您的查询正常运行,请使用完整的 uri:http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput1
重命名行 1581 上的个人 &j.3;SensorOutput1
。更具体地说:
第 1581 行
改变这个:
<j.3:observationResult rdf:resource="&j.3;SensorOutput1"/>
为此:
<j.3:observationResult rdf:resource="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#SensorOutput1"/>
鉴于上述变化,查询 returns:
x | r | val
<http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation2> <http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue2> "121212"^^<http://www.w3.org/2001/XMLSchema#string>
<http://www.iiitd.edu.in/~haroonr/ontologies/DGO#Observation1> <http://www.iiitd.edu.in/~haroonr/ontologies/DGO#ObservationValue1> 216.56
不要忘记在数据中正确键入原始值,即 216.56
键入为十进制,而 121212
键入为字符串。
Observation1
与您的查询不匹配,因为其 ssn:observationResult
、(ssn:SensorOutput1
) 的值没有 ssn:hasValue
属性。因此,结果仅返回 Observation2
。