1

RMLMapperを使用して JSON から RDF に変換しています。JSON に格納される値の 1 つが URL です。これを RDF ステートメントのオブジェクトの IRI の基礎として使用したいと考えています。

入力は

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

ステートメントの件名の IRIhttp://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 エンコードされた値が追加されたベースです。<http://example.org/http%3A%2F%2Fexample.org%2Fjobposts%2F345299#item>

r2rml / rml で値を取り、それを IRI として使用する方法はありますか? または、文字列を IRI に変換するには?

4

2 に答える 2

1

1 つのオプションは、rr:template を使用せず、代わりに FnO 関数を使用して、格納された URI を と連結すること#itemです。

これを行う方法に関するドキュメントは、こちらにあります

あなたが与えた例では、サブジェクトマップをこれに置き換えると、必要な解決策が得られます:

<#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 とそのテクノロジに貢献しています。

于 2021-02-05T09:11:14.707 に答える