1

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

人 -> 有一个地址 -> 空白节点 [街道名称,邮政编码,城市]

我很清楚如何将街道名称、邮政编码和城市添加到rr:objectMap

(附加问题:a 是rr:class强制性的rr: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? ##
      ];
    ].
4

1 回答 1

2

应该不会太难。首先,您获取已创建的 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 表的主键。

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

于 2016-03-21T08:00:26.177 回答