1

我正在尝试使用 OWL 2(DL,使用 Protege)对一些词汇数据进行建模。我的主要课程是“引理”,它有许多公理(使用曼彻斯特语法):

Every Lemma hasLanguage some Language. 
Every Lemma hasEtymology some Etymology. 
Every Lemma hasMorphology some Morphology.

等等

我还有一个类 VariantLemma,它基本上是原始引理的变体拼写,但它总是与其父引理具有相同的语言和词源,但可以有不同的形态。我最初将其建模为等效于:

Lemma and (isVariantOf some Lemma)

但是我怎么能说它对于除了形态学之外的所有公理都具有与其父引理相同的值?我可以以某种方式使用属性链吗?

感谢您的任何建议!

4

1 回答 1

2

你可以这样做。在你有的情况下

         isVariantOf             hasLanguage
lemma2 ---------------> lemma1 ---------------> language1

那么你想推断一个额外的属性:

         hasLanguage
lemma2 ---------------> language1

由于您可以在第一个图中找到从lemma2到的路径,因此language1您断言第二个图必须通过以下子属性链公理存在。当然,您也需要对其他属性执行相同的操作。

isVariantOf o hasLanguage SubPropertyOf hasLanguage

当你有一个 OWL 推理器和这些公理时,如果你有关于lem1和 that的断言lem2 isVariantOf lem1,你会看到lem2. 这是 alem1及其在 Protégé 中的属性:

关于 lem1 的对象属性

附加 Pellet 推理器后,推断hasEtymologyhasLanguage属性lem2(以黄色背景显示):

关于 lem2 的推断属性

如果您有兴趣,这是 OWL 本体:

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns="http://www.example.org/lemmata#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  <owl:Ontology rdf:about="http://www.example.org/lemmata"/>
  <owl:Class rdf:about="http://www.example.org/lemmata#Morphology"/>
  <owl:Class rdf:about="http://www.example.org/lemmata#VariantLemma">
    <owl:equivalentClass>
      <owl:Class>
        <owl:intersectionOf rdf:parseType="Collection">
          <owl:Class rdf:about="http://www.example.org/lemmata#Lemma"/>
          <owl:Restriction>
            <owl:onProperty>
              <owl:ObjectProperty rdf:about="http://www.example.org/lemmata#isVariantOf"/>
            </owl:onProperty>
            <owl:someValuesFrom rdf:resource="http://www.example.org/lemmata#Lemma"/>
          </owl:Restriction>
        </owl:intersectionOf>
      </owl:Class>
    </owl:equivalentClass>
  </owl:Class>
  <owl:Class rdf:about="http://www.example.org/lemmata#Language"/>
  <owl:Class rdf:about="http://www.example.org/lemmata#Etymology"/>
  <owl:ObjectProperty rdf:about="http://www.example.org/lemmata#hasEtymology">
    <owl:propertyChainAxiom rdf:parseType="Collection">
      <rdf:Description>
        <owl:inverseOf rdf:resource="http://www.example.org/lemmata#isVariantOf"/>
      </rdf:Description>
      <owl:ObjectProperty rdf:about="http://www.example.org/lemmata#hasEtymology"/>
    </owl:propertyChainAxiom>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="http://www.example.org/lemmata#hasLanguage">
    <owl:propertyChainAxiom rdf:parseType="Collection">
      <rdf:Description>
        <owl:inverseOf rdf:resource="http://www.example.org/lemmata#isVariantOf"/>
      </rdf:Description>
      <owl:ObjectProperty rdf:about="http://www.example.org/lemmata#hasLanguage"/>
    </owl:propertyChainAxiom>
  </owl:ObjectProperty>
  <owl:ObjectProperty rdf:about="http://www.example.org/lemmata#hasMorphology"/>
</rdf:RDF>
于 2013-06-18T16:26:13.247 回答