2

我有一个简单的本体如下

<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
<!ENTITY assignment "http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#" >
]>

<rdf:RDF xmlns="http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#"
 xml:base="http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment"
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
 xmlns:assignment="http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#"
 xmlns:owl="http://www.w3.org/2002/07/owl#"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<owl:Ontology rdf:about="http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment"/>

<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// Object Properties
//
///////////////////////////////////////////////////////////////////////////////////////
 -->

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#channel_of -->
<owl:ObjectProperty rdf:about="&assignment;channel_of">
    <rdfs:domain rdf:resource="&assignment;Channels"/>
    <rdfs:range rdf:resource="&assignment;Television"/>
    <owl:inverseOf rdf:resource="&assignment;has_channels"/>
</owl:ObjectProperty>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#has_channels -->
<owl:ObjectProperty rdf:about="&assignment;has_channels">
    <rdfs:range rdf:resource="&assignment;Channels"/>
    <rdfs:domain rdf:resource="&assignment;Television"/>
</owl:ObjectProperty>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#has_inet_connection -->
<owl:ObjectProperty rdf:about="&assignment;has_inet_connection">
    <rdfs:range rdf:resource="&assignment;InternetConnection"/>
    <rdfs:domain rdf:resource="&assignment;Person"/>
</owl:ObjectProperty>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#has_television -->
<owl:ObjectProperty rdf:about="&assignment;has_television">
    <rdfs:domain rdf:resource="&assignment;Person"/>
    <rdfs:range rdf:resource="&assignment;Television"/>
    <owl:inverseOf rdf:resource="&assignment;ownes_by"/>
</owl:ObjectProperty>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#internet_connection_owned_by -->
<owl:ObjectProperty rdf:about="&assignment;internet_connection_owned_by">
    <rdfs:domain rdf:resource="&assignment;InternetConnection"/>
    <rdfs:range rdf:resource="&assignment;Person"/>
    <owl:inverseOf rdf:resource="&assignment;has_inet_connection"/>
</owl:ObjectProperty>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#ownes_by -->
<owl:ObjectProperty rdf:about="&assignment;ownes_by">
    <rdfs:range rdf:resource="&assignment;Person"/>
    <rdfs:domain rdf:resource="&assignment;Television"/>
</owl:ObjectProperty>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#watched_by -->
<owl:ObjectProperty rdf:about="&assignment;watched_by">
    <rdfs:domain rdf:resource="&assignment;Channels"/>
    <rdfs:range rdf:resource="&assignment;Person"/>
    <owl:inverseOf rdf:resource="&assignment;watches"/>
</owl:ObjectProperty>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#watches -->
<owl:ObjectProperty rdf:about="&assignment;watches">
    <rdfs:range rdf:resource="&assignment;Channels"/>
    <rdfs:domain rdf:resource="&assignment;Person"/>
</owl:ObjectProperty>

<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// Data properties
//
///////////////////////////////////////////////////////////////////////////////////////
 -->

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#yh -->
<owl:DatatypeProperty rdf:about="&assignment;yh"/>

<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
 -->

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#Advanced -->
<owl:Class rdf:about="&assignment;Advanced">
    <rdfs:subClassOf rdf:resource="&assignment;Coloured"/>
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="&assignment;ownes_by"/>
            <owl:allValuesFrom rdf:resource="&assignment;Rich"/>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#Antena -->
<owl:Class rdf:about="&assignment;Antena">
    <rdfs:subClassOf rdf:resource="&assignment;Channels"/>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#BlackAndWhite -->
<owl:Class rdf:about="&assignment;BlackAndWhite">
    <rdfs:subClassOf rdf:resource="&assignment;Television"/>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#CRT -->
<owl:Class rdf:about="&assignment;CRT">
    <rdfs:subClassOf rdf:resource="&assignment;Coloured"/>
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="&assignment;ownes_by"/>
            <owl:allValuesFrom rdf:resource="&assignment;Mid"/>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#Channels -->
<owl:Class rdf:about="&assignment;Channels"/>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#Coloured -->
<owl:Class rdf:about="&assignment;Coloured">
    <rdfs:subClassOf rdf:resource="&assignment;Television"/>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#High -->
<owl:Class rdf:about="&assignment;High">
    <rdfs:subClassOf rdf:resource="&assignment;InternetConnection"/>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#Internet -->
<owl:Class rdf:about="&assignment;Internet">
    <rdfs:subClassOf rdf:resource="&assignment;Channels"/>
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="&assignment;channel_of"/>
            <owl:allValuesFrom rdf:resource="&assignment;Advanced"/>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#InternetConnection -->
