定义一个OWL类以反映方法签名的参数列表数据类型

时间:2018-07-24 20:30:41

标签: rdf owl ontology rdfs

如何定义RDF列表的子类(是的,它必须是RDF列表),以反映对方法签名的参数列表的数据类型的限制?

例如

给出方法签名:

void set(uint, string);

ABox语句如下所示:

# syntax: Turtle

("42"^^xsd:unsignedInt "Doug") a :SetCallArgumentList .

我的尝试

# syntax: Turtle

:SetCallArgumentList
    rdfs:subClassOf a owl:Class ;
    owl:intersectionOf (
        rdf:List
        [
            a owl:Restriction ;
            owl:onProperty rdf:first ;
            owl:cardinality "1"^^xsd:nonNegativeInteger ;
            owl:allValuesFrom xsd:unsignedInt ;  # 1st parameter: uint
        ]
        [
            a owl:Restriction ;
            owl:onProperty rdf:rest ;
            owl:cardinality "1"^^xsd:nonNegativeInteger ;
            owl:allValuesFrom [
                a owl:Class ;
                owl:intersectionOf rdf:List, [
                    a owl:Restriction ;
                    owl:onProperty rdf:first ;
                    owl:cardinality "1"^^xsd:nonNegativeInteger ;
                    owl:allValuesFrom xsd:string ;  # 2nd parameter: string
                ], [
                    a owl:Restriction ;
                    owl:onProperty rdf:rest ;
                    owl:cardinality "1"^^xsd:nonNegativeInteger ;
                    owl:hasValue rdf:nil ;  # end-of-list
                ] ;
            ] ;
        ] ;
    ) .

我在这里所做的工作是否存在任何危险,冗余或疏忽?欢迎任何评论。

1 个答案:

答案 0 :(得分:1)

假设我们有一个类C和一个方法f(p1:P1, p2:P2):R,这意味着f是一个采用p1P1类型的参数p2的方法类型P2的对象返回类型R的对象。类型P1P2R可以是数据类型或类。

基本思想是引入一个类,该类将使用具体化来表示您的方法及其签名。因此,我们引入了一个类Method_f,它具有属性r_fr_f_invr_p1r_p2r_Rr_fr_f是对象属性,其r_f_inv取反。根据{{​​1}},r_p1r_p2是类还是数据类型,r_RP1P2将是对象属性或数据属性。即如果R是类P1将是对象属性,如果它是数据类型,则r_p1将是数据属性。在整个过程中,我将使用对象属性。

Reification representing method

(1)类r_p1必须表示一个元组(在这种情况下,由4个组件组成),为此我们添加了以下公理:

Method_f

(2)为确保为类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 的给定实例提供参数Cp1的给定值的方法不会返回不同的结果,我们为类{ {1}}以下密钥:

p2

对于不返回任何内容的方法,该键将被省略。

(3)为确保参数和返回值具有正确的类型,添加了以下公理:

Method_f

(4)为确保类 Haskey: r_f_inv, r_p1, r_p2 的实例可以调用方法ObjectProperty: r_p1 Domain: Method_f Range: P1 ObjectProperty: r_p2 Domain: Method_f Range: P2 ObjectProperty: r_R Domain: Method_f Range: R ,我们添加了公理:

C

要表示正在调用的方法f,我们必须:

(1)具有Class: C SubClassOf: r_f some Method_f fCP1的实例,例如P2R,{{1} },c。 (2)具有p1的实例:

p2

(3)调用它。

r

有关此问题的详细说明,请参见我的dissertation的第5章。

相关问题