如何将个人与个人的组合联系起来?

时间:2013-06-23 15:35:50

标签: ontology owl protege

我的本​​体论包含植物和疾病以及财产treat(植物treat的疾病)。我有很多植物和疾病,但现在我想添加一种可以通过两种或更多种植物的组合治疗的疾病。例如,我如何表示以下句子?

  

疾病X可以通过植物A和植物B的组合来治疗,但不能通过植物A或植物B单独治疗。

我一直在想用推理器来获取这个,但我不知道怎么做。

2 个答案:

答案 0 :(得分:2)

听起来你现在拥有一个包含DiseasePlant类的本体,以及一个包含域treats和范围{{1}的属性Plant }}。据我了解,问题是应该对某些Disease进行处理的不是单独的Disease,而是它们的组合。在这些情况下,我们可能会说植物用于治疗疾病,但本身并不治疗疾病。也可以合理地说,如果一种植物本身可以治疗疾病,那么它也可以用于治疗疾病。

所以,你有一类你以前没有考虑过的个体,即植物的组合,所以为什么不引入一个Plant类和一个与PlantCombination相关的属性hasComponent。组合中的植物?如果您愿意,还可以添加限制,说明每种植物组合至少有两种植物,PlantCombination。由于PlantCombination SubClassOf hasComponent min 2 PlantPlant都可以处理PlantCombination,因此您需要将Disease的域名更改为treats。为了确保推理者可以推断 if {em> Plant or PlantCombination 然后 plant82 treats disease92,您可以断言plant82 isUsedToTreat disease92。 (这也意味着治疗疾病的植物组合也被用于治疗这种疾病。)为了确保当与 plant23 组合物治疗疾病时,植物23 用于治疗疾病,你可以添加treats SubPropertyOf isUsedToTreat的断言。这是一个本能就是这样做的:

N3格式

inverse(hasComponent) o treats SubPropertyOf isUsedToTreat

OWL功能语法

@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