我的本体论包含植物和疾病以及财产treat
(植物treat
的疾病)。我有很多植物和疾病,但现在我想添加一种可以通过两种或更多种植物的组合治疗的疾病。例如,我如何表示以下句子?
疾病X可以通过植物A和植物B的组合来治疗,但不能通过植物A或植物B单独治疗。
我一直在想用推理器来获取这个,但我不知道怎么做。
答案 0 :(得分:2)
听起来你现在拥有一个包含Disease
和Plant
类的本体,以及一个包含域treats
和范围{{1}的属性Plant
}}。据我了解,问题是应该对某些Disease
进行处理的不是单独的Disease
,而是它们的组合。在这些情况下,我们可能会说植物用于治疗疾病,但本身并不治疗疾病。也可以合理地说,如果一种植物本身可以治疗疾病,那么它也可以用于治疗疾病。
所以,你有一类你以前没有考虑过的个体,即植物的组合,所以为什么不引入一个Plant
类和一个与PlantCombination
相关的属性hasComponent
。组合中的植物?如果您愿意,还可以添加限制,说明每种植物组合至少有两种植物,PlantCombination
。由于PlantCombination SubClassOf hasComponent min 2 Plant
和Plant
都可以处理PlantCombination
,因此您需要将Disease
的域名更改为treats
。为了确保推理者可以推断 if {em> Plant or PlantCombination
然后 plant82 treats disease92
,您可以断言plant82 isUsedToTreat disease92
。 (这也意味着治疗疾病的植物组合也被用于治疗这种疾病。)为了确保当与 plant23 组合物治疗疾病时,植物23 用于治疗疾病,你可以添加treats SubPropertyOf isUsedToTreat
的断言。这是一个本能就是这样做的:
inverse(hasComponent) o treats SubPropertyOf isUsedToTreat
@prefix : <http://www.example.org/plantsAndDiseases#> .
@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#> .
<http://www.example.org/plantsAndDiseases>
a owl:Ontology .
:Plant
a owl:Class .
:Disease
a owl:Class .
:PlantCombination
a owl:Class ;
rdfs:subClassOf
[ a owl:Restriction ;
owl:minQualifiedCardinality
"2"^^xsd:nonNegativeInteger ;
owl:onClass :Plant ;
owl:onProperty :hasComponent
] .
:hasComponent
a owl:ObjectProperty ;
rdfs:domain :PlantCombination ;
rdfs:range :Plant .
:isUsedToTreat
a owl:ObjectProperty ;
rdfs:comment "X isUsedToTreat Y means that X is used in the treatment of Y. X may either treat Y, or may be a component of a combination that treats Y." ;
rdfs:domain
[ a owl:Class ;
owl:unionOf (:Plant :PlantCombination)
] ;
rdfs:range :Disease ;
owl:propertyChainAxiom
([ owl:inverseOf :hasComponent
] :treats) .
:treats
a owl:ObjectProperty ;
rdfs:comment "X treats Y means that X is a sufficient treatment for Y." ;
rdfs:domain
[ a owl:Class ;
owl:unionOf (:Plant :PlantCombination)
] ;
rdfs:range :Disease ;
rdfs:subPropertyOf :isUsedToTreat .
答案 1 :(得分:2)
Joshua's answer的替代方案:您可以将疾病和植物表示为OWL类,因为在这里您指的是植物组(不是您在自然界中可以找到的特定实例)。然后,您可以将类与存在性限制(some
- 生物学中的常见模式)链接起来。
如上所述,您还需要在建模中引入补充步骤:植物可以是治疗的成分,疾病可以通过治疗来治疗。
然后,如果您考虑以下注释(#
)本体(曼彻斯特语法),我将描述建模的公理。您可以保存文件并使用Protege打开它。
Prefix: xsd: <http://www.w3.org/2001/XMLSchema#>
Prefix: owl: <http://www.w3.org/2002/07/owl#>
Prefix: : <http://www.example.org/demo.owl#>
Prefix: xml: <http://www.w3.org/XML/1998/namespace>
Prefix: rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
Prefix: rdfs: <http://www.w3.org/2000/01/rdf-schema#>
Ontology: <http://www.example.org/demo.owl>
ObjectProperty: has-ingredient
ObjectProperty: treatableBy
Class: owl:Thing
Class: PlantA
SubClassOf:
Plant
Class: Treatment
#Your treatment obtained by mixing some
#of the plant B and some of the plant A
Class: TreatmentAB
SubClassOf:
Treatment,
(has-ingredient some PlantA)
and (has-ingredient some PlantB)
Class: PlantB
SubClassOf:
Plant
#This treatment has ingredient the plant A
Class: TreatmentA
SubClassOf:
has-ingredient some PlantA,
Treatment
#This treatment is made from plant B (among other things)
Class: TreatmentB
SubClassOf:
Treatment,
has-ingredient some PlantB
Class: Disease
Class: Plant
# This disease is treatable by the TreatmentAB
Class: DiseaseA
SubClassOf:
treatableBy some TreatmentAB,
Disease
Class: DiseaseB
SubClassOf:
treatableBy some TreatmentB,
Disease
现在,如果我们在推理本体并询问treatableBy some TreatmentA
的子类,我们就不会得到任何类。表达式treatableBy some TreatmentAB
按预期返回DiseaseA
。