1

我正在尝试构建一个本体来推断有关域分类和术语的一些信息,但我遇到了一些概念上的困难。

让我解释一下这个问题。在 Protègè 4.1 中,我创建了 Thing 的 6 个子类:Concept、conceptTitle、ConceptSynonym(用于分类)和 Term、TermTitle、TermSynonym(用于术语)。我还创建了 hasConceptTitle、hasConceptSynonym、hasTermTitle 和 hasTermSynonym 对象关系(带有一些约束)来表示每个概念都有一个(并且只有一个)标题,并且可能有一些同义词,并且每个术语都有一个(并且只有一个)标题和一些同义词。Concept 和 Term 都有另一种关系 isA,为分类赋予 DAG/树结构,而术语具有格结构(换句话说,一个术语可能是多个术语的子类)。

问题来了:我想创建一个概念的子类,比如说“MappedConcept”),它应该是映射概念的集合,即标题等于术语标题的概念集,或者它有同义词等于术语的标题或具有等于术语的同义词的同义词。在一阶逻辑中,这个集合可以表示为:

∀x∃y( ∃z((hasConceptTitle(x,z) ∧ hasTermTitle(y,z)) ∨
      ∃z((hasConceptTitle(x,z) ∧ hasTermSynonym(y,z)) ∨
      ∃z((hasConceptSynonym(x,z) ∧ hasTermTitle(y,z)) ∨
      ∃z((hasConceptSynonym(x,z) ∧ hasTermSynonym(y,z)) )

我怎样才能得到这个?为“ConceptTitle”、“ConceptSynonym”、“TermTitle”和“TermSynonym”定义数据属性?以及如何描述字符串匹配?也许这 4 个类应该只是 Concept 和 Term 类的数据属性?我多次阅读 Matthew Horridge 的实用指南,但我无法将脑海中的实用想法转化为 Protègè 的 ongology。

提前致谢。

4

1 回答 1

2

恐怕你不能在 OWL 2 DL 和 Protégé 中做到这一点,Protégé 是 OWL 2 DL 的编辑器,因为据我所知,似乎有必要引入数据类型属性的逆,这在猫头鹰 2 DL。然而,这在 OWL Full 中是可能的,一些深度学习推理者甚至可以处理它。在这里,在龟:

<MappedConcept>  a  owl:Class;
    owl:equivalentTo  [
        a  owl:Class;
        owl:unionOf (
            [
                a  owl:Restriction;
                owl:onProperty  <hasConceptTitle>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermTitle> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptTitle>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermSynonym> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptSynonym>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermSynonym> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptSynonym>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermTitle> ];
                    owl:someValuesFrom  <Term>
                ]
            ]
        )
    ] .

您也可以不使用 OWL,例如使用规则语言。这些规则看起来更接近于你在编程语言中的做法。在 SWRL 中:

hasConceptTitle(?x,?z), hasTermTitle(?y,?z) -> MappedConcept(?x)
hasConceptTitle(?x,?z), hasTermSynonym(?y,?z) -> MappedConcept(?x)
hasConceptSynonym(?x,?z), hasTermTitle(?y,?z) -> MappedConcept(?x)
hasConceptSynonym(?x,?z), hasTermSynonym(?y,?z) -> MappedConcept(?x)
于 2012-12-21T08:39:07.247 回答