Rdf 在OWL中使用Excluded By

Rdf 在OWL中使用Excluded By,rdf,ontology,owl,reasoning,inference-engine,Rdf,Ontology,Owl,Reasoning,Inference Engine,亲爱的语义网的朋友们 我在问自己,我怎么能在OWL中定义一个“Excluded by”结构。 目前我能想到的唯一解决办法是使用disjointWith。 示例代码中演示了我对“排除者”的意思。 房屋对象是屋顶、墙、窗和楼板的交点。 因此,如果其中一个班级缺课,个人将不会成为一所房子。 但是推理器将进一步进行推理,因为特定交集缺少的类可能成为真的。 另一方面,House类与Tsunami类的关系是不相交的。 当我的个人是海啸班时,我直接知道我的个人永远不会成为家庭班。 这是我在谈论“被排除在外”时

亲爱的语义网的朋友们

我在问自己,我怎么能在OWL中定义一个“Excluded by”结构。 目前我能想到的唯一解决办法是使用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

老实说,我不太明白你在找什么。然而,我觉得你试图用一种完全错误的方式使用猫头鹰。下面是一些获得更好模型的技巧,我希望能让你更好地理解如何有效地使用OWL

示例本体中最重要的问题是,使用类实例关系的方式毫无意义。您有一个类型为Roof、Wall、Window和Floor的个人。从概念上讲,这只是胡说八道:一件事怎么可能同时是这四件事呢

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

例如,要建模一所房子必须至少由一个屋顶、四面墙和一扇窗户组成,可以执行以下操作(使用):

前缀::
类别:屋顶
类别:窗口
类别:墙
班级:豪斯
子类别:hasRoof最小值1、hasWall最小值4和hasWindow最小值1
班级海啸
分离:房子
ObjectProperty:hasRoof
域名:豪斯
范围:屋顶
ObjectProperty:hasWall
域名:豪斯
范围:墙
ObjectProperty:hasWindow
域名:豪斯
范围:窗口
个人:我的房子
类型:住宅
请注意,我们如何将房屋类定义为至少有四面墙、一个屋顶和至少一扇窗户的所有事物的子类。请注意,我们使用的是子类关系(不是等价类关系),因为我们想说,如果某个东西是房子,它必须有这些东西。我们不想说相反的话,因为毕竟,确实存在有四面墙、屋顶和窗户的东西,但它们不是房子(例如谷仓、棚屋、商店)

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


还要注意:这只是一个可能的建模方法的示例。您可以在建模中做出其他选择(例如,使用通用的
hasPart
属性,而不是特定的
hasroop
/
hasWall
/
haswown
属性来建模房屋与屋顶、墙和窗之间的关系),这些选择同样合适,具体取决于您的需求/品味

好的,谢谢,你是完全正确的,我用了错误的例子来阐明我的观点,关于在我的模型中使用不相交公理来引入“排除者”关系。我同意你关于使用子类关系的观点,但是在我的例子中,我真的不知道我的对象是House类型的,我只知道其中一个关系:hasWindow、hasWall是否存在。然后推论者应该得出结论,我的个人是房子。我可以在这些情况下使用OWL?是的,您可以通过将子类关系更改为等价类关系。如果这符合您的用例,请务必这样做。我只是觉得有必要指出,一般来说,这可能不是你想要的。
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