【问题标题】:owl reification vs. rdf reificationowl 物化与 rdf 物化
【发布时间】:2018-01-18 11:44:37
【问题描述】:

说到具体化,最明显的解决方案是 RDF 的具体化,但似乎 OWL2 有自己的词汇表,我想了解原因。举个例子:如果我有以下数据集(它是我们正在使用的数据集的一小部分,它使用 OWL):

@prefix :      <http://purl.bdrc.io/ontology/core/> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

bdr:T123  a     :Topic ;
    rdfs:seeAlso    bdr:T1129 .

我可以像这样用 RDF 对 seeAlso 语句进行具体化和注释:

_:b0 a             rdf:Statement ;
     rdf:subject   bdr:T123 ;
     rdf:predicate rdfs:seeAlso ;
     rdf:object    bdr:T1129 ;
     rdfs:label    "reification 1" .

但很容易找到一些示例(herehere 等),例如:

_:b1 a             owl:Axiom ;
     owl:subject   bdr:T123 ;
     owl:predicate rdfs:seeAlso ;
     owl:object    bdr:T1129 ;
     rdfs:label    "reification 2" .

第一个问题:我的理解是 owl:subject,predicate,object 已被弃用,是这样吗?

用 OWL 对三元组进行具体化和注释的另一种方法似乎是:

_:b2 a                     owl:Axiom ;
     owl:annotatedSource   bdr:T123 ;
     owl:annotatedProperty rdfs:seeAlso ;
     owl:annotatedTarget   bdr:T1129 ;
     rdfs:label            "reification 3" .

(例如 Protege 使用的)但我无法理解 RDF 实体化+注释和 OWL 实体化+注释之间的区别...... OWL 方式只是告诉推理者不要接受实体化的一种方式考虑到?还有什么区别?

【问题讨论】:

    标签: rdf owl


    【解决方案1】:

    RDF 具体化提供了一种在 RDF 中讨论语句的方法。具体化三元组表示存在类型语句的资源,它表达了 RDF 三元组bdr:T123 rdfs:seeAlso bdr:T1129 所说的内容。然后你可以添加关于这个语句的语句,不管具体化的语句是否为真。例如,您可以说该陈述代表 Akira 的观点,或者该陈述在 1942 年至 2017 年之间为真。

    OWL 2 公理注释提供了一种添加公理信息的方法。注释说明了公理,不一定说明它所表达的内容。比如可以说公理是2014年10月加入本体的,不代表2014年就成立。OWL 2注解机制是根据OWL 2 structural specification and functional-style syntax定义的,公理注解写成这样这个:

    AnnotationAssertion(
        Annotation(rdfs:label "reification 1")
        rdfs:seeAlso bdr:T123 bdr:T1129
    )
    

    请注意,在 OWL 2 中,rdfs:seeAlso 被定义为注解属性,因此原始断言 (bdr:T123 rdfs:seeAlso bdr:T1129) 本身就是注解断言。正如你应该看到的,这里没有具体化。 As Ignazio saidowl:annotated* 术语只存在于 RDF 图的映射中。

    为了与编程进行类比,您可以想象一个程序,其中一个人想要管理编程指令作为一等公民。例如,如果编程语言允许您编写:

    MyClass.myMethod(param1,param2); // Instruction I1
    

    如果你想有一个内存结构来告诉何时执行这样的指令,你可以引入一个具体化指令的类:

    Instruction ins = new Instruction(...); // Construct Instruction I1
    ins.setExecutionTime("2017-08-13T10:42:42");
    

    这类似于 RDF 物化。现在,我也可以说该指令是由 Béatrice 添加到代码中的。然而,这并不是说指令本身,而是关于它在代码中的出现。所以最好这样表达:

    MyClass.myMethod(param1,param2); // this was added by Béatrice
    

    这类似于 OWL 2 注释。

    【讨论】:

      【解决方案2】:

      我相信owl:{subject,predicate,object} 反映了对这些 RDF 属性的 URI 的早期提议。它们从来都不是任何规范的一部分,所以虽然没有正式弃用,但它们没有被使用。 owl:annotated{Source,Property,Target} URI 是 Ignazio 链接到的官方规范中的 URI。

      不幸的是,我们有两个词汇表(RDF、OWL2)用于具体化,但 OWL2 规范开发人员认为这是必要的。还有一些其他差异 - 例如OWL 具体化的公理必须是空白节点。

      【讨论】:

      • 在 OWL 2 开发的某个阶段,owl:subject 等是规范的一部分,当时规范只是一个工作草案。这甚至记录在建议中:w3.org/TR/owl2-mapping-to-rdf/#Changes_Since_Last_Call
      • 感谢您的回答,我对 OWL 实体化的轴子必须是空白节点的想法感到困惑,您能指出我的来源吗?背后的原因是什么?
      • 抱歉,我想我找到了:w3.org/TR/owl2-mapping-to-rdf的“表 7. Parsing Declarations in G”
      猜你喜欢
      • 2013-07-02
      • 2018-09-05
      • 2018-08-22
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多