玩具示例:
考虑以下类型:
Hamburger, Veggieburger, Component, Vegetable, Meat
哪里
Veggieburger
是subclass_of
Hamburger
Vegetable
和meat
是
Component
考虑以下属性:
Has_component
:domain = Hamburger
,range = Component
现在,我想在Has_component
上重新定义Veggieburger
,并指出它只能包含蔬菜Components
。
有没有办法重新定义(即覆盖)属性Has_component
?
答案 0 :(得分:3)
如果您只愿意使用RDFS,那么我可以建议以下内容:
@prefix menu: <http://yourdomain/menu#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
menu:Burger rdf:type rdfs:Class.
menu:Veggieburger rdf:type rdfs:Class;
rdfs:subClassOf menu:Burger.
menu:Hamburger rdf:type rdfs:Class;
rdfs:subClassOf menu:Burger.
menu:Component rdf:type rdfs:Class.
menu:VeggieComponent rdf:type rdfs:Class;
rdfs:subClassOf menu:Component.
menu:MeatComponent rdf:type rdfs:Class;
rdfs:subClassOf menu:Component.
#use camel casing for property names
menu:hasComponent rdf:type rdf:Property;
rdfs:domain menu:Burger;
rdfs:range menu:Component.
menu:hasMeatComponent rdf:type rdf:Property;
rdfs:subPropertyOf menu:hasComponent;
rdfs:domain menu:MeatBurger;
rdfs:range menu:MeatComponent.
menu:hasVeggieComponent rdf:type rdf:Property;
rdfs:domain menu:VeggieBurger;
rdfs:subPropertyOf menu:hasComponent;
rdfs:range menu:VeggieComponent.
答案 1 :(得分:2)
你可以在RDFS中添加另一对域/范围公理,推理器将实际范围解释为两个类的交集,Component&amp; VeggieComponent,在这个例子中没问题。在某些情况下,这是不可取的,所以请记住这一点。
你也可以用OWL&amp;获得你想要的东西的限制,ala
VeggieBurger subClassOf some(HasComponent,VeggieComponent)