1

我有一个类,Person。有一个数据类型属性Profession ,其Person的值为{"Composer","Singer","Conductor"}。我有另一个名为Piece的类和一个对象属性compositionBy我希望composerBy的范围是所有职业“作曲家”?我如何在 OWL 中做到这一点,以及如何使用 Protégé 表达该 OWL?

4

2 回答 2

1

您的第一个描述并不难表达为 DL 公理(尽管,我将使用名称hasProfession以与其他属性名称更加一致,composerBy)。

有一个数据类型属性 Profession,其 Person 的值为 {"Composer","Singer","Conductor"}。

人 ⊑ 仅限职业 {“作曲家”、“歌手”、“指挥家”}

在此处输入图像描述

第二个也不太棘手:

我有另一个名为 Piece 的类,以及一个对象属性composedBy。我希望composerBy的范围是所有职业为“作曲家”的人?

现在,你需要在这里更清楚。您可能意味着composerBy 的范围是“所有职业是'Composer' 的人”,即,任何commitBy语句的值都是一个Peron,其职业是'Composer'。但是,您提到了另一个类 Piece,所以我认为您要问的是如何说如果Piece某物组成的,那么该物就是一个职业是“作曲家”的人。那将是这个公理:

Piece ⊑ ∀composedBy.(人⊓有职业值“作曲家”)

在此处输入图像描述

如果你想复制和粘贴本体,这里是:

<rdf:RDF
    xmlns="http://stackoverflow.com/q/20920232/1281433/composers#"
    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:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  <owl:Ontology rdf:about="http://stackoverflow.com/q/20920232/1281433/composers"/>
  <owl:Class rdf:about="http://stackoverflow.com/q/20920232/1281433/composers#Piece">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty>
          <owl:ObjectProperty rdf:about="http://stackoverflow.com/q/20920232/1281433/composers#composedBy"/>
        </owl:onProperty>
        <owl:allValuesFrom>
          <owl:Class>
            <owl:intersectionOf rdf:parseType="Collection">
              <owl:Class rdf:about="http://stackoverflow.com/q/20920232/1281433/composers#Person"/>
              <owl:Restriction>
                <owl:onProperty>
                  <owl:DatatypeProperty rdf:about="http://stackoverflow.com/q/20920232/1281433/composers#hasProfession"/>
                </owl:onProperty>
                <owl:hasValue>Composer</owl:hasValue>
              </owl:Restriction>
            </owl:intersectionOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  <owl:Class rdf:about="http://stackoverflow.com/q/20920232/1281433/composers#Person">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://stackoverflow.com/q/20920232/1281433/composers#hasProfession"/>
        <owl:allValuesFrom>
          <rdfs:Datatype>
            <owl:oneOf>
              <rdf:List>
                <rdf:first>Composer</rdf:first>
                <rdf:rest>
                  <rdf:List>
                    <rdf:first>Conductor</rdf:first>
                    <rdf:rest>
                      <rdf:List>
                        <rdf:first>Singer</rdf:first>
                        <rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
                      </rdf:List>
                    </rdf:rest>
                  </rdf:List>
                </rdf:rest>
              </rdf:List>
            </owl:oneOf>
          </rdfs:Datatype>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
</rdf:RDF>
于 2014-01-06T19:53:08.440 回答
0

将范围定义为composedBy范围Person and some Profession {Composer} 所说的是composerBy 的值将是一个Person 并且它将具有一个Profession 属性,其可能的值只有Composer - 这是一个HasValue 限制。

于 2014-01-04T22:51:05.680 回答