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