2

亲爱的语义网人,

我在质疑自己如何在 OWL 中定义“排除者”结构。目前我能想到的唯一解决方案是使用 disjointWith。示例代码中演示了“排除者”的含义。房屋对象是屋顶、墙壁、窗户和地板的交集。因此,如果其中一个课程错过,个人将不会成为众议院。但是推理器会进一步推理,因为特定交集的缺失类可能会成为真的。另一方面,House 类与 Tsunami 类具有脱节的关系。当我的个人是海啸班级时,我直接知道我的个人永远不会成为众议院班级。这是我在谈论“排除者”时所期望的行为。但也许其他人对此有不同的看法?

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!DOCTYPE rdf:RDF [
    <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>

<rdf:RDF    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
            xmlns="http://www.almfluss.com/rdf/0.1/Ontology.owl#" 
            xmlns:owl="http://www.w3.org/2002/07/owl#">

<owl:Class rdf:about="#House">
    <owl:intersectionOf rdf:parseType="Collection">
        <rdf:Description rdf:about="#Roof"/>
        <rdf:Description rdf:about="#Wall"/>
        <rdf:Description rdf:about="#Windows"/>
        <rdf:Description rdf:about="#Floor"/>
    </owl:intersectionOf>
    <owl:disjointWith rdf:resource="#Tsunami"/>
</owl:Class>

<owl:NamedIndividual rdf:about="#instance_House">
    <rdf:type rdf:resource="#Roof"/>
    <rdf:type rdf:resource="#Wall"/>
    <rdf:type rdf:resource="#Windows"/>
    <rdf:type rdf:resource="#Floor"/>
    <rdf:type rdf:resource="#Tsunami"/>
</owl:NamedIndividual>


<owl:Class rdf:about="#Roof"/>
<owl:Class rdf:about="#Wall"/>
<owl:Class rdf:about="#Windows"/>
<owl:Class rdf:about="#Floor"/>
<owl:Class rdf:about="#Tsunami"/>

</rdf:RDF>

问候, Martijn van der Plaat

4

1 回答 1

2

老实说,我不太明白你在追求什么。但是,我感觉您正在尝试以完全错误的方式使用 OWL。因此,这里有一些获得更好模型的技巧,希望能让您更好地了解如何有效地使用 OWL。

您的示例本体中最重要的问题是您以一种没有意义的方式使用类-实例关系。您有一个类型为屋顶、墙壁、窗户和地板的个体。这在概念上只是胡说八道:一个东西怎么可能同时是这四种东西呢?

房屋和屋顶/墙壁/窗户之间的关系不是一个是另一个(isA),而是它们是彼此的一部分。因此,您不应使用交叉和不相交公理之类的东西来尝试对本体建模,而应使用关系和属性限制。

例如,要模拟房屋必须至少包含一个屋顶、四面墙和一扇窗户,您可以执行以下操作(使用OWL Manchester 语法):

Prefix: : <http://example.org/>

Class: Roof

Class: Window

Class: Wall

Class: House 
   SubClassOf: hasRoof min 1 and hasWall min 4 and hasWindow min 1

Class Tsunami
   DisjointWith: House

ObjectProperty: hasRoof
   Domain: House
   Range: Roof

ObjectProperty: hasWall
   Domain: House
   Range: Wall

ObjectProperty: hasWindow
   Domain: House
   Range: Window

Individual: myHouse
   Types: House 

请注意我们如何将房屋类定义为所有具有至少四堵墙、一个屋顶和至少一扇窗户的事物的子类。请注意,我们使用的是子类关系(不是等价类关系),因为我们想说如果某物是房子,它必须有这些东西。我们不想说相反,因为毕竟确实存在有四面墙、一个屋顶和一扇窗户的东西,但它们不是房子(例如谷仓、棚子、商店)。

至于海啸:虽然房屋类别和海啸类别确实是不相交的,但我不太确定建模是否特别有用。海啸和房屋之间更有趣的关系可能是一个对另一个来说是危险的。

另请注意:这只是可能的建模方式的一个示例。您可以在建模中做出其他选择(例如,使用通用hasPart属性而不是特定的hasRoof/ hasWall/hasWindow属性来建模房屋与屋顶、墙壁和窗户之间的关系),这同样很好,具体取决于您的需求/品味。

于 2012-10-28T21:22:20.703 回答