我正在编写一个描述编程语言的Ontology,但我遇到了以下问题:一种语言可能有强或弱的输入,我需要将我的模式限制为这两个选项...所以,我该怎么办是什么?
以下是我的架构示例:
:Language a rdfs:Class .
:typing a rdf:Propery ;
rdfs:domain :Language ;
rdfs:range ? .
提前致谢。
答案 0 :(得分:4)
我不同意Eduardo Silva的回答。功能属性在函数范围内只能有一个值。它可以多次使用,但是OWL推理器可以从这些三元组中获得一些蕴涵。例如,如果您有一些个人example:x1
和一个功能属性:p
,并且您在数据中看到了:
example:x1 :p :foo .
example:x1 :p :bar .
然后您有权推断:foo
和:bar
必须是同一个人,否则会违反:p
的功能性质。或者,如果您通过其他方式知道:foo
和:bar
是不同的个体,那么,鉴于上面两个额外的三元组,您的OWL模型是不一致的。
换句话说,在某些资源上为test:typing
设置两个值是没关系的,只要您接着表示所表示的两种类型方案实际上是相同的。这可能不是你想要的。此外,没有什么可以阻止包含test:typing
的 new 值的三重商店,这在原始范围描述中没有提到。例如:
:ruby a test:Language ;
test:typing test:duckTyping.
与test:typing
作为功能属性不一致。
要将属性的范围限制为某个枚举值之一,您实际需要的是OWL enumerated class。例如:
test:typing
a owl:ObjectProperty ;
rdfs:domain test:Language ;
rdfs:range [
owl:oneOf ( test:strongTyping test:weakTyping )
].
枚举类的扩展(允许值集)正是给定的个体集合。没有其他人被允许。
答案 1 :(得分:0)
我认为一个解决方案可以是定义一个"功能属性",这是一个限制"范围"对一个班级成员(例如:一个人有性别,性别可以是女性或男性 - 只有一个)。
这个猫头鹰看起来像这样(很快在Protege中制作):
<owl:ObjectProperty rdf:about="&test;typing">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="&test;Language"/>
<rdfs:range rdf:resource="&test;Type"/>
</owl:ObjectProperty>
(然后是Type,会有子类:强弱)。
希望这有帮助。