<owl:Class rdf:about="&assignment;InternetConnection"/>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#LCD -->
<owl:Class rdf:about="&assignment;LCD">
    <rdfs:subClassOf rdf:resource="&assignment;Coloured"/>
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="&assignment;ownes_by"/>
            <owl:someValuesFrom rdf:resource="&assignment;Rich"/>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#LED -->
<owl:Class rdf:about="&assignment;LED">
    <rdfs:subClassOf rdf:resource="&assignment;Coloured"/>
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="&assignment;ownes_by"/>
            <owl:someValuesFrom rdf:resource="&assignment;Rich"/>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#Medium -->
<owl:Class rdf:about="&assignment;Medium">
    <rdfs:subClassOf rdf:resource="&assignment;InternetConnection"/>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#Mid -->
<owl:Class rdf:about="&assignment;Mid">
    <rdfs:subClassOf rdf:resource="&assignment;Person"/>
    <owl:disjointWith rdf:resource="&assignment;Rich"/>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#Person -->
<owl:Class rdf:about="&assignment;Person"/>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#Rich -->
<owl:Class rdf:about="&assignment;Rich">
    <rdfs:subClassOf rdf:resource="&assignment;Person"/>
</owl:Class>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#Television -->
<owl:Class rdf:about="&assignment;Television"/>

<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// Individuals
//
///////////////////////////////////////////////////////////////////////////////////////
 -->

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#John -->
<owl:NamedIndividual rdf:about="&assignment;John"/>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#SLTA -->
<owl:NamedIndividual rdf:about="&assignment;SLTA">
    <rdf:type rdf:resource="&assignment;Advanced"/>
</owl:NamedIndividual>

<!-- http://www.semanticweb.org/shadowman/ontologies/2013/5/assignment#Youtube -->
<owl:NamedIndividual rdf:about="&assignment;Youtube">
    <rdf:type rdf:resource="&assignment;Internet"/>
    <watched_by rdf:resource="&assignment;John"/>
</owl:NamedIndividual>
</rdf:RDF>
<!-- Generated by the OWL API (version 3.4.2) http://owlapi.sourceforge.net -->

现在,我要推断那个人John是富人。我尝试了各种限制,但只有我得到'约翰是一个人'。

我最初的本体想法是这样的,如果一个人从他的电视上看一个互​​联网频道,那么他就有了一台高级电视,高级电视只是owned_by有钱人。

现在在我们的实例中,John 看 YouTube,YouTube 是一个互联网频道,所以互联网频道只在高级电视中可用,而高级电视只有富人拥有,因此约翰应该是有钱人。但如前所述,我一直认为约翰是一个人

4

1 回答 1

5

我认为您不能单独使用 OWL 在当前的类层次结构中表达这一点。如果我理解正确,您已经掌握了公理

John watches YouTube
YouTube a InternetChannel
InternetChannel availableOn only AdvancedTV
AdvancedTV inverse owns only RichPerson

但无法推断出John a (owns some AdvancedTV)可以让您得出结论的中间推论John a RichPerson

如果你有额外的公理“如果某人 P 观看某个频道 C,那么 P 拥有一些电视 T,并且 C 在 T 上可用”,那么推理将如下工作:“既然约翰看 YouTube,约翰就必须拥有一些可以使用 YouTube 的电视。由于 YouTube 是一个互联网频道,因此电视必须是高级电视。既然约翰将拥有一台先进的电视,他将成为一个有钱的人。”</p>

OWL 的局限性

但是,我不认为这个公理可以用 OWL 来表达。描述逻辑(OWL就是其中之一)是一阶逻辑的一个子集,只能表达只使用两个变量的一阶语句。上面的公理似乎需要三个:

  • ∀ p, c: 手表(p,c) → (∃ t: 拥有(p,t) ∧ availableOn(c,t))

我无法以只使用两个变量的方式重写它,所以我认为它不能用 OWL 表示。这意味着您将需要更改本体中的某些内容才能使其工作。在我看来,有几个选择:

  • 您可以转换您的频道类层次结构并引入一些个人来代表频道类型。
  • 您可以使用三处关系 watchOn 来关联一个人、他们观看的频道以及他们观看该频道的电视,而不是使用仅与人员和频道相关watch关系

第一个选项实施起来可能更快一些,但我认为从长远来看,第二个选项更灵活一些,更好地代表手头的信息,并使整体表示更清晰。

用个人代表渠道类型

如果您将通道子类层次结构更改为通道类型的集合,例如,您要说的是 ,而不是YouTube a InternetChannelYouTube hasChannelType Internet那么您会说类似

