Rdf 定义一个OWL类以反映方法的参数列表数据类型';签名
如何定义RDF列表的子类(是的,它需要是RDF列表),以反映对方法签名的参数列表的数据类型的限制 例如 给定方法签名:Rdf 定义一个OWL类以反映方法的参数列表数据类型';签名,rdf,owl,ontology,rdfs,Rdf,Owl,Ontology,Rdfs,如何定义RDF列表的子类(是的,它需要是RDF列表),以反映对方法签名的参数列表的数据类型的限制 例如 给定方法签名: void set(uint, string); 其中ABox语句如下所示: # syntax: Turtle ("42"^^xsd:unsignedInt "Doug") a :SetCallArgumentList . 我的尝试 我在这里做的事有没有危险、冗余或疏忽?欢迎任何评论。假设我们有一个类C,它的方法是f(p1:p1,p2:p2):R意思是f是一个方法,它使用p
void set(uint, string);
其中ABox语句如下所示:
# syntax: Turtle
("42"^^xsd:unsignedInt "Doug") a :SetCallArgumentList .
我的尝试
我在这里做的事有没有危险、冗余或疏忽?欢迎任何评论。假设我们有一个类
C
,它的方法是f(p1:p1,p2:p2):R
意思是f
是一个方法,它使用p1
类型的参数p1
和p2
类型的p2
返回R
类型的东西。类型P1
、P2
和R
可以是数据类型或类
其基本思想是引入一个类,该类将使用具体化的签名来表示您的方法。所以我们引入了一个类,比如说Method\u f
,它的属性是r\u f
,r\u inv
,r\u p1
,r\u p2
和r\u r
r\u f
r\u f
是一个对象属性,其逆属性为r\u f\u inv
r\u p1
、r\u p2
和r\u r
将是对象属性或数据属性,具体取决于p1
、p2
和r
是类还是数据类型。即,如果P1
是类r\u P1
将是对象属性,如果它是数据类型,r\u P1
将是数据属性。在整个过程中,我将使用对象属性
(1) 类方法\u f
必须表示一个元组(在本例中由4个组件组成),为此我们添加了以下公理:
Class: Method_f
SubClassOf:
r_f_inv exactly 1 Thing and
r_p1 exactly 1 Thing and
r_p2 exactly 1 Thing and
r_R exactly 1 Thing
(2) 为确保类C
的给定实例的方法(参数p1
和p2
的给定值)不会返回不同的结果,我们为类方法添加了以下键:
Haskey:
r_f_inv, r_p1, r_p2
对于不返回任何内容的方法,只需省略键
(3) 为确保参数和返回值具有正确的类型,添加了以下公理:
ObjectProperty: r_p1
Domain: Method_f
Range: P1
ObjectProperty: r_p2
Domain: Method_f
Range: P2
ObjectProperty: r_R
Domain: Method_f
Range: R
(4) 为了确保类C
的实例可以调用方法f
,我们添加了以下公理:
Class: C
SubClassOf:
r_f some Method_f
要表示调用的方法f
,我们必须:
(1) 有C
,P1
,P2
和R
的实例,比如C
,P1
,P2
,R
。
(2) 有一个方法\u f
的实例:
Individual: method_f_call_1
Types: Method_f
Facts:
r_f_inv c,
r_p1 p1,
r_p2 p2,
r_R r
(3) 调用它
Individual: c
Types: C
Facts: r_f method_f_call_1
有关这方面的详细说明,请参阅手册第5章。我将很快回答这个问题。同时,你可以看看我的第5章,它解释了关于将方法转换为OWL的所有细节。出于兴趣的考虑-你想做这件事的目的是什么?有趣的工作,这种方法看起来相当健壮。但是,参数顺序保留在哪里?例如,我希望在某个地方看到一个链表。顺序是不保留的。这里的目的是实现模型的逻辑验证和确认,以及发现建模启发式冲突。在这些情况下,参数顺序并不重要。参数顺序对于实现细节非常重要,使用OWL无法有效地对其建模。您希望在OWL中对方法建模的目的是什么?谢谢讨论。我意识到我确实有两个不同的需求,一个是验证,另一个是在RDF中编码函数调用。我认为像这样的东西对后者就足够了。
Individual: c
Types: C
Facts: r_f method_f_call_1