【问题标题】:R2RML Blank Node within rr:objectMaprr:objectMap 中的 R2RML 空白节点
【发布时间】:2016-03-20 17:41:42
【问题描述】:

我想知道如何使用 r2rml 对以下内容进行建模:

Person -> 有地址 --> 空白节点 [ Street Name, Postal Code, City ]

我知道如何将街道名称、邮政编码和城市添加到 rr:objectMap 中的空白节点

(附加问题:rr:classrr:BlankNode 的必填项吗?)

有什么建议吗? :)

<#Person>
    rr:logicalTable [ rr:tableName "PERSON" ];
    rr:subjectMap [
      rr:template "http://ex.com/data/PersonClass/{ID}";
      rr:class ex:PersonClass;
    ];
    rr:preciateObjectMap [
      rr:predicate ex:hasAddress;
      rr:objectMap [
        rr:termType rr:BlankNode;
        ## How/where can a add the street name, postal code, city? ##
      ];
    ].

【问题讨论】:

    标签: semantic-web r2rml


    【解决方案1】:

    应该不会太难。首先,您获取已创建的 R2RML 映射并为地址创建一个空白节点。使用模板给它一个唯一的名称,但不要给它一个 IRI,所以它被解释为一个空白节点。

    <#Person>
        rr:logicalTable [ rr:tableName "PERSON" ];
        rr:subjectMap [
          rr:template "http://ex.com/data/PersonClass/{ID}";
          rr:class ex:PersonClass;
        ];
        rr:preciateObjectMap [
          rr:predicate ex:hasAddress;
          rr:objectMap [
            rr:template "BlankAddressNode{ADDRESSID}"; 
            rr:termType rr:BlankNode;
          ];
        ].
    

    注意:PERSON 表中的 ADDRESSID 被认为是 ADDRESS 表主键的外来键。

    接下来,您使用 rdf:type 和其他所有内容创建空白节点。

    <#Address>
        rr:logicalTable [ rr:tableName "ADDRESS" ];
        rr:subjectMap [
          rr:template "BlankAddressNode{ID}"; 
          rr:termType rr:BlankNode;
          rr:class ex:AddressClass;
        ];
        rr:predicateObjectMap [
            rr:predicate    ex:street;
            rr:objectMap    [  rr:column "Street"]
        ];
        .
    

    注意:ID 是 ADDRESS 表的主键。

    您也可以通过加入来做到这一点...但我认为从教程的角度来看这更清楚。

    【讨论】:

    • 首先...谢谢 :) 但是,我不明白rr:template "BlankAddressNode{ID}"; 的部分是您正在使用的自定义变量吗?它是否在 rr:subjectMap 中工作?
    • 首先:您需要将两个映射放在同一个文件中。在处理该 R2RML 映射文件期间,它将使用每个空白节点的标识符。例如,如果您正在处理 ID 为 1025 的 Person 行,它将创建一个“BlankAddressNode1025”空白节点。它将在 hasAddress 和 Address 映射中使用该空白节点。注意:这可能不是“正确”的方式,因为海龟规范说空白节点需要格式化为 _:BlankAddressNode1025 但它对我有用。
    • 我会试试这个 :) 你知道“正确”的方式是什么样的吗?
    • 根据我的经验,即使对于空白节点,您也需要在 rr:subjectMap 中添加 rr:class(但这可能取决于工具)。从理论上讲,您可以在这里使用一个非常通用的类,例如 owl:Thing(但同样,它可能取决于工具)。
    • 试试rr:template "_:BlankAddressNode{ID}"。另请注意:这不能保证是您在 de RDF 存储中的空白节点的最终值。
    猜你喜欢
    • 1970-01-01
    • 2015-01-04
    • 2016-09-01
    • 2016-06-09
    • 2016-10-31
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多