【问题标题】:Is there any way in rml / r2rml to take a value as an IRI?rml / r2rml 中是否有任何方法可以将值作为 IRI?
【发布时间】:2021-04-30 04:53:31
【问题描述】:

我正在使用RMLMapper 将 JSON 转换为 RDF。存储在 JSON 中的值之一是 URL。我想以此作为 RDF 语句对象的 IRI 的基础。

输入是

{
  "documentId": {
    "value": "http://example.org/345299"
  },
...

我希望语句主题的 IRI 为 http://example.org/345299#item,例如<http://example.org/345299#item> a <http://schema.org/Thing> .

我试过了

@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix rml: <http://semweb.mmlab.be/ns/rml#>.
@prefix ql: <http://semweb.mmlab.be/ns/ql#>.
<#Mapping> a rr:TriplesMap ;
  rml:logicalSource [
    rml:source "input.json";
    rml:referenceFormulation ql:JSONPath;
    rml:iterator "$"
  ];

  rr:subjectMap [
    rr:template "{documentId.value}#item" ;
    rr:class schema:Thing
  ]

给出rr:template "{documentId.value}#item" 没有产生有效IRI 的错误。

为@base 提供一个值会给出一个有效的IRI,但它是在基础上附加了url 编码值的基础,例如&lt;http://example.org/http%3A%2F%2Fexample.org%2Fjobposts%2F345299#item&gt;

那么在 r2rml / rml 中是否有任何方法可以获取一个值并将其用作 IRI?还是将字符串转换为 IRI?

【问题讨论】:

  • 您问题中的映射是正确的 AFAICT。默认情况下,rr:template 应该按照w3.org/TR/r2rml/#from-template 生成 IRI。 > 默认情况下,rr:template 生成 IRI。这似乎是一个错误。也许明确提供强制 rr:termType rr:IRI 会有所帮助。

标签: json mapping rdf r2rml rml-rdf


【解决方案1】:

一种选择是不使用 rr:template,而是使用 FnO 函数将存储的 URI 与 #item 连接起来。

可以在here找到有关如何执行此操作的文档。

在你给出的例子中,用这个替换主题图给出了所需的解决方案:

<#Mapping> rr:subjectMap [
  a fnml:FunctionTermMap;
  rr:termType rr:IRI;
  fnml:functionValue [
    rml:logicalSource <#Source> ;
    rr:predicateObjectMap [
      rr:predicate fno:executes ;
      rr:objectMap [ rr:constant grel:array_join ] ;
    ] ;
    rr:predicateObjectMap [
      rr:predicate grel:p_array_a ;
      rr:objectMap [ rml:reference "documentId.value" ] ;
    ] ;
    rr:predicateObjectMap [
      rr:predicate grel:p_array_a ;
      rr:objectMap [ rr:constant "#item" ] ;
    ] ;
  ] .

注意:我为 RML 及其技术做出了贡献。

【讨论】:

    【解决方案2】:

    rml:reference 足够接近。

      rr:subjectMap [
        rml:reference "documentId.value" ;
        rr:class schema:Thing
      ]
    

    似乎不允许我附加 #item,但现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 2015-08-13
      • 2020-12-09
      • 2015-05-23
      • 1970-01-01
      相关资源
      最近更新 更多