Description
Hello,
I wasn't able to find any documentation about this so I guess it's an issue:
we are using a CsvResolver in our RmlMapper, which is configured as such:
`private Model executeCarmlRmlEngine(File fMappingRule) {
Set mapping =
RmlMappingLoader
.build()
.load(RDFFormat.TURTLE, Paths.get(fMappingRule.getPath()));
RmlMapper mapper =
RmlMapper
.newBuilder()
.setLogicalSourceResolver(Rdf.Ql.JsonPath, new JsonPathResolver())
.setLogicalSourceResolver(Rdf.Ql.XPath, new XPathResolver())
.setLogicalSourceResolver(Rdf.Ql.Csv, new CsvResolver())
.fileResolver(Paths.get("/"))
.addFunctions(new BasicFunctions()).addFunctions(new UtilFunctions())
.build();
return mapper.map(mapping);
}`
We have a test case that tries to read a CSV file, specifically:
id, city, bus, latitude, longitude
6523, Brussels, 25, 50.901389, 4.484444
1234, Prague, 119, 50.1, 4.1
however, upon execution, this error is generated:
Caused by: java.lang.IllegalArgumentException: Header name 'id' not found. Available columns are: [id,, city,, bus,, latitude,, longitude] at com.univocity.parsers.common.record.RecordMetaDataImpl.getMetaData(RecordMetaDataImpl.java:50) at com.univocity.parsers.common.record.RecordMetaDataImpl.metadataOf(RecordMetaDataImpl.java:114) at com.univocity.parsers.common.record.RecordMetaDataImpl.getObjectValue(RecordMetaDataImpl.java:374) at com.univocity.parsers.common.record.RecordImpl.getString(RecordImpl.java:113) at com.taxonic.carml.logical_source_resolver.CsvResolver.lambda$null$0(CsvResolver.java:37) at com.taxonic.carml.engine.GetTemplateValue.lambda$bindTemplateExpression$1(GetTemplateValue.java:53) at com.taxonic.carml.engine.template.CarmlTemplate$Builder.getExpressionValue(CarmlTemplate.java:161) at com.taxonic.carml.engine.template.CarmlTemplate$Builder.getExpressionSegmentValue(CarmlTemplate.java:168) at com.taxonic.carml.engine.template.CarmlTemplate$Builder.create(CarmlTemplate.java:228) at com.taxonic.carml.engine.GetTemplateValue.apply(GetTemplateValue.java:42) at com.taxonic.carml.engine.GetTemplateValue.apply(GetTemplateValue.java:14) at com.taxonic.carml.engine.TermGeneratorCreator.lambda$null$17(TermGeneratorCreator.java:365) at com.taxonic.carml.engine.SubjectMapper.map(SubjectMapper.java:37) at com.taxonic.carml.engine.TriplesMapper.map(TriplesMapper.java:52) at com.taxonic.carml.engine.TriplesMapper.lambda$map$0(TriplesMapper.java:45) at java.base/java.lang.Iterable.forEach(Iterable.java:75) at com.taxonic.carml.engine.TriplesMapper.map(TriplesMapper.java:45) at com.taxonic.carml.engine.RmlMapper.map(RmlMapper.java:434) at com.taxonic.carml.engine.RmlMapper.lambda$map$5(RmlMapper.java:362) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) at com.taxonic.carml.engine.RmlMapper.map(RmlMapper.java:362) at com.taxonic.carml.engine.RmlMapper.map(RmlMapper.java:335)
now, if we modify our file to not have spaces before/after commas in the first row like this:
id,city,bus,latitude,longitude
6523, Brussels, 25, 50.901389, 4.484444
1234, Prague, 119, 50.1, 4.1
Execution is not blocked by any exception...
Any ideas?
Thank you in advance :)