【发布时间】:2020-11-25 00:08:51
【问题描述】:
我有以下 Brick.ttl 建筑物本体的示例实例
@prefix : <https://example.org/ontologies/test#> .
@prefix brick: <https://brickschema.org/schema/1.1/Brick#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:CH1_Active_Power_Sensor a owl:NamedIndividual,
brick:Active_Power_Sensor ;
brick:isPointOf :CH1 .
:CH1_Chilled_Water_Entering_Temperature_Sensor a owl:NamedIndividual,
brick:Chilled_Water_Entering_Temperature_Sensor ;
brick:isPointOf :CH1 .
:CH1_Chilled_Water_Leaving_Temperature_Sensor a owl:NamedIndividual,
brick:Chilled_Water_Leaving_Temperature_Sensor ;
brick:isPointOf :CH1 .
:CH2_Active_Power_Sensor a owl:NamedIndividual,
brick:Active_Power_Sensor ;
brick:isPointOf :CH2 .
:CH2_Chilled_Water_Leaving_Temperature_Sensor a owl:NamedIndividual,
brick:Chilled_Water_Leaving_Temperature_Sensor ;
brick:isPointOf :CH2 .
:CH3_Chilled_Water_Entering_Temperature_Sensor a owl:NamedIndividual,
brick:Chilled_Water_Entering_Temperature_Sensor ;
brick:isPointOf :CH3 .
:CH3_Chilled_Water_Leaving_Temperature_Sensor a owl:NamedIndividual,
brick:Chilled_Water_Leaving_Temperature_Sensor ;
brick:isPointOf :CH3 .
:CH1 a owl:NamedIndividual, brick:Chiller ;
brick:hasPoint :CH1_Active_Power_Sensor ;
brick:hasPoint :CH1_Chilled_Water_Entering_Temperature_Sensor ;
brick:hasPoint :CH1_Chilled_Water_Leaving_Temperature_Sensor .
:CH2 a owl:NamedIndividual, brick:Chiller ;
brick:hasPoint :CH2_Active_Power_Sensor ;
brick:hasPoint :CH2_Chilled_Water_Leaving_Temperature_Sensor .
:CH3 a owl:NamedIndividual, brick:Chiller ;
brick:hasPoint :CH3_Chilled_Water_Entering_Temperature_Sensor ;
brick:hasPoint :CH3_Chilled_Water_Leaving_Temperature_Sensor .
我需要识别具有一组点的实例,即所有砖块:冷却器,其中所有成员来自 {brick:Chilled_Water_Entering_Temperature_Sensor,brick:Chilled_Water_Leaving_Temperature_Sensor}(以及任何其他)。
使用 SPARQL 很容易,即
SELECT ?subject WHERE {
?subject brick:hasPoint ?p1 .
?p1 rdf:type/rdfs:subClassOf* brick:Chilled_Water_Entering_Temperature_Sensor .
?subject brick:hasPoint ?p2 .
?p2 rdf:type/rdfs:subClassOf* brick:Chilled_Water_Leaving_Temperature_Sensor .
}
但是我有很多这样的组合,我希望我能以这样一种方式定义它们,以便可以推断 :CH1 和 :CH3 是一个特定的子类型,因此我可以直接查询它。到目前为止,我的尝试是:
:CHWETLT a owl:Class ;
owl:equivalentClass [
a owl:Restriction ;
owl:onProperty :hasPoint ;
owl:allValuesFrom [
a owl:Class ;
owl:intersectionOf (
brick:Chilled_Water_Entering_Temperature_Sensor
brick:Chilled_Water_Leaving_Temperature_Sensor
)
]
] .
我希望推理能够确定 :CH1 和 :CH3 属于 :CHWETLT,因此我可以直接查询。不过,这似乎不起作用-我不确定从现在开始要去哪里。这可能吗?如果是这样,有人可以指出我正确的方向吗?
我正在使用brickschema python 包,它(afaik)基于rdflib 构建,并使用reasonable 作为推理器。
【问题讨论】:
-
你是说它不是最小的、可重现的或可读的吗?我试图平衡所有 3 但不太确定