0

我正在构建一个描述一些 Web 服务的本体。我应该如何在 OWL-DL 中表达以下 OWL-Full 语句:

:Service         a           owl:Class
:Location        a           owl:Class        

:hasInputType    rdfs:domain :Service
:hasInputType    rdfs:range  owl:Class

:Service1        a               :Service
:Service1        :hasInputType   :Location
4

3 回答 3

1

在 OWL 2 DL 中,您可以使用类名作为个人名称。这被称为“双关语”。所以以下是有效的 OWL 2 DL:

:InputType     a              owl:Class .
:Service       a              owl:Class .
:Location      a              owl:Class, :InputType .

:hasInputType  a              owl:ObjectProperty;
               rdfs:domain    :Service;
               rdfs:range     :InputType .

:Service1      a              :Service;
               :hasInputType  :Location .

您甚至可以摆脱该类:InputType并简单地使用它owl:Thing。请注意,第三行实际上定义了两个术语:一个类被称为:Location和一个个体:Location也被称为。这是两个不同的术语

于 2013-05-13T06:43:42.897 回答
1

正如您所提到的,无法使用 OWL-DL 在类和个人之间创建关系。因此,您必须修改表示领域知识的方式,如果您希望能够使用推理器,这是唯一的解决方案。

这里服务实例可以链接到位置实例,或者您也可以使用类而不是个人来描述特定服务。然后,您可以在存在限制之间创建关系Service1Location使用存在限制。

使用个人的示例:

:hasInput rdf:type owl:ObjectProperty ;
      rdfs:domain :Service .

:Location rdf:type owl:Class .

:Service rdf:type owl:Class .

:Location1 rdf:type :Location , owl:NamedIndividual .

:Service1 rdf:type :Service , owl:NamedIndividual ;
      :hasInput :Location1 .

使用类的示例:

:hasInput rdf:type owl:ObjectProperty ;
      rdfs:domain :Service .

:Location rdf:type owl:Class .

:Service rdf:type owl:Class .

:Service1 rdf:type owl:Class .

      rdfs:subClassOf :Service ,
                      [ rdf:type owl:Restriction ;
                        owl:onProperty :hasInput ;
                        owl:someValuesFrom :Location
                      ] .
于 2013-05-05T23:59:34.107 回答
1

要说 的 任何输入Service1必须是 a Location,但不暗示任何此类输入必须存在,那么您可以向 中添加一个更多类型,即对forService1的通用限制。hasInputLocation

:Service1
      a       owl:NamedIndividual , :Service ;
      a       [ a       owl:Restriction ;
                owl:allValuesFrom :Location ;
                owl:onProperty :hasInput
              ] .

这表示 forall x, if Service1 hasInput x , then x a Location。它并不意味着这样的x存在Service1 hasInput x

于 2013-05-06T13:10:08.950 回答