watches some (hasChannelType value Internet) SubClassOf owns some AdvancedTV

它说:“如果有人观看具有频道类型互联网的东西,那么这个人就拥有一台先进的电视。” 由于 John 观看 YouTube,并且 YouTube 具有频道类型 Internet,因此 John 拥有一台高级电视。由于先进的电视机只有富人拥有,约翰一定是个有钱人。

该公理是一般类公理。它的左侧没有简单的类名,而是一个类表达式。这些并不经常出现,但正如在左侧的复杂性中所讨论的:一般概念包含,它们有时非常有用。
那篇文章也提供了在 Protégé 中创建它们的示例。要在 Protégé 中输入通用类公理,请转到Active Ontology选项卡,然后在其中找到通用类公理选项卡。然后你可以逐字输入公理,它应该是这样的:

Protégé中的一般类公理

把手表换成手表On

或者,您可以将二元关系watch替换为 3-place 关系watchOn,它将一个人与他们观看的频道和他们观看的电视相关联。这有一个很好的优势,即在一个人拥有多台电视的情况下,一些仍然是原始的,而另一些则是先进的。(第一个解决方案只是说如果某人观看了互联网频道,那么他们就拥有一台高级电视,但它没有捕捉到该人使用该电视观看互联网频道的事实。)替换二元关系手表(Person ,Channel)与第三个 watchOn(Person,Channel,Television)我们遵循 W3C 工作组说明中给出的方法,在语义网上定义 N 元关系。我们引入了一个(不是属性)watchesOn,每个实例代表watchesOn关系的发生,以及三个属性,hasWatcherhasWatchedChannelhasWatchedTelevision ,它们分别将watchesOn的实例与人、频道和电视相关联,它们是参与关系。watchOn的实例通常是空白节点。例如,watchesOn(John,YouTube,JohnsTelevision)在 RDF 中可以表示为:

[] a :watchesOn ;
   :hasWatcher :John ;
   :hasWatchedChannel :YouTube ;
   :hasWatchedTelevision :JohnsTelevision .

通过这种表示,我们可以陈述许多有用的事实。例如,如果一个人在电视上观看某物,那么他们就拥有该电视,我们断言:

inverse(hasWatcher) o hasWatchedTelevision SubPropertyOf owns

这就像说

hasWatcher(?w,?person) ∧ hasWatchedTelevision(?w,?television) → 拥有(?person,?television) 。

您也可以说观看互联网频道的电视是高级电视。这需要一个通用类公理,就像在第一个解决方案中一样,但在这种情况下,它是:

inverse (hasWatchedTelevision) some (hasWatchedChannel some InternetChannel) SubClassOf AdvancedTV

这就像说

hasWatchedTelevision(?w,?television) ∧ hasWatchedChannel(?w,?channel) ∧ InternetChannel(?channel) → AdvancedTV(?television) 。

有了这两个公理,我们就可以推断出那个John owns JohnsTelevision和那个JohnsTelevision a AdvancedTV。如果我们再添加一个类公理,即如果一个人拥有一台先进的电视机,那么他们就是富有的,即,

owns some AdvancedTV SubClassOf RichPerson

那么我们可以推断John a RichPerson

这种表示很好,因为使用限制,我们可以断言,例如,约翰在某些电视上观看 YouTube,而无需说明他在哪个电视上观看。这需要给 John 添加一个类型断言,即:

John a inverse hasWatcher some (hasWatchedChannel value YouTube and
                                hasWatchedTelevision some Television)

这表示约翰在某些电视上观看 YouTube,但没有说明是哪个电视。根据我们之前的公理,推理者仍然可以推断出,无论它碰巧是什么电视,它都必须是一台先进的电视,而约翰必须拥有它。然后推理者仍然可以推断出约翰是个有钱人。

Protégé 中的推理者证实约翰是富人

这甚至更进一步。我们甚至不需要指定 John 观看了哪个频道,只需指出它是一个互联网频道:

John a inverse hasWatcher some (hasWatchedChannel some InternetChannel and
                                hasWatchedTelevision some Television)

推理者仍然可以推断出约翰是有钱人。最重要的是,类表达式

inverse hasWatcher some (hasWatchedChannel some InternetChannel and
                         hasWatchedTelevision some Television)

由那些在某些电视上观看某些互联网频道的人组成。推理器可以告诉我们这个类表达式是 的子类RichPerson,这意味着这些类型的推理不仅适用于John,而且适用于这个类中的任何东西:

Pellet 在 Protégé 中证实,在某些电视上观看某些互联网频道的任何人都是富人

于 2013-06-06T22:34:39.837 回答