【发布时间】:2015-08-17 14:11:10
【问题描述】:
我关心我的本体(dgo.owl)的两个类(SensingDevice 和 Property),如下图所示。这两个类通过 observes 属性连接:
相关本体部分如下:
<owl:Class rdf:about="http://www.iiitd.edu.in/~haroonr/ontologies/DGO#TemperatureSensor_Livingroom">
<rdfs:subClassOf rdf:resource="http://purl.oclc.org/NET/ssnx/ssn#SensingDevice"/>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="http://purl.oclc.org/NET/ssnx/ssn#observes"/>
<owl:allValuesFrom rdf:resource="http://purl.oclc.org/NET/ssnx/qu/dim#Temperature"/>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
现在,使用 SPARQL 查询,我想知道 TemperatureSensor_Livingroom 类观察到的属性,它是 SensingDevice 的子类。同样,我正在使用以下查询:
SELECT ?y
WHERE {
dgo:TemperatureSensor_Livingroom rdfs:subClassOf ?p .
?p owl:allValuesFrom ?y .
}
通过此查询,我确实获得了所需的结果,但我不明白如果不使用 observes 属性,我将如何获得结果?我尝试使用 observes 属性来制定不同的查询,但它们都没有产生所需的答案。我认为在这种情况下,我会通过一些技巧获得结果,但我想知道这种情况下的正确查询。我可能是错的,但我认为限制在后台做一些我无法得到的事情。这些限制会影响我们查询的方式吗?
更新: 从 Artemis 和 Chris 的回答中,我发现在这种情况下,没有充分的理由直接在 SPARQL 查询中使用 observes 属性,因为上述答案中提供了正当理由。有了这个,我发现了另一个相关的用例:
本体是相同的(dgo.owl),只是我添加了一些如上所述的类。现在,如果我查询与上一个案例中提到的相同的东西,即
SELECT ?y
WHERE {
dgo:TemperatureSensor_Livingroom rdfs:subClassOf ?p .
?p owl:allValuesFrom ?y .}
正如预测的那样,它产生的输出为:
----------------------------------------------------------
| x | y |
==========================================================
| | dgo:PhysicalInput |
| | <http://purl.oclc.org/NET/ssnx/qu/dim#Temperature>
换句话说,它产生与两个属性相关的输出,即observes和detects。在这种情况下,我如何才能获得仅与 observes 属性相关的输出。
【问题讨论】:
-
您不应该更改您的问题,而是发布另一个问题。这有点令人困惑,因为将来会考虑这些问题的人。此外,如果您这样做,您需要更新问题所附的资源。
标签: rdf sparql semantics owl ontology