我正在建立一个智能家庭本体.我现在有一个类层次结构:
我想给’RoomStatus’的子类定义.例如,我想定义当室温在18-22摄氏度范围内且湿度在40-50%范围内时,则房间温和.我试图在Protege中使用类表达式编辑器,但它不起作用.
我怎样才能实现这个定义?
提前致谢!
解决方法
Hatim’s answer可能适合你,但我认为最好不要在你不需要的时候使用等同的类公理,并避免将温和状态与特定的温度和湿度联系起来.毕竟,对于一个拥有温和身份的房间来说,具有温和身份意味着什么是非常不同的.
我建议使用General Class Axiom来说:
If a Room has a temperature and a humidity within the specified ranges,then the Room has a mild status.
作为一个阶级公理,那是:
Room and (hasTemperature some integer[≥18,≤22]) and (hasHumidity some integer[≥40,≤50]) subClassOf (hasStatus value Mild_Status)
这几乎就是你在Protege中写的:
这是使用该公理的本体(在RDF / XML和TTL中):
@prefix : <https://stackoverflow.com/q/29228328/1281433/> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-Syntax-ns#> . : a owl:Ontology . :Room a owl:Class . :Status a owl:Class . :Mild_Status a owl:NamedIndividual,:Status . :hasStatus a owl:ObjectProperty . :hasTemperature a owl:DatatypeProperty . :hasHumidity a owl:DatatypeProperty . [ a owl:Class ; rdfs:subClassOf [ a owl:Restriction ; owl:hasValue :Mild_Status ; owl:onProperty :hasStatus ] ; owl:intersectionOf ( :Room _:b2 _:b3 ) ] . _:b3 a owl:Restriction ; owl:onProperty :hasTemperature ; owl:someValuesFrom [ a rdfs:Datatype ; owl:onDatatype xsd:integer ; owl:withRestrictions ( _:b0 _:b4 ) ] . _:b0 xsd:minInclusive 18 . _:b4 xsd:maxInclusive 22 . _:b2 a owl:Restriction ; owl:onProperty :hasHumidity ; owl:someValuesFrom [ a rdfs:Datatype ; owl:onDatatype xsd:integer ; owl:withRestrictions ( _:b5 _:b1 ) ] . _:b1 xsd:minInclusive 40 . _:b5 xsd:maxInclusive 50 .
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-Syntax-ns#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns="https://stackoverflow.com/q/29228328/1281433/" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> <owl:Ontology rdf:about="https://stackoverflow.com/q/29228328/1281433/"/> <owl:Class rdf:about="https://stackoverflow.com/q/29228328/1281433/Room"/> <owl:Class rdf:about="https://stackoverflow.com/q/29228328/1281433/Status"/> <owl:Class> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty> <owl:ObjectProperty rdf:about="https://stackoverflow.com/q/29228328/1281433/hasStatus"/> </owl:onProperty> <owl:hasValue> <owl:NamedIndividual rdf:about="https://stackoverflow.com/q/29228328/1281433/Mild_Status"> <rdf:type rdf:resource="https://stackoverflow.com/q/29228328/1281433/Status"/> </owl:NamedIndividual> </owl:hasValue> </owl:Restriction> </rdfs:subClassOf> <owl:intersectionOf rdf:parseType="Collection"> <owl:Class rdf:about="https://stackoverflow.com/q/29228328/1281433/Room"/> <owl:Restriction> <owl:onProperty> <owl:DatatypeProperty rdf:about="https://stackoverflow.com/q/29228328/1281433/hasHumidity"/> </owl:onProperty> <owl:someValuesFrom> <rdfs:Datatype> <owl:onDatatype rdf:resource="http://www.w3.org/2001/XMLSchema#integer"/> <owl:withRestrictions rdf:parseType="Collection"> <rdf:Description> <xsd:maxInclusive rdf:datatype="http://www.w3.org/2001/XMLSchema#integer" >50</xsd:maxInclusive> </rdf:Description> <rdf:Description> <xsd:minInclusive rdf:datatype="http://www.w3.org/2001/XMLSchema#integer" >40</xsd:minInclusive> </rdf:Description> </owl:withRestrictions> </rdfs:Datatype> </owl:someValuesFrom> </owl:Restriction> <owl:Restriction> <owl:onProperty> <owl:DatatypeProperty rdf:about="https://stackoverflow.com/q/29228328/1281433/hasTemperature"/> </owl:onProperty> <owl:someValuesFrom> <rdfs:Datatype> <owl:onDatatype rdf:resource="http://www.w3.org/2001/XMLSchema#integer"/> <owl:withRestrictions rdf:parseType="Collection"> <rdf:Description> <xsd:minInclusive rdf:datatype="http://www.w3.org/2001/XMLSchema#integer" >18</xsd:minInclusive> </rdf:Description> <rdf:Description> <xsd:maxInclusive rdf:datatype="http://www.w3.org/2001/XMLSchema#integer" >22</xsd:maxInclusive> </rdf:Description> </owl:withRestrictions> </rdfs:Datatype> </owl:someValuesFrom> </owl:Restriction> </owl:intersectionOf> </owl:Class> </rdf:RDF>