我正在构建一个描述某些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
答案 0 :(得分:1)
正如您所提到的,使用OWL-DL无法在类和个人之间创建关系。因此,您必须修改表示域知识的方式,如果您希望能够使用reasoners,这是唯一的解决方案。
此处服务实例可以链接到位置实例,或者您也可以使用类而不是个人来描述特定服务。然后,您可以使用存在性限制在Service1
和Location
之间创建关系。
使用个人的例子:
: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
] .
答案 1 :(得分:1)
要说Service1
的任何输入必须是Location
,但不暗示任何此类输入必须存在,那么您可以再向Service1
添加一个类型,即通用对hasInput
的{{1}}进行限制。
Location
这表示forall :Service1
a owl:NamedIndividual , :Service ;
a [ a owl:Restriction ;
owl:allValuesFrom :Location ;
owl:onProperty :hasInput
] .
, if x
,然后 Service1 hasInput x
。它并不意味着x a Location
存在x
。
答案 2 :(得分: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
的个体。这些是两个不同的术语。