Reputation: 53
I'm using RMLMapper to transfrom JSON to RDF. One of the values stored in the JSON is a URL. I would like to use this as the basis of an IRI for the object of RDF statements.
The input is
{
"documentId": {
"value": "http://example.org/345299"
},
...
I want the IRI for the subject of statements to be http://example.org/345299#item
, e.g. <http://example.org/345299#item> a <http://schema.org/Thing> .
I tried
@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
]
gives and error that rr:template "{documentId.value}#item"
doesn't produce a valid IRI.
Providing a value for @base gives a valid IRI, but it is the base with the url-encoded value appended to the base, e.g. <http://example.org/http%3A%2F%2Fexample.org%2Fjobposts%2F345299#item>
So is there any way in r2rml / rml to take a value and just use it as an IRI? Or to convert a string in to an IRI?
Upvotes: 1
Views: 576
Reputation: 46
One option would be to not use a rr:template, but instead an FnO function to concatenate the stored URI with #item
.
Documentation on how to do this can be found here.
In the example you give, replacing the subject map with this gives the required solution:
<#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" ] ;
] ;
] .
Note: I contribute to RML and its technologies.
Upvotes: 1
Reputation: 53
rml:reference
is close enough.
rr:subjectMap [
rml:reference "documentId.value" ;
rr:class schema:Thing
]
Doesn't seem to let me append #item
but it'll do for now.
Upvotes: 0