在 RMLStreamer 中,grel:arra_join 函数不会产生预期的结果。
映射文件 (mapping.ttl)
@prefix rr: <http://www.w3.org/ns/r2rml#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix ex: <http://example.com/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rml: <http://semweb.mmlab.be/ns/rml#> .
@prefix ql: <http://semweb.mmlab.be/ns/ql#> .
@prefix grel: <http://users.ugent.be/~bjdmeest/function/grel.ttl#> .
@prefix idlab-fn: <http://example.com/idlab/function/> .
@prefix fno: <https://w3id.org/function/ontology#> .
@prefix gist: <http://ontologies.semanticarts.com/gist#>.
@prefix fnml: <http://semweb.mmlab.be/ns/fnml#> .
@base <http://example.com/base/> .
<TriplesMap1> a rr:TriplesMap;
rml:logicalSource [
rml:source "student.csv";
rml:referenceFormulation ql:CSV
];
rr:subjectMap [
rr:template "http://example.com/{ID}/{Name}";
rr:class foaf:Person
];
rr:predicateObjectMap [
rr:predicate ex:id ;
rr:objectMap [ rml:reference "ID" ]
];
rr:predicateObjectMap [
rr:predicate gist:end;
rr:objectMap <#FunctionMapDateTimeEnd>
].
<#FunctionMapDateTimeEnd> a fnml:FunctionTermMap;
rr:datatype xsd:dateTime;
fnml:functionValue [
rml:logicalSource "student.csv";
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 "date" ] ;
] ;
rr:predicateObjectMap [
rr:predicate grel:p_array_a ;
rr:objectMap [ rr:constant "T12:00:00.000Z"; ] ;
] ;
].
学生.csv
ID,Name,Comment,Class,date
1,Venus,A&B,A,2019-11-01
输出
<http://example.com/1/Venus> <http://ontologies.semanticarts.com/gist#end> "T12:00:00.000Z2019-11-01"^^<http://www.w3.org/2001/XMLSchema#dateTime> .
<http://example.com/1/Venus> <http://example.com/id> "1" .
<http://example.com/1/Venus> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
输出的问题是 grel:array_join 的连接顺序。多次执行相同的文件会产生不同的结果。
<http://example.com/1/Venus> <http://ontologies.semanticarts.com/gist#end> "T12:00:00.000Z2019-11-01"^^<http://www.w3.org/2001/XMLSchema#dateTime> .
<http://example.com/1/Venus> <http://ontologies.semanticarts.com/gist#end> "2019-11-01T12:00:00.000Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> .
但是,预期的输出是每次都以给定的顺序 (2019-11-01T12:00:00.000Z) 加入列表。
与 RMLMapper 相同的映射文件会产生一致且正确的结果,并以给定的顺序加入列表。
其他函数,如 grel:toUpperCase 和 idlab-fn:toUpperCaseURL 工作正常,并在 RMLStreamer 和 RMLMapper 中产生正确的